# __2.20.162__ __2023-10-06__
## __AWS Marketplace Catalog Service__
  - ### Features
    - This release adds support for Document type as an alternative for stringified JSON for StartChangeSet, DescribeChangeSet and DescribeEntity APIs

## __AWS Transfer Family__
  - ### Features
    - This release updates the max character limit of PreAuthenticationLoginBanner and PostAuthenticationLoginBanner to 4096 characters

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Documentation updates for Elastic Compute Cloud (EC2).

## __Amazon FSx__
  - ### Features
    - After performing steps to repair the Active Directory configuration of a file system, use this action to initiate the process of attempting to recover to the file system.

## __Amazon QuickSight__
  - ### Features
    - NullOption in FilterListConfiguration; Dataset schema/table max length increased; Support total placement for pivot table visual; Lenient mode relaxes the validation to create resources with definition; Data sources can be added to folders; Redshift data sources support IAM Role-based authentication

# __2.20.161__ __2023-10-05__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SecurityHub__
  - ### Features
    - Added new resource detail objects to ASFF, including resources for AwsEventsEventbus, AwsEventsEndpoint, AwsDmsEndpoint, AwsDmsReplicationTask, AwsDmsReplicationInstance, AwsRoute53HostedZone, and AwsMskCluster

## __AWS Storage Gateway__
  - ### Features
    - Add SoftwareVersion to response of DescribeGatewayInformation.

## __Amazon Omics__
  - ### Features
    - Add Etag Support for Omics Storage in ListReadSets and GetReadSetMetadata API

## __Amazon Relational Database Service__
  - ### Features
    - Updates Amazon RDS documentation for corrections and minor improvements.

## __Amazon Route 53__
  - ### Features
    - Add hostedzonetype filter to ListHostedZones API.

## __Amazon WorkSpaces__
  - ### Features
    - This release introduces Manage applications. This feature allows users to manage their WorkSpaces applications by associating or disassociating their WorkSpaces with applications. The DescribeWorkspaces API will now additionally return OperatingSystemName in its responses.

# __2.20.160__ __2023-10-04__
## __AWS MediaTailor__
  - ### Features
    - Updates DescribeVodSource to include a list of ad break opportunities in the response

## __AWS SDK for Java v2__
  - ### Features
    - Add support for building JDK 21.
    - Updated endpoint and partition metadata.

## __Amazon AppConfig__
  - ### Features
    - AWS AppConfig introduces KMS customer-managed key (CMK) encryption support for data saved to AppConfig's hosted configuration store.

## __Amazon DataZone__
  - ### Features
    - Initial release of Amazon DataZone

## __Amazon SageMaker Service__
  - ### Features
    - Adding support for AdditionalS3DataSource, a data source used for training or inference that is in addition to the input dataset or model data.

## __Application Migration Service__
  - ### Features
    - This release includes the following new APIs: ListConnectors, CreateConnector, UpdateConnector, DeleteConnector and UpdateSourceServer to support the source action framework feature.

# __2.20.159__ __2023-10-03__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release adds the ability to replace video frames without modifying the audio essence.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Well-Architected Tool__
  - ### Features
    - AWS Well-Architected now supports Review Templates that allows you to create templates with pre-filled answers for Well-Architected and Custom Lens best practices.

## __Amazon Connect Service__
  - ### Features
    - GetMetricDataV2 API: Update to include new metrics CONTACTS_RESOLVED_IN_X , AVG_HOLD_TIME_ALL_CONTACTS , AVG_RESOLUTION_TIME , ABANDONMENT_RATE , AGENT_NON_RESPONSE_WITHOUT_CUSTOMER_ABANDONS with added features: Interval Period, TimeZone, Negate MetricFilters, Extended date time range.

## __Amazon Location Service__
  - ### Features
    - Amazon Location Service adds support for bounding polygon queries. Additionally, the GeofenceCount field has been added to the DescribeGeofenceCollection API response.

## __Amazon SageMaker Service__
  - ### Features
    - This release allows users to run Selective Execution in SageMaker Pipelines without SourcePipelineExecutionArn if selected steps do not have any dependent steps.

## __CloudWatch Observability Access Manager__
  - ### Features
    - This release adds support for sharing AWS::ApplicationInsights::Application resources.

# __2.20.158__ __2023-10-02__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Security Token Service__
  - ### Features
    - STS API updates for assumeRole

## __AWS Single Sign-On__
  - ### Features
    - Fix FIPS Endpoints in aws-us-gov.

## __AWS Transfer Family__
  - ### Features
    - Documentation updates for AWS Transfer Family

## __Amazon Bedrock__
  - ### Features
    - Provisioned throughput feature with Amazon and third-party base models, and update validators for model identifier and taggable resource ARNs.

## __Amazon Bedrock Runtime__
  - ### Features
    - Add model timeout exception for InvokeModelWithResponseStream API and update validator for invoke model identifier.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Introducing Amazon EC2 R7iz instances with 3.9 GHz sustained all-core turbo frequency and deliver up to 20% better performance than previous generation z1d instances.

## __Amazon Managed Blockchain__
  - ### Features
    - Remove Rinkeby as option from Ethereum APIs

## __Amazon Relational Database Service__
  - ### Features
    - Adds DefaultCertificateForNewLaunches field in the DescribeCertificates API response.

# __2.20.157__ __2023-09-28__
## __AWS Budgets__
  - ### Features
    - Update DescribeBudgets and DescribeBudgetNotificationsForAccount MaxResults limit to 1000.

## __AWS IoT FleetWise__
  - ### Features
    - AWS IoT FleetWise now supports encryption through a customer managed AWS KMS key. The PutEncryptionConfiguration and GetEncryptionConfiguration APIs were added.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - Correct and improve the documentation for the FieldToMatch option JA3 fingerprint.

## __Amazon Bedrock__
  - ### Features
    - Model Invocation logging added to enable or disable logs in customer account. Model listing and description support added. Provisioned Throughput feature added. Custom model support added for creating custom models. Also includes list, and delete functions for custom model.

## __Amazon Bedrock Runtime__
  - ### Features
    - Run Inference: Added support to run the inference on models. Includes set of APIs for running inference in streaming and non-streaming mode.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds support for Customer Managed Key encryption for Amazon Verified Access resources

## __Amazon SageMaker Feature Store Runtime__
  - ### Features
    - Feature Store supports read/write of records with collection type features.

## __Amazon SageMaker Service__
  - ### Features
    - Online store feature groups supports Standard and InMemory tier storage types for low latency storage for real-time data retrieval. The InMemory tier supports collection types List, Set, and Vector.

# __2.20.156__ __2023-09-27__
## __AWS IoT__
  - ### Features
    - Added support for IoT Rules Engine Kafka Action Headers

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Cognito Identity Provider__
  - ### Features
    - The UserPoolType Status field is no longer used.

## __Amazon Kinesis Firehose__
  - ### Features
    - Features : Adding support for new data ingestion source to Kinesis Firehose - AWS Managed Services Kafka.

## __Amazon Textract__
  - ### Features
    - This release adds new feature - Layout to Analyze Document API which can automatically extract layout elements such as titles, paragraphs, headers, section headers, lists, page numbers, footers, table areas, key-value areas and figure areas and order the elements as a human would read.

# __2.20.155__ __2023-09-26__
## __AWS App Runner__
  - ### Features
    - This release allows an App Runner customer to specify a custom source directory to run the build & start command. This change allows App Runner to support monorepo based repositories

## __AWS CodeDeploy__
  - ### Features
    - CodeDeploy now supports In-place and Blue/Green EC2 deployments with multiple Classic Load Balancers and multiple Target Groups.

## __AWS Lake Formation__
  - ### Features
    - This release adds three new API support "CreateLakeFormationOptIn", "DeleteLakeFormationOptIn" and "ListLakeFormationOptIns", and also updates the corresponding documentation.

## __Amazon AppIntegrations Service__
  - ### Features
    - The Amazon AppIntegrations service adds a set of APIs (in preview) to manage third party applications to be used in Amazon Connect agent workspace.

## __Amazon Connect Service__
  - ### Features
    - This release updates a set of Amazon Connect APIs that provides the ability to integrate third party applications in the Amazon Connect agent workspace.

## __Amazon DynamoDB__
  - ### Features
    - Amazon DynamoDB now supports Incremental Export as an enhancement to the existing Export Table

## __Amazon DynamoDB Enhanced Client__
  - ### Bugfixes
    - Provides a clearer exception message when building a ReadBatch or WriteBatch without setting the mappedTableResource (table)
        - Contributed by: [@swar8080](https://github.com/swar8080)

## __Amazon Elastic Compute Cloud__
  - ### Features
    - The release includes AWS verified access to support FIPs compliance in North America regions

## __Amazon Pinpoint__
  - ### Features
    - Update documentation for RemoveAttributes to more accurately reflect its behavior when attributes are deleted.

## __Amazon Simple Storage Service__
  - ### Features
    - This release adds a new field COMPLETED to the ReplicationStatus Enum. You can now use this field to validate the replication status of S3 objects using the AWS SDK.

## __Contributors__
Special thanks to the following contributors to this release: 

[@swar8080](https://github.com/swar8080)
# __2.20.154__ __2023-09-25__
## __AWS Amplify UI Builder__
  - ### Features
    - Support for generating code that is compatible with future versions of amplify project dependencies.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - You can now perform an exact match against the web request's JA3 fingerprint.

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - Adds support for sending WebRTC audio to Amazon Kineses Video Streams.

## __Amazon QuickSight__
  - ### Features
    - Added ability to tag users upon creation.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This release updates the enum values for ResourceType in SSM DescribeInstanceInformation input and ConnectionStatus in GetConnectionStatus output.

## __EMR Serverless__
  - ### Features
    - This release adds support for application-wide default job configurations.

## __FinSpace Public API__
  - ### Features
    - Adding sensitive trait to attributes. Change max SessionDuration from 720 to 60. Correct "ApiAccess" attribute to "apiAccess" to maintain consistency between APIs.

## __S3TransferManager__
  - ### Bugfixes
    - Fix [aws-crt-java issue [#686](https://github.com/aws/aws-sdk-java-v2/issues/686)](https://github.com/awslabs/aws-crt-java/issues/686) S3AsyncClient ignoring trustAllCertificatesEnabled setting
        - Contributed by: [@graebm](https://github.com/graebm)

## __Contributors__
Special thanks to the following contributors to this release: 

[@graebm](https://github.com/graebm)
# __2.20.153__ __2023-09-22__
## __AWS Database Migration Service__
  - ### Features
    - new vendors for DMS CSF: MongoDB, MariaDB, DocumentDb and Redshift

## __AWS Elemental MediaConvert__
  - ### Features
    - This release supports the creation of of audio-only tracks in CMAF output groups.

## __AWS SDK for Java v2__
  - ### Features
    - Adds support for non-Json String payloads
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fixed an issue in `InputStreamSubscriber` that could cause NPE to be thrown when close and onSubscribed get invoked concurrently. See [#4081](https://github.com/aws/aws-sdk-java-v2/issues/4081)

## __Amazon CloudWatch Events__
  - ### Features
    - Adds sensitive trait to various shapes in Jetstream Connections API model.

## __Amazon DynamoDB__
  - ### Bugfixes
    - Fixed a bug in DynamoDbTable.createTable, where global secondary indices with a partition key matching the default partition key of the table would be created as local secondary indices.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - EC2 M2 Pro Mac instances are powered by Apple M2 Pro Mac Mini computers featuring 12 core CPU, 19 core GPU, 32 GiB of memory, and 16 core Apple Neural Engine and uniquely enabled by the AWS Nitro System through high-speed Thunderbolt connections.

## __Amazon Elastic File System__
  - ### Features
    - Documentation updates for Elastic File System

## __Amazon GuardDuty__
  - ### Features
    - Add `EKS_CLUSTER_NAME` to filter and sort key.

## __Amazon S3__
  - ### Bugfixes
    - Fixed the issue where SdkException is unnecessarily re-wrapped with SdkClientException in S3 multipart client and AWS CRT-based S3 client. See[#4356](https://github.com/aws/aws-sdk-java-v2/issues/4356)

## __Amazon Simple Storage Servic__
  - ### Bugfixes
    - Fix for Cross-region calls failure due to AuthorizationHeaderMalformed errors while using clients with configured region as us-east-1.

## __Braket__
  - ### Features
    - This release adds support to view the device queue depth (the number of queued quantum tasks and hybrid jobs on a device) and queue position for a quantum task and hybrid job.

## __DynamoDB Enhanced Client__
  - ### Features
    - Adds count, scanned count and returned consumed capacity to Page, used by Scan and Query operations

# __2.20.152__ __2023-09-20__
## __AWS App Runner__
  - ### Features
    - This release adds improvements for managing App Runner auto scaling configuration resources. New APIs: UpdateDefaultAutoScalingConfiguration and ListServicesForAutoScalingConfiguration. Updated API: DeleteAutoScalingConfiguration.

## __AWS Cloud Map__
  - ### Features
    - Adds a new DiscoverInstancesRevision API and also adds InstanceRevision field to the DiscoverInstances API response.

## __AWS Lambda__
  - ### Features
    - Update aws-lambda-java-core version to 1.2.3
        - Contributed by: [@deki](https://github.com/deki)

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SSO OIDC__
  - ### Features
    - Update FIPS endpoints in aws-us-gov.

## __Amazon AppConfig__
  - ### Features
    - Enabling boto3 paginators for list APIs and adding documentation around ServiceQuotaExceededException errors

## __Amazon CloudWatch Logs__
  - ### Features
    - Add ClientToken to QueryDefinition CFN Handler in CWL

## __Amazon Kinesis Video Streams__
  - ### Features
    - Updated DescribeMediaStorageConfiguration, StartEdgeConfigurationUpdate, ImageGenerationConfiguration$SamplingInterval, and UpdateMediaStorageConfiguration to match AWS Docs.

## __Amazon Simple Storage Service__
  - ### Features
    - Fix an issue where the SDK can fail to unmarshall response due to NumberFormatException

## __CodeArtifact__
  - ### Features
    - Add support for the Swift package format.

## __S3 Transfer Manager__
  - ### Bugfixes
    - Fix [3839](https://github.com/aws/aws-sdk-java-v2/issues/3839) S3 Transfer Manager issue with transferComplete() not called for AsyncRequestBody.fromFile()

## __Contributors__
Special thanks to the following contributors to this release: 

[@deki](https://github.com/deki)
# __2.20.151__ __2023-09-19__
## __AWS Outposts__
  - ### Features
    - This release adds the InstanceFamilies field to the ListAssets response.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for C7i, and R7a instance types.

## __Amazon SageMaker Service__
  - ### Features
    - This release adds support for one-time model monitoring schedules that are executed immediately without delay, explicit data analysis windows for model monitoring schedules and exclude features attributes to remove features from model monitor analysis.

# __2.20.150__ __2023-09-18__
## __AWS Application Discovery Service__
  - ### Features
    - Add sensitive protection for customer information

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Do not instruct the CRT Sigv4a signer to do path normalization to avoid signature mismatch errors

## __Amazon Macie 2__
  - ### Features
    - This release changes the default managedDataIdentifierSelector setting for new classification jobs to RECOMMENDED. By default, new classification jobs now use the recommended set of managed data identifiers.

## __Amazon WorkMail__
  - ### Features
    - This release includes four new APIs UpdateUser, UpdateGroup, ListGroupsForEntity and DescribeEntity, along with RemoteUsers and some enhancements to existing APIs.

# __2.20.149__ __2023-09-15__
## __AWS DataSync__
  - ### Features
    - Documentation-only updates for AWS DataSync.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon AppStream__
  - ### Features
    - This release introduces app block builder, allowing customers to provision a resource to package applications into an app block

## __Amazon Connect Service__
  - ### Features
    - New rule type (OnMetricDataUpdate) has been added

## __Amazon SageMaker Service__
  - ### Features
    - This release introduces Skip Model Validation for Model Packages

# __2.20.148__ __2023-09-14__
## __AWS CloudFormation__
  - ### Features
    - Documentation updates for AWS CloudFormation

## __AWS EntityResolution__
  - ### Features
    - Changed "ResolutionTechniques" and "MappedInputFields" in workflow and schema mapping operations to be required fields.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon AppStream__
  - ### Features
    - This release introduces multi-session fleets, allowing customers to provision more than one user session on a single fleet instance.

## __Amazon Lookout for Equipment__
  - ### Features
    - This release adds APIs for the new scheduled retraining feature.

# __2.20.147__ __2023-09-13__
## __AWS Cloud9__
  - ### Features
    - Update to include information on Ubuntu 18 deprecation.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Allow IamPolicy to read json policies where the principal value is itself an array
    - Fix `InputStreamSubscriber` to return 0 when reading a length of 0.
        - Contributed by: [@faucct](https://github.com/faucct)

## __AWS SimSpace Weaver__
  - ### Features
    - Edited the introductory text for the API reference.

## __AWS X-Ray__
  - ### Features
    - Add StartTime field in GetTraceSummaries API response for each TraceSummary.

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - This release updates the Amazon CloudWatch Internet Monitor API domain name.

## __Amazon DynamoDB Enhanced Client__
  - ### Features
    - This commit introduces returnConsumedCapacity input to BatchGetItemEnhancedRequest that allows customers to find out exactly how much read units were consumed by the operation.
        - Contributed by: [@psnilesh](https://github.com/psnilesh)

## __Amazon GuardDuty__
  - ### Features
    - Add `managementType` field to ListCoverage API response.

## __Amazon Interactive Video Service RealTime__
  - ### Features
    - Doc only update that changes description for ParticipantToken.

## __Amazon Kinesis Firehose__
  - ### Features
    - DocumentIdOptions has been added for the Amazon OpenSearch destination.

## __Elastic Disaster Recovery Service__
  - ### Features
    - Updated existing APIs and added new ones to support using AWS Elastic Disaster Recovery post-launch actions. Added support for new regions.

## __Contributors__
Special thanks to the following contributors to this release: 

[@faucct](https://github.com/faucct), [@psnilesh](https://github.com/psnilesh)
# __2.20.146__ __2023-09-12__
## __AWS CRT-based S3 Client__
  - ### Bugfixes
    - Improved CRT client uploads by directly passing requestPath, eliminating unnecessary file I/O in the Java SDK Transfer Manager.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWSKendraFrontendService__
  - ### Features
    - Amazon Kendra now supports confidence score buckets for retrieved passage results using the Retrieve API.

## __Amazon DynamoDB Enhanced Client__
  - ### Features
    - This commit introduces DynamoDbTable#getItemWithResponse() that allows customers to specify additional parameters on the request such as ReturnConsumedCapacity to get additional information the service response.
        - Contributed by: [@psnilesh](https://github.com/psnilesh)

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for restricting public sharing of AMIs through AMI Block Public Access

## __Amazon EventBridge__
  - ### Features
    - Adds sensitive trait to various shapes in Jetstream Connections API model.

## __Contributors__
Special thanks to the following contributors to this release: 

[@psnilesh](https://github.com/psnilesh)
# __2.20.145__ __2023-09-11__
## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental Link now supports attaching a Link UHD device to a MediaConnect flow.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release will have ValidationException be thrown from ECR LifecyclePolicy APIs in regions LifecyclePolicy is not supported, this includes existing Amazon Dedicated Cloud (ADC) regions. This release will also change Tag: TagValue and Tag: TagKey to required.

## __Amazon QuickSight__
  - ### Features
    - This release launches new updates to QuickSight KPI visuals - support for sparklines, new templated layout and new targets for conditional formatting rules.

# __2.20.144__ __2023-09-08__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fixed an issue in async client where the future would get stuck if there is a server error and the server fails to return response body that matches with the content length specified in the response header. See [#4354](https://github.com/aws/aws-sdk-java-v2/issues/4354)

## __AWS Single Sign-On Admin__
  - ### Features
    - Content updates to IAM Identity Center API for China Regions.

## __Amazon FSx__
  - ### Features
    - Amazon FSx documentation fixes

## __Amazon SageMaker Service__
  - ### Features
    - Autopilot APIs will now support holiday featurization for Timeseries models. The models will now hold holiday metadata and should be able to accommodate holiday effect during inference.

## __Amazon WorkSpaces__
  - ### Features
    - A new field "ErrorDetails" will be added to the output of "DescribeWorkspaceImages" API call. This field provides in-depth details about the error occurred during image import process. These details include the possible causes of the errors and troubleshooting information.

# __2.20.143__ __2023-09-07__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SecurityHub__
  - ### Features
    - Documentation updates for AWS Security Hub

## __AWS SimSpace Weaver__
  - ### Features
    - BucketName and ObjectKey are now required for the S3Location data type. BucketName is now required for the S3Destination data type.

## __Amazon NeptuneData__
  - ### Features
    - Minor changes to send unsigned requests to Neptune clusters

# __2.20.142__ __2023-09-06__
## __AWS Elemental MediaLive__
  - ### Features
    - Adds advanced Output Locking options for Epoch Locking: Custom Epoch and Jam Sync Time

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fix an issue where the multirelease classes were not being shaded or removed.

## __AWS WAFV2__
  - ### Features
    - The targeted protection level of the Bot Control managed rule group now provides optional, machine-learning analysis of traffic statistics to detect some bot-related activity. You can enable or disable the machine learning functionality through the API.

## __Amazon Appflow__
  - ### Features
    - Adding OAuth2.0 support for servicenow connector.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds 'outpost' location type to the DescribeInstanceTypeOfferings API, allowing customers that have been allowlisted for outpost to query their offerings in the API.

## __Elastic Load Balancing__
  - ### Features
    - This release enables default UDP connection termination and disabling unhealthy target connection termination for Network Load Balancers.

# __2.20.141__ __2023-09-05__
## __AWS Cloud9__
  - ### Features
    - Added support for Ubuntu 22.04 that was not picked up in a previous Trebuchet request. Doc-only update.

## __AWS Compute Optimizer__
  - ### Features
    - This release adds support to provide recommendations for G4dn and P3 instances that use NVIDIA GPUs.

## __AWS SDK for Java v2__
  - ### Features
    - Add support for RequestCompression trait to GZIP compress requests.
    - Updated endpoint and partition metadata.

## __AWSBillingConductor__
  - ### Features
    - This release adds support for line item filtering in for the custom line item resource.

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation only update for Amazon ECS.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Introducing Amazon EC2 C7gd, M7gd, and R7gd Instances with up to 3.8 TB of local NVMe-based SSD block-level storage. These instances are powered by AWS Graviton3 processors, delivering up to 25% better performance over Graviton2-based instances.

## __Amazon EventBridge__
  - ### Features
    - Improve Endpoint Ruleset test coverage.

## __Amazon Relational Database Service__
  - ### Features
    - Add support for feature integration with AWS Backup.

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker Neo now supports data input shape derivation for Pytorch 2.0 and XGBoost compilation job for cloud instance targets. You can skip DataInputConfig field during compilation job creation. You can also access derived information from model in DescribeCompilationJob response.

## __Amazon VPC Lattice__
  - ### Features
    - This release adds Lambda event structure version config support for LAMBDA target groups. It also adds newline support for auth policies.

# __2.20.140__ __2023-09-01__
## __AWS SDK for Java v2__
  - ### Features
    - Update Jackson to `2.15.2`.
    - Updated endpoint and partition metadata.

## __AWS SSO Identity Store__
  - ### Features
    - New Identity Store content for China Region launch

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - This release adds support for the Voice Analytics feature for customer-owned KVS streams as part of the Amazon Chime SDK call analytics.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect adds the ability to read, create, update, delete, and list view resources, and adds the ability to read, create, delete, and list view versions.

## __Amazon NeptuneData__
  - ### Features
    - Removed the descriptive text in the introduction.

# __2.20.139__ __2023-08-31__
## __AWS Health APIs and Notifications__
  - ### Features
    - Adds new API DescribeEntityAggregatesForOrganization that retrieves entity aggregates across your organization. Also adds support for resource status filtering in DescribeAffectedEntitiesForOrganization, resource status aggregates in the DescribeEntityAggregates response, and new resource statuses.

## __AWS Lambda__
  - ### Features
    - Use latest AWS Lambda Java 17 runtime version in SAM template of archetype
        - Contributed by: [@deki](https://github.com/deki)

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - This release adds support for feature Voice Enhancement for Call Recording as part of Amazon Chime SDK call analytics.

## __Amazon CloudHSM__
  - ### Features
    - Deprecating CloudHSM Classic API Service.

## __Amazon CloudWatch Events__
  - ### Features
    - Documentation updates for CloudWatch Events.

## __Amazon Connect Customer Profiles__
  - ### Features
    - Adds sensitive trait to various shapes in Customer Profiles API model.

## __Amazon Connect Participant Service__
  - ### Features
    - Amazon Connect Participant Service adds the ability to get a view resource using a view token, which is provided in a participant message, with the release of the DescribeView API.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support for an account-level setting that you can use to configure the number of days for AWS Fargate task retirement.

## __Amazon Interactive Video Service__
  - ### Features
    - Updated "type" description for CreateChannel, UpdateChannel, Channel, and ChannelSummary.

## __Amazon Managed Grafana__
  - ### Features
    - Marking SAML RoleValues attribute as sensitive and updating VpcConfiguration attributes to match documentation.

## __Amazon SageMaker Runtime__
  - ### Features
    - This release adds a new InvokeEndpointWithResponseStream API to support streaming of model responses.

## __AmazonConnectCampaignService__
  - ### Features
    - Amazon Connect outbound campaigns has launched agentless dialing mode which enables customers to make automated outbound calls without agent engagement. This release updates three of the campaign management API's to support the new agentless dialing mode and the new dialing capacity field.

## __Managed Streaming for Kafka Connect__
  - ### Features
    - Minor model changes for Kafka Connect as well as endpoint updates.

## __Payment Cryptography Data Plane__
  - ### Features
    - Make KeyCheckValue field optional when using asymmetric keys as Key Check Values typically only apply to symmetric keys

## __Contributors__
Special thanks to the following contributors to this release: 

[@deki](https://github.com/deki)
# __2.20.138__ __2023-08-30__
## __AWS App Runner__
  - ### Features
    - App Runner adds support for Bitbucket. You can now create App Runner connection that connects to your Bitbucket repositories and deploy App Runner service with the source code stored in a Bitbucket repository.

## __AWS Audit Manager__
  - ### Features
    - This release marks some assessment metadata as sensitive. We added a sensitive trait to the following attributes: assessmentName, emailAddress, scope, createdBy, lastUpdatedBy, and userName.

## __AWS Clean Rooms Service__
  - ### Features
    - This release decouples member abilities in a collaboration. With this change, the member who can run queries no longer needs to be the same as the member who can receive results.

## __AWS DataSync__
  - ### Features
    - AWS DataSync introduces Task Reports, a new feature that provides detailed reports of data transfer operations for each task execution.

## __AWS Network Firewall__
  - ### Features
    - Network Firewall increasing pagination token string length

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Appflow__
  - ### Features
    - Add SAP source connector parallel and pagination feature

## __Amazon Elastic Compute Cloud__
  - ### Features
    - The DryRun field in EC2 APIs is no longer hidden and has been exposed. To determine the DryRun status for an EC2 operation using the dryRun field, users are now required to catch the Ec2Exception and extract the dryRun status from the errorCode of AwsErrorDetails within the Ec2Exception.

## __Amazon NeptuneData__
  - ### Features
    - Allows customers to execute data plane actions like bulk loading graphs, issuing graph queries using Gremlin and openCypher directly from the SDK.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Canvas adds IdentityProviderOAuthSettings support for CanvasAppSettings

## __PcaConnectorAd__
  - ### Features
    - The Connector for AD allows you to use a fully-managed AWS Private CA as a drop-in replacement for your self-managed enterprise CAs without local agents or proxy servers. Enterprises that use AD to manage Windows environments can reduce their private certificate authority (CA) costs and complexity.

# __2.20.137__ __2023-08-29__
## __Amazon Cognito Identity Provider__
  - ### Features
    - Added API example requests and responses for several operations. Fixed the validation regex for user pools Identity Provider name.

## __Amazon FSx__
  - ### Features
    - Documentation updates for project quotas.

## __Amazon Omics__
  - ### Features
    - Add RetentionMode support for Runs.

## __Amazon Simple Email Service__
  - ### Features
    - Adds support for the new Export and Message Insights features: create, get, list and cancel export jobs; get message insights.

# __2.20.136__ __2023-08-28__
## __AWS Backup__
  - ### Features
    - Add support for customizing time zone for backup window in backup plan rules.

## __AWS Compute Optimizer__
  - ### Features
    - This release enables AWS Compute Optimizer to analyze and generate licensing optimization recommendations for sql server running on EC2 instances.

## __AWS Organizations__
  - ### Features
    - Documentation updates for permissions and links.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Security Lake__
  - ### Features
    - Remove incorrect regex enforcement on pagination tokens.

## __Amazon WorkSpaces Web__
  - ### Features
    - WorkSpaces Web now enables Admins to configure which cookies are synchronized from an end-user's local browser to the in-session browser. In conjunction with a browser extension, this feature enables enhanced Single-Sign On capability by reducing the number of times an end-user has to authenticate.

## __Service Quotas__
  - ### Features
    - Service Quotas now supports viewing the applied quota value and requesting a quota increase for a specific resource in an AWS account.

# __2.20.135__ __2023-08-25__
## __AWS CloudTrail__
  - ### Features
    - Add ThrottlingException with error code 429 to handle CloudTrail Delegated Admin request rate exceeded on organization resources.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudWatch__
  - ### Features
    - Doc-only update to get doc bug fixes into the SDK docs

## __Amazon Detective__
  - ### Features
    - Added protections to interacting with fields containing customer information.

# __2.20.134__ __2023-08-24__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release includes additional audio channel tags in Quicktime outputs, support for film grain synthesis for AV1 outputs, ability to create audio-only FLAC outputs, and ability to specify Amazon S3 destination storage class.

## __AWS Elemental MediaLive__
  - ### Features
    - MediaLive now supports passthrough of KLV data to a HLS output group with a TS container. MediaLive now supports setting an attenuation mode for AC3 audio when the coding mode is 3/2 LFE. MediaLive now supports specifying whether to include filler NAL units in RTMP output group settings.

## __AWS Glue__
  - ### Features
    - Added API attributes that help in the monitoring of sessions.

## __AWS MediaTailor__
  - ### Features
    - Adds new source location AUTODETECT_SIGV4 access type.

## __AWS S3 Control__
  - ### Features
    - Updates to endpoint ruleset tests to address Smithy validation issues and standardize the capitalization of DualStack.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 M7a instances, powered by 4th generation AMD EPYC processors, deliver up to 50% higher performance compared to M6a instances. Amazon EC2 Hpc7a instances, powered by 4th Gen AMD EPYC processors, deliver up to 2.5x better performance compared to Amazon EC2 Hpc6a instances.

## __Amazon QuickSight__
  - ### Features
    - Excel support in Snapshot Export APIs. Removed Required trait for some insight Computations. Namespace-shared Folders support. Global Filters support. Table pin Column support.

## __Amazon Relational Database Service__
  - ### Features
    - This release updates the supported versions for Percona XtraBackup in Aurora MySQL.

## __Amazon S3__
  - ### Features
    - Add support for presigned `DeleteObject` in `S3Presigner`.

## __Amazon Simple Storage Service__
  - ### Features
    - Updates to endpoint ruleset tests to address Smithy validation issues.

## __Amazon Verified Permissions__
  - ### Features
    - Documentation updates for Amazon Verified Permissions.

# __2.20.133__ __2023-08-23__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon API Gateway__
  - ### Features
    - This release adds RootResourceId to GetRestApi response.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Marking fields as sensitive on BundleTask and GetPasswordData

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds 1 new voice - Zayd (ar-AE)

# __2.20.132__ __2023-08-22__
## __AWS Cost Explorer Service__
  - ### Features
    - This release adds the LastUpdatedDate and LastUsedDate timestamps to help you manage your cost allocation tags.

## __AWS Global Accelerator__
  - ### Features
    - Global Accelerator now supports Client Ip Preservation for Network Load Balancer endpoints.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SDK for Java v2 - DynamoDb Enhanced__
  - ### Bugfixes
    - Changes the default behavior of the DynamoDb Enhanced atomic counter extension to automatically filter out any counter attributes in the item to be updated. This allows users to read and update items without DynamoDb collision errors.

## __Amazon Relational Database Service__
  - ### Features
    - Adding parameters to CreateCustomDbEngineVersion reserved for future use.

## __Amazon Verified Permissions__
  - ### Features
    - Documentation updates for Amazon Verified Permissions. Increases max results per page for ListPolicyStores, ListPolicies, and ListPolicyTemplates APIs from 20 to 50.

# __2.20.131__ __2023-08-21__
## __AWS Cloud9__
  - ### Features
    - Doc only update to add Ubuntu 22.04 as an Image ID option for Cloud9

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - The DeleteKeyPair API has been updated to return the keyPairId when an existing key pair is deleted.

## __Amazon Relational Database Service__
  - ### Features
    - Adding support for RDS Aurora Global Database Unplanned Failover

## __Amazon Route 53 Domains__
  - ### Features
    - Fixed typos in description fields

## __FinSpace User Environment Management service__
  - ### Features
    - Allow customers to manage outbound traffic from their Kx Environment when attaching a transit gateway by providing network acl entries. Allow the customer to choose how they want to update the databases on a cluster allowing updates to possibly be faster than usual.

# __2.20.130__ __2023-08-18__
## __AWS CodeCommit__
  - ### Features
    - Add new ListFileCommitHistory operation to retrieve commits which introduced changes to a specific file.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SecurityHub__
  - ### Features
    - Added Inspector Lambda code Vulnerability section to ASFF, including GeneratorDetails, EpssScore, ExploitAvailable, and CodeVulnerabilities.

# __2.20.129__ __2023-08-17__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Sends final checksum chunk and trailer when only onComplete() is called by upstream (empty content)

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds support for SubnetConfigurations to allow users to select their own IPv4 and IPv6 addresses for Interface VPC endpoints

## __Amazon GameLift__
  - ### Features
    - Amazon GameLift updates its instance types support.

# __2.20.128__ __2023-08-16__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Add support for the `SERVICE_ENDPOINT` metric. This metric represents the endpoint (scheme and authority) that the request was sent to.

## __Amazon CloudWatch__
  - ### Features
    - Doc-only update to incorporate several doc bug fixes

## __Amazon Lex Model Building V2__
  - ### Features
    - This release updates the Custom Vocabulary Weight field to support a value of 0.

# __2.20.127__ __2023-08-15__
## __AWS Glue__
  - ### Features
    - AWS Glue Crawlers can now accept SerDe overrides from a custom csv classifier. The two SerDe options are LazySimpleSerDe and OpenCSVSerDe. In case, the user wants crawler to do the selection, "None" can be selected for this purpose.

## __AWS Performance Insights__
  - ### Features
    - AWS Performance Insights for Amazon RDS is launching Performance Analysis On Demand, a new feature that allows you to analyze database performance metrics and find out the performance issues. You can now use SDK to create, list, get, delete, and manage tags of performance analysis reports.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Meetings__
  - ### Features
    - Updated API documentation to include additional exceptions.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Documentation updates for Elastic Compute Cloud (EC2).

## __Amazon Route 53 Domains__
  - ### Features
    - Provide explanation if CheckDomainTransferability return false. Provide requestId if a request is already submitted. Add sensitive protection for customer information

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker Inference Recommender now provides SupportedResponseMIMETypes from DescribeInferenceRecommendationsJob response

# __2.20.126__ __2023-08-14__
## __AWS Elemental MediaPackage__
  - ### Features
    - Fix SDK logging of certain fields.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Transfer Family__
  - ### Features
    - Documentation updates for AWS Transfer Family

## __Amazon Omics__
  - ### Features
    - This release provides support for annotation store versioning and cross account sharing for Omics Analytics

# __2.20.125__ __2023-08-11__
## __AWS Config__
  - ### Features
    - Updated ResourceType enum with new resource types onboarded by AWS Config in July 2023.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 P5 instances, powered by the latest NVIDIA H100 Tensor Core GPUs, deliver the highest performance in EC2 for deep learning (DL) and HPC applications. M7i-flex and M7i instances are next-generation general purpose instances powered by custom 4th Generation Intel Xeon Scalable processors.

## __Amazon QuickSight__
  - ### Features
    - New Authentication method for Account subscription - IAM Identity Center. Hierarchy layout support, default column width support and related style properties for pivot table visuals. Non-additive topic field aggregations for Topic API

## __Amazon Simple Email Service__
  - ### Features
    - Doc only updates to include: 1) Clarified which part of an email address where it's okay to have Punycode when it contains non-ASCII characters for the SendRawEmail action and other actions where this is applicable. 2) Updated S3Action description with new MB max bucket size from 30 to 40.

## __Amazon Simple Workflow Service__
  - ### Features
    - This release adds new API parameters to override workflow task list for workflow executions.

## __AmplifyBackend__
  - ### Features
    - Adds sensitive trait to required input shapes.

# __2.20.124__ __2023-08-10__
## __AWS CloudTrail__
  - ### Features
    - Documentation updates for CloudTrail.

## __AWS DynamoDB Enhanced Client__
  - ### Bugfixes
    - Fix for Issue [#4156](https://github.com/aws/aws-sdk-java-v2/issues/4156) : Single quotes in toJson conversions for EnhancedDocuments are no longer being escaped.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fixed bug where limit was not copied over when cloning ByteBuffer using immutableCopyOf()

## __AWS Secrets Manager__
  - ### Features
    - Add additional InvalidRequestException to list of possible exceptions for ListSecret.

## __AWS Transfer Family__
  - ### Features
    - Documentation updates for AW Transfer Family

## __Amazon Connect Service__
  - ### Features
    - This release adds APIs to provision agents that are global / available in multiple AWS regions and distribute them across these regions by percentage.

## __Amazon Omics__
  - ### Features
    - This release adds instanceType to GetRunTask & ListRunTasks responses.

## __Elastic Load Balancing__
  - ### Features
    - This release enables configuring security groups for Network Load Balancers

# __2.20.123__ __2023-08-09__
## __AWS Global Accelerator__
  - ### Features
    - Documentation update for dualstack EC2 endpoint support

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Voice__
  - ### Features
    - Updating CreatePhoneNumberOrder, UpdatePhoneNumber and BatchUpdatePhoneNumbers APIs, adding phone number name

## __Amazon FSx__
  - ### Features
    - For FSx for Lustre, add new data repository task type, RELEASE_DATA_FROM_FILESYSTEM, to release files that have been archived to S3. For FSx for Windows, enable support for configuring and updating SSD IOPS, and for updating storage type. For FSx for OpenZFS, add new deployment type, MULTI_AZ_1.

## __Amazon GuardDuty__
  - ### Features
    - Added autoEnable ALL to UpdateOrganizationConfiguration and DescribeOrganizationConfiguration APIs.

## __Amazon S3__
  - ### Features
    - Allow users to configure upload threshold size for AWS CRT-based S3 client via `S3CrtAsyncClientBuilder#thresholdInBytes`.

## __Amazon SageMaker Service__
  - ### Features
    - This release adds support for cross account access for SageMaker Model Cards through AWS RAM.

# __2.20.122__ __2023-08-08__
## __AWS Backup__
  - ### Features
    - This release introduces a new logically air-gapped vault (Preview) in AWS Backup that stores immutable backup copies, which are locked by default and isolated with encryption using AWS owned keys. Logically air-gapped vault (Preview) allows secure recovery of application data across accounts.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Service Catalog__
  - ### Features
    - Introduce support for HashiCorp Terraform Cloud in Service Catalog by addying TERRAFORM_CLOUD product type in CreateProduct and CreateProvisioningArtifact API.

## __Amazon ElastiCache__
  - ### Features
    - Added support for cluster mode in online migration and test migration API

# __2.20.121__ __2023-08-07__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Detective__
  - ### Features
    - Updated the email validation regex to be in line with the TLD name specifications.

## __Amazon Interactive Video Service RealTime__
  - ### Features
    - Add QUOTA_EXCEEDED and PUBLISHER_NOT_FOUND to EventErrorCode for stage health events.

## __Amazon Kinesis Video Streams__
  - ### Features
    - This release enables minimum of Images SamplingInterval to be as low as 200 milliseconds in Kinesis Video Stream Image feature.

## __Amazon Kinesis Video Streams Archived Media__
  - ### Features
    - This release enables minimum of Images SamplingInterval to be as low as 200 milliseconds in Kinesis Video Stream Image feature.

## __Amazon Rekognition__
  - ### Features
    - This release adds code snippets for Amazon Rekognition Custom Labels.

# __2.20.120__ __2023-08-04__
## __AWS Certificate Manager Private Certificate Authority__
  - ### Features
    - Documentation correction for AWS Private CA

## __AWS DataSync__
  - ### Features
    - Display cloud storage used capacity at a cluster level.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - Added a new API UpdateRoutingProfileAgentAvailabilityTimer to update agent availability timer of a routing profile.

## __Amazon EC2 Container Service__
  - ### Features
    - This is a documentation update to address various tickets.

## __Amazon SageMaker Service__
  - ### Features
    - Including DataCaptureConfig key in the Amazon Sagemaker Search's transform job object

# __2.20.119__ __2023-08-03__
## __AWS Cloud9__
  - ### Features
    - Updated the deprecation date for Amazon Linux. Doc only update.

## __AWS Database Migration Service__
  - ### Features
    - The release makes public API for DMS Schema Conversion feature.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds new parameter isPrimaryIPv6 to allow assigning an IPv6 address as a primary IPv6 address to a network interface which cannot be changed to give equivalent functionality available for network interfaces with primary IPv4 address.

## __Amazon S3__
  - ### Bugfixes
    - Add `Expect: 100-continue` header for `UploadPartRequest` so that a upload part request can fail faster if there is a server error.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker now supports running training jobs on p5.48xlarge instance types.

## __Auto Scaling__
  - ### Features
    - Documentation changes related to Amazon EC2 Auto Scaling APIs.

# __2.20.118__ __2023-08-02__
## __AWS Budgets__
  - ### Features
    - As part of CAE tagging integration we need to update our budget names regex filter to prevent customers from using "/action/" in their budget names.

## __AWS Glue__
  - ### Features
    - This release includes additional Glue Streaming KAKFA SASL property types.

## __AWS Resilience Hub__
  - ### Features
    - Drift Detection capability added when applications policy has moved from a meet to breach state. Customers will be able to exclude operational recommendations and receive credit in their resilience score. Customers can now add ARH permissions to an existing or new role.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Cognito Identity Provider__
  - ### Features
    - New feature that logs Cognito user pool error messages to CloudWatch logs.

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker Inference Recommender introduces a new API GetScalingConfigurationRecommendation to recommend auto scaling policies based on completed Inference Recommender jobs.

# __2.20.117__ __2023-08-01__
## __AWS Batch__
  - ### Features
    - This release adds support for price capacity optimized allocation strategy for Spot Instances.

## __AWS Database Migration Service__
  - ### Features
    - Adding new API describe-engine-versions which provides information about the lifecycle of a replication instance's version.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental Link devices now report their Availability Zone. Link devices now support the ability to change their Availability Zone.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - This release adds a new feature for Amazon CloudWatch Internet Monitor that enables customers to set custom thresholds, for performance and availability drops, for impact limited to a single city-network to trigger creation of a health event.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds new French Belgian voice - Isabelle. Isabelle is available as Neural voice only.

## __Amazon Relational Database Service__
  - ### Features
    - Added support for deleted clusters PiTR.

## __Amazon SageMaker Service__
  - ### Features
    - Add Stairs TrafficPattern and FlatInvocations to RecommendationJobStoppingConditions

# __2.20.116__ __2023-07-31__
## __AWS Amplify UI Builder__
  - ### Features
    - Amplify Studio releases GraphQL support for codegen job action.

## __AWS Clean Rooms Service__
  - ### Features
    - This release introduces custom SQL queries - an expanded set of SQL you can run. This release adds analysis templates, a new resource for storing pre-defined custom SQL queries ahead of time. This release also adds the Custom analysis rule, which lets you approve analysis templates for querying.

## __AWS CodeStar connections__
  - ### Features
    - New integration with the Gitlab provider type.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon EventBridge Scheduler__
  - ### Features
    - This release introduces automatic deletion of schedules in EventBridge Scheduler. If configured, EventBridge Scheduler automatically deletes a schedule after the schedule has completed its last invocation.

## __Amazon Lookout for Equipment__
  - ### Features
    - This release includes new import resource, model versioning and resource policy features.

## __Amazon Omics__
  - ### Features
    - Add CreationType filter for ListReadSets

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for Aurora MySQL local write forwarding, which allows for forwarding of write operations from reader DB instances to the writer DB instance.

## __Amazon Route 53__
  - ### Features
    - Amazon Route 53 now supports the Israel (Tel Aviv) Region (il-central-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.

## __Auto Scaling__
  - ### Features
    - You can now configure an instance refresh to set its status to 'failed' when it detects that a specified CloudWatch alarm has gone into the ALARM state. You can also choose to roll back the instance refresh automatically when the alarm threshold is met.

## __Elastic Disaster Recovery Service__
  - ### Features
    - Add support for in-aws right sizing

## __Inspector2__
  - ### Features
    - This release adds 1 new API: BatchGetFindingDetails to retrieve enhanced vulnerability intelligence details for findings.

# __2.20.115__ __2023-07-28__
## __AWS CloudFormation__
  - ### Features
    - This SDK release is for the feature launch of AWS CloudFormation RetainExceptOnCreate. It adds a new parameter retainExceptOnCreate in the following APIs: CreateStack, UpdateStack, RollbackStack, ExecuteChangeSet.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudFront__
  - ### Features
    - Add a new JavaScript runtime version for CloudFront Functions.

## __Amazon CloudWatch Application Insights__
  - ### Features
    - This release enable customer to add/remove/update more than one workload for a component

## __Amazon Connect Service__
  - ### Features
    - This release adds support for new number types.

## __Amazon Pinpoint__
  - ### Features
    - Added support for sending push notifications using the FCM v1 API with json credentials. Amazon Pinpoint customers can now deliver messages to Android devices using both FCM v1 API and the legacy FCM/GCM API

## __Managed Streaming for Kafka__
  - ### Features
    - Amazon MSK has introduced new versions of ListClusterOperations and DescribeClusterOperation APIs. These v2 APIs provide information and insights into the ongoing operations of both MSK Provisioned and MSK Serverless clusters.

# __2.20.114__ __2023-07-27__
## __Amazon Simple Queue Service__
  - ### Features
    - Documentation changes related to SQS APIs.

# __2.20.113__ __2023-07-27__
## __Amazon Elastic Block Store__
  - ### Features
    - SDK and documentation updates for Amazon Elastic Block Store API

## __Amazon Elastic Compute Cloud__
  - ### Features
    - SDK and documentation updates for Amazon Elastic Block Store APIs

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Add multiple customer error code to handle customer caused failure when managing EKS node groups

## __Amazon SageMaker Service__
  - ### Features
    - Expose ProfilerConfig attribute in SageMaker Search API response.

## __Auto Scaling__
  - ### Features
    - This release updates validation for instance types used in the AllowedInstanceTypes and ExcludedInstanceTypes parameters of the InstanceRequirements property of a MixedInstancesPolicy.

# __2.20.112__ __2023-07-26__
## __AWS Cloud Control API__
  - ### Features
    - Updates the documentation for CreateResource.

## __AWS Elemental MediaConvert__
  - ### Features
    - This release includes general updates to user documentation.

## __AWS EntityResolution__
  - ### Features
    - AWS Entity Resolution can effectively match a source record from a customer relationship management (CRM) system with a source record from a marketing system containing campaign information.

## __AWS Glue__
  - ### Features
    - Release Glue Studio Snowflake Connector Node for SDK/CLI

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon HealthLake__
  - ### Features
    - Updating the HealthLake service documentation.

## __Amazon Managed Blockchain Query__
  - ### Features
    - Amazon Managed Blockchain (AMB) Query provides serverless access to standardized, multi-blockchain datasets with developer-friendly APIs.

## __Amazon Omics__
  - ### Features
    - The service is renaming as a part of AWS Health.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds 1 new voice - Lisa (nl-BE)

## __Amazon Route 53__
  - ### Features
    - Update that corrects the documents for received feedback.

## __OpenSearch Service Serverless__
  - ### Features
    - This release adds new collection type VectorSearch.

# __2.20.111__ __2023-07-25__
## __AWS DataSync__
  - ### Features
    - AWS DataSync now supports Microsoft Azure Blob Storage locations.

## __AWS IAM Policy Builder__
  - ### Bugfixes
    - Fixed bug where actions were written instead of resources.

## __AWS Lambda__
  - ### Features
    - Add Python 3.11 (python3.11) support to AWS Lambda

## __AWS Security Token Service__
  - ### Features
    - API updates for the AWS Security Token Service

## __AWS SecurityHub__
  - ### Features
    - Add support for CONTAINS and NOT_CONTAINS comparison operators for Automation Rules string filters and map filters

## __AWS Transfer Family__
  - ### Features
    - This release adds support for SFTP Connectors.

## __AWSBillingConductor__
  - ### Features
    - Added support for Auto-Assocate Billing Groups for CreateBillingGroup, UpdateBillingGroup, and ListBillingGroups.

## __Amazon Connect Customer Profiles__
  - ### Features
    - Amazon Connect Customer Profiles now supports rule-based resolution to match and merge similar profiles into unified profiles, helping companies deliver faster and more personalized customer service by providing access to relevant customer information for agents and automated experiences.

## __Amazon Connect Wisdom Service__
  - ### Features
    - This release added two new data types: AssistantIntegrationConfiguration, and SessionIntegrationConfiguration to support Wisdom integration with Amazon Connect Chat

## __Amazon DynamoDB__
  - ### Features
    - Documentation updates for DynamoDB

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds an instance's peak and baseline network bandwidth as well as the memory sizes of an instance's inference accelerators to DescribeInstanceTypes.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for monitoring storage optimization progress on the DescribeDBInstances API.

## __Amazon SageMaker Service__
  - ### Features
    - Mark ContentColumn and TargetLabelColumn as required Targets in TextClassificationJobConfig in CreateAutoMLJobV2API

## __EMR Serverless__
  - ### Features
    - This release adds support for publishing application logs to CloudWatch.

# __2.20.110__ __2023-07-24__
## __AWS CloudFormation__
  - ### Features
    - This release supports filtering by DRIFT_STATUS for existing API ListStackInstances and adds support for a new API ListStackInstanceResourceDrifts. Customers can now view resource drift information from their StackSet management accounts.

## __AWS Cost Explorer Service__
  - ### Features
    - This release introduces the new API 'GetSavingsPlanPurchaseRecommendationDetails', which retrieves the details for a Savings Plan recommendation. It also updates the existing API 'GetSavingsPlansPurchaseRecommendation' to include the recommendation detail ID.

## __AWS Glue__
  - ### Features
    - Added support for Data Preparation Recipe node in Glue Studio jobs

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - AWS Media Pipeline compositing enhancement and Media Insights Pipeline auto language identification.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add "disabled" enum value to SpotInstanceState.

## __Amazon QuickSight__
  - ### Features
    - This release launches new Snapshot APIs for CSV and PDF exports, adds support for info icon for filters and parameters in Exploration APIs, adds modeled exception to the DeleteAccountCustomization API, and introduces AttributeAggregationFunction's ability to add UNIQUE_VALUE aggregation in tooltips.

## __AmazonApiGatewayV2__
  - ### Features
    - Documentation updates for Amazon API Gateway.

# __2.20.109__ __2023-07-21__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release includes improvements to Preserve 444 handling, compatibility of HEVC sources without frame rates, and general improvements to MP4 outputs.

## __AWS Glue__
  - ### Features
    - This release adds support for AWS Glue Crawler with Apache Hudi Tables, allowing Crawlers to discover Hudi Tables in S3 and register them in Glue Data Catalog for query engines to query against.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Relational Database Service__
  - ### Features
    - Adds support for the DBSystemID parameter of CreateDBInstance to RDS Custom for Oracle.

## __Amazon WorkSpaces__
  - ### Features
    - Fixed VolumeEncryptionKey descriptions

## __S3 Transfer Manager__
  - ### Bugfixes
    - Fix a bug where the SSE-C parameters are not copied to the CompleteMultipartUpload request when transforming to a multipart copy.

# __2.20.108__ __2023-07-20__
## __Amazon CodeCatalyst__
  - ### Features
    - This release adds support for updating and deleting spaces and projects in Amazon CodeCatalyst. It also adds support for creating, getting, and deleting source repositories in CodeCatalyst projects.

## __Amazon Connect Cases__
  - ### Features
    - This release adds the ability to assign a case to a queue or user.

## __Amazon Lex Model Building V2__
  - ### Features
    - This release updates type for Channel field in SessionSpecification and UtteranceSpecification

## __Amazon Route 53 Resolver__
  - ### Features
    - This release adds support for Route 53 On Outposts, a new feature that allows customers to run Route 53 Resolver and Resolver endpoints locally on their Outposts.

## __Amazon SageMaker Feature Store Runtime__
  - ### Features
    - Cross account support for SageMaker Feature Store

## __Amazon SageMaker Service__
  - ### Features
    - Cross account support for SageMaker Feature Store

## __Amazon Security Lake__
  - ### Features
    - Adding support for Tags on Create and Resource Tagging API.

## __Amazon Simple Storage Service__
  - ### Features
    - Improve performance of S3 clients by simplifying and optimizing endpoint resolution.

## __Amazon Transcribe Service__
  - ### Features
    - Added API argument --toxicity-detection to startTranscriptionJob API, which allows users to view toxicity scores of submitted audio.

# __2.20.107__ __2023-07-19__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Savings Plans__
  - ### Features
    - Savings Plans endpoints update

## __Amazon S3__
  - ### Bugfixes
    - Handle Temporary redirect error 307 when client configured in us-east-1 accesses cross region.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fixed the issue where the position of the ByteBuffer from the request is not honored in NettyNioAsyncHttpClient.

# __2.20.106__ __2023-07-19__
## __AWS CloudFormation__
  - ### Features
    - SDK and documentation updates for GetTemplateSummary API (unrecognized resources)

## __AWS Health Imaging__
  - ### Features
    - General Availability (GA) release of AWS Health Imaging, enabling customers to store, transform, and analyze medical imaging data at petabyte-scale.

## __AWS Resource Access Manager__
  - ### Features
    - This release adds support for securely sharing with AWS service principals.

## __AWS SDK for Java v2__
  - ### Features
    - Allowing configuring the prefetchTime and staleTime on WebIdentityTokenFileCredentialsProvider

## __AWS Systems Manager for SAP__
  - ### Features
    - Added support for SAP Hana High Availability discovery (primary and secondary nodes) and Backint agent installation with SSM for SAP.

## __AWS WAFV2__
  - ### Features
    - Added the URI path to the custom aggregation keys that you can specify for a rate-based rule.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 documentation updates.

## __Amazon Managed Grafana__
  - ### Features
    - Amazon Managed Grafana now supports grafanaVersion update for existing workspaces with UpdateWorkspaceConfiguration API. DescribeWorkspaceConfiguration API additionally returns grafanaVersion. A new ListVersions API lists available versions or, if given a workspaceId, the versions it can upgrade to.

# __2.20.105__ __2023-07-18__
## __AWS SDK for Java v2__
  - ### Features
    - Added support for IamPolicy in new module software.amazon.awssdk:iam-policy-builder, a class to simplify the use of AWS policies.
    - Updated endpoint and partition metadata.

## __AWSMainframeModernization__
  - ### Features
    - Allows UpdateEnvironment to update the environment to 0 host capacity. New GetSignedBluinsightsUrl API

## __Amazon CodeGuru Security__
  - ### Features
    - Documentation updates for CodeGuru Security.

## __Amazon Connect Service__
  - ### Features
    - GetMetricDataV2 API: Update to include Contact Lens Conversational Analytics Metrics

## __Amazon Elasticsearch Service__
  - ### Features
    - Regex Validation on the ElasticSearch Engine Version attribute

## __Amazon Import/Export Snowball__
  - ### Features
    - Adds support for RACK_5U_C. This is the first AWS Snow Family device designed to meet U.S. Military Ruggedization Standards (MIL-STD-810H) with 208 vCPU device in a portable, compact 5U, half-rack width form-factor.

## __Amazon Lex Model Building V2__
  - ### Features
    - This release adds support for Lex Developers to view analytics for their bots.

## __Amazon Translate__
  - ### Features
    - Added DOCX word document support to TranslateDocument API

# __2.20.104__ __2023-07-17__
## __AWS Glue__
  - ### Features
    - Adding new supported permission type flags to get-unfiltered endpoints that callers may pass to indicate support for enforcing Lake Formation fine-grained access control on nested column attributes.

## __AWS Lake Formation__
  - ### Features
    - Adds supports for ReadOnlyAdmins and AllowFullTableExternalDataAccess. Adds NESTED_PERMISSION and NESTED_CELL_PERMISSION to SUPPORTED_PERMISSION_TYPES enum. Adds CREATE_LF_TAG on catalog resource and ALTER, DROP, and GRANT_WITH_LF_TAG_EXPRESSION on LF Tag resource.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - Added major version upgrade option in ModifyDBCluster API

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add Nitro TPM support on DescribeInstanceTypes

## __Amazon Interactive Video Service__
  - ### Features
    - This release provides the flexibility to configure what renditions or thumbnail qualities to record when creating recording configuration.

## __CodeArtifact__
  - ### Features
    - Doc only update for AWS CodeArtifact

# __2.20.103__ __2023-07-13__
## __AWS DataSync__
  - ### Features
    - Added LunCount to the response object of DescribeStorageSystemResourcesResponse, LunCount represents the number of LUNs on a storage system resource.

## __AWS Database Migration Service__
  - ### Features
    - Enhanced PostgreSQL target endpoint settings for providing Babelfish support.

## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for AWS Identity and Access Management (IAM).

## __AWS MediaTailor__
  - ### Features
    - Adds categories to MediaTailor channel assembly alerts

## __AWS Proton__
  - ### Features
    - This release adds support for deployment history for Proton provisioned resources

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Secrets Manager__
  - ### Features
    - Documentation updates for Secrets Manager

## __Amazon Cognito Identity Provider__
  - ### Features
    - API model updated in Amazon Cognito

## __Amazon Connect Service__
  - ### Features
    - Add support for deleting Queues and Routing Profiles.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for the C7gn and Hpc7g instances. C7gn instances are powered by AWS Graviton3 processors and the fifth-generation AWS Nitro Cards. Hpc7g instances are powered by AWS Graviton 3E processors and provide up to 200 Gbps network bandwidth.

## __Amazon FSx__
  - ### Features
    - Amazon FSx for NetApp ONTAP now supports SnapLock, an ONTAP feature that enables you to protect your files in a volume by transitioning them to a write once, read many (WORM) state.

## __Amazon Personalize__
  - ### Features
    - This release provides ability to customers to change schema associated with their datasets in Amazon Personalize

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Canvas adds WorkspeceSettings support for CanvasAppSettings

## __Amazon Simple Storage Service__
  - ### Features
    - S3 Inventory now supports Object Access Control List and Object Owner as available object metadata fields in inventory reports.

# __2.20.102__ __2023-07-10__
## __AWS SDK for Java v2__
  - ### Features
    - Enable zero-copy ByteBuffer publishing in AsyncRequestBody via "unsafe" constructors
        - Contributed by: [@StephenFlavin](https://github.com/StephenFlavin)

## __Amazon Cognito Identity Provider__
  - ### Features
    - API model updated in Amazon Cognito

## __Contributors__
Special thanks to the following contributors to this release: 

[@StephenFlavin](https://github.com/StephenFlavin)
# __2.20.101__ __2023-07-07__
## __AWS Database Migration Service__
  - ### Features
    - Releasing DMS Serverless. Adding support for PostgreSQL 15.x as source and target endpoint. Adding support for DocDB Elastic Clusters with sharded collections, PostgreSQL datatype mapping customization and disabling hostname validation of the certificate authority in Kafka endpoint settings

## __AWS Elemental MediaLive__
  - ### Features
    - This release enables the use of Thumbnails in AWS Elemental MediaLive.

## __AWS Glue__
  - ### Features
    - This release enables customers to create new Apache Iceberg tables and associated metadata in Amazon S3 by using native AWS Glue CreateTable operation.

## __AWS MediaTailor__
  - ### Features
    - The AWS Elemental MediaTailor SDK for Channel Assembly has added support for EXT-X-CUE-OUT and EXT-X-CUE-IN tags to specify ad breaks in HLS outputs, including support for EXT-OATCLS, EXT-X-ASSET, and EXT-X-CUE-OUT-CONT accessory tags.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudWatch Logs__
  - ### Features
    - Add CMK encryption support for CloudWatch Logs Insights query result data

# __2.20.100__ __2023-07-06__
## __AWS Outposts__
  - ### Features
    - Added paginator support to several APIs. Added the ISOLATED enum value to AssetState.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Single Sign-on__
  - ### Bugfixes
    - Fixed issue with SsoAccessTokenProvider prematurely throwing ExpiredTokenException.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add Nitro Enclaves support on DescribeInstanceTypes

## __Amazon Location Service__
  - ### Features
    - This release adds support for authenticating with Amazon Location Service's Places & Routes APIs with an API Key. Also, with this release developers can publish tracked device position updates to Amazon EventBridge.

## __Amazon QuickSight__
  - ### Features
    - This release includes below three changes: small multiples axes improvement, field based coloring, removed required trait from Aggregation function for TopBottomFilter.

## __Amazon Relational Database Service__
  - ### Features
    - Updates Amazon RDS documentation for creating DB instances and creating Aurora global clusters.

# __2.20.99__ __2023-07-05__
## __AWS Comprehend Medical__
  - ### Features
    - Update to Amazon Comprehend Medical documentation.

## __AWS Key Management Service__
  - ### Features
    - Added Dry Run Feature to cryptographic and cross-account mutating KMS APIs (14 in all). This feature allows users to test their permissions and parameters before making the actual API call.

## __AWS SDK for Java v2__
  - ### Features
    - Cross region bucket access for S3 Client. This feature will allow users to access buckets of different region using a single cross region configured client.

## __AWS SecurityHub__
  - ### Features
    - Documentation updates for AWS Security Hub

## __Amazon Connect Service__
  - ### Features
    - GetMetricDataV2 API: Channels filters do not count towards overall limitation of 100 filter values.

## __Application Migration Service__
  - ### Features
    - This release introduces the Global view feature and new Replication state APIs.

# __2.20.98__ __2023-07-03__
## __AWS Batch__
  - ### Features
    - This feature allows customers to use AWS Batch with Linux with ARM64 CPU Architecture and X86_64 CPU Architecture with Windows OS on Fargate Platform.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker Inference Recommender now accepts new fields SupportedEndpointType and ServerlessConfiguration to support serverless endpoints.

# __2.20.97__ __2023-06-30__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release includes improved color handling of overlays and general updates to user documentation.

## __AWS Transfer Family__
  - ### Features
    - Add outbound Basic authentication support to AS2 connectors

## __Amazon EC2 Container Service__
  - ### Features
    - Added new field "credentialspecs" to the ecs task definition to support gMSA of windows/linux in both domainless and domain-joined mode

## __Amazon Interactive Video Service__
  - ### Features
    - Corrects the HTTP response code in the generated docs for PutMetadata and DeleteRecordingConfiguration APIs.

## __Amazon Prometheus Service__
  - ### Features
    - AWS SDK service model generation tool version upgrade.

## __Amazon SageMaker Service__
  - ### Features
    - This release adds support for rolling deployment in SageMaker Inference.

## __Amazon Verified Permissions__
  - ### Features
    - This release corrects several broken links in the documentation.

# __2.20.96__ __2023-06-29__
## __AWS Clean Rooms Service__
  - ### Features
    - This release adds support for the OR operator in RSQL join match conditions and the ability to control which operators (AND, OR) are allowed in a join match condition.

## __AWS Glue__
  - ### Features
    - This release adds support for AWS Glue Crawler with Iceberg Tables, allowing Crawlers to discover Iceberg Tables in S3 and register them in Glue Data Catalog for query engines to query against.

## __Amazon AppStream__
  - ### Features
    - This release introduces app block builder, allowing customers to provision a resource to package applications into an app block

## __Amazon Chime__
  - ### Features
    - The Amazon Chime SDK APIs in the Chime namespace are no longer supported. Customers should use APIs in the dedicated Amazon Chime SDK namespaces: ChimeSDKIdentity, ChimeSDKMediaPipelines, ChimeSDKMeetings, ChimeSDKMessaging, and ChimeSDKVoice.

## __Amazon DynamoDB__
  - ### Features
    - This release adds ReturnValuesOnConditionCheckFailure parameter to PutItem, UpdateItem, DeleteItem, ExecuteStatement, BatchExecuteStatement and ExecuteTransaction APIs. When set to ALL_OLD, API returns a copy of the item as it was when a conditional write failed

## __Amazon GameLift__
  - ### Features
    - Amazon GameLift now supports game builds that use the Amazon Linux 2023 (AL2023) operating system.

## __Amazon SageMaker Service__
  - ### Features
    - Adding support for timeseries forecasting in the CreateAutoMLJobV2 API.

# __2.20.95__ __2023-06-28__
## __AWS Lambda__
  - ### Features
    - Surface ResourceConflictException in DeleteEventSourceMapping

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - This release adds a new feature for Amazon CloudWatch Internet Monitor that enables customers to set custom thresholds, for performance and availability drops, for triggering when to create a health event.

## __Amazon Kinesis Analytics__
  - ### Features
    - Support for new runtime environment in Kinesis Data Analytics Studio: Zeppelin-0.10, Apache Flink-1.15

## __Amazon Omics__
  - ### Features
    - Add Common Workflow Language (CWL) as a supported language for Omics workflows

## __Amazon Relational Database Service__
  - ### Features
    - Amazon Relational Database Service (RDS) now supports joining a RDS for SQL Server instance to a self-managed Active Directory.

## __Amazon SageMaker Service__
  - ### Features
    - This release adds support for Model Cards Model Registry integration.

## __Amazon Simple Storage Service__
  - ### Features
    - The S3 LISTObjects, ListObjectsV2 and ListObjectVersions API now supports a new optional header x-amz-optional-object-attributes. If header contains RestoreStatus as the value, then S3 will include Glacier restore status i.e. isRestoreInProgress and RestoreExpiryDate in List response.

# __2.20.94__ __2023-06-27__
## __AWS Private 5G__
  - ### Features
    - This release allows Private5G customers to choose different commitment plans (60-days, 1-year, 3-years) when placing new orders, enables automatic renewal option for 1-year and 3-years commitments. It also allows customers to update the commitment plan of an existing radio unit.

## __Amazon Appflow__
  - ### Features
    - This release adds support to bypass SSO with the SAPOData connector when connecting to an SAP instance.

## __Amazon Interactive Video Service__
  - ### Features
    - IVS customers can now revoke the viewer session associated with an auth token, to prevent and stop playback using that token.

## __Amazon Kinesis Video Streams__
  - ### Features
    - General Availability (GA) release of Kinesis Video Streams at Edge, enabling customers to provide a configuration for the Kinesis Video Streams EdgeAgent running on an on-premise IoT device. Customers can now locally record from cameras and stream videos to the cloud on a configured schedule.

## __Amazon Macie 2__
  - ### Features
    - This release adds support for configuring new classification jobs to use the set of managed data identifiers that we recommend for jobs. For the managed data identifier selection type (managedDataIdentifierSelector), specify RECOMMENDED.

## __Amazon SageMaker Feature Store Runtime__
  - ### Features
    - Introducing TTL for online store records for feature groups.

## __Amazon SageMaker Service__
  - ### Features
    - Introducing TTL for online store records in feature groups.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Systems Manager doc-only update for June 2023.

## __Amazon Verified Permissions__
  - ### Features
    - This update fixes several broken links to the Cedar documentation.

## __AppFabric__
  - ### Features
    - Initial release of AWS AppFabric for connecting SaaS applications for better productivity and security.

## __DynamoDB Enhanced Client__
  - ### Features
    - Added support for StreamSpecification in the CreateTableEnhancedRequest, allowing configuration of table stream specification using DynamoDB Enhanced Client.
        - Contributed by: [@acouvreur](https://github.com/acouvreur)

## __EMR Serverless__
  - ### Features
    - This release adds support to update the release label of an EMR Serverless application to upgrade it to a different version of Amazon EMR via UpdateApplication API.

## __Contributors__
Special thanks to the following contributors to this release: 

[@acouvreur](https://github.com/acouvreur)
# __2.20.93__ __2023-06-26__
## __AWS Glue__
  - ### Features
    - Timestamp Starting Position For Kinesis and Kafka Data Sources in a Glue Streaming Job

## __AWS Identity and Access Management__
  - ### Features
    - Support for a new API "GetMFADevice" to present MFA device metadata such as device certifications

## __Amazon Connect Service__
  - ### Features
    - This release provides a way to search for existing tags within an instance. Before tagging a resource, ensure consistency by searching for pre-existing key:value pairs.

## __Amazon GuardDuty__
  - ### Features
    - Add support for user.extra.sessionName in Kubernetes Audit Logs Findings.

## __Amazon Pinpoint__
  - ### Features
    - Added time zone estimation support for journeys

# __2.20.92__ __2023-06-23__
## __Amazon DevOps Guru__
  - ### Features
    - This release adds support for encryption via customer managed keys.

## __Amazon FSx__
  - ### Features
    - Update to Amazon FSx documentation.

## __Amazon Relational Database Service__
  - ### Features
    - Documentation improvements for create, describe, and modify DB clusters and DB instances.

## __Amazon Verified Permissions__
  - ### Features
    - Added improved descriptions and new code samples to SDK documentation.

# __2.20.91__ __2023-06-22__
## __AWS Step Functions__
  - ### Features
    - Adds support for Versions and Aliases. Adds 8 operations: PublishStateMachineVersion, DeleteStateMachineVersion, ListStateMachineVersions, CreateStateMachineAlias, DescribeStateMachineAlias, UpdateStateMachineAlias, DeleteStateMachineAlias, ListStateMachineAliases

## __AWSKendraFrontendService__
  - ### Features
    - Introducing Amazon Kendra Retrieve API that can be used to retrieve relevant passages or text excerpts given an input query.

## __Amazon Chime SDK Identity__
  - ### Features
    - AppInstanceBots can be configured to be invoked or not using the Target or the CHIME.mentions attribute for ChannelMessages

## __Amazon Chime SDK Messaging__
  - ### Features
    - ChannelMessages can be made visible to sender and intended recipient rather than all channel members with the target attribute. For example, a user can send messages to a bot and receive messages back in a group channel without other members seeing them.

## __Maven config__
  - ### Bugfixes
    - Fix the scm.url in the maven project
        - Contributed by: [@jensim](https://github.com/jensim)

## __Contributors__
Special thanks to the following contributors to this release: 

[@jensim](https://github.com/jensim)
# __2.20.90__ __2023-06-21__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release introduces the bandwidth reduction filter for the HEVC encoder, increases the limits of outputs per job, and updates support for the Nagra SDK to version 1.14.7.

## __AWS Transfer Family__
  - ### Features
    - This release adds a new parameter StructuredLogDestinations to CreateServer, UpdateServer APIs.

## __Amazon DynamoDB__
  - ### Features
    - Documentation updates for DynamoDB

## __Amazon EMR__
  - ### Features
    - This release introduces a new Amazon EMR EPI called ListSupportedInstanceTypes that returns a list of all instance types supported by a given EMR release.

## __Amazon SageMaker Service__
  - ### Features
    - This release provides support in SageMaker for output files in training jobs to be uploaded without compression and enable customer to deploy uncompressed model from S3 to real-time inference Endpoints. In addition, ml.trn1n.32xlarge is added to supported instance type list in training job.

## __AmazonMQ__
  - ### Features
    - The Cross Region Disaster Recovery feature allows to replicate a brokers state from one region to another in order to provide customers with multi-region resiliency in the event of a regional outage.

## __Inspector2__
  - ### Features
    - This release adds support for Software Bill of Materials (SBOM) export and the general availability of code scanning for AWS Lambda functions.

# __2.20.89__ __2023-06-20__
## __AWS Config__
  - ### Features
    - Updated ResourceType enum with new resource types onboarded by AWS Config in May 2023.

## __AWS Lambda__
  - ### Features
    - This release adds RecursiveInvocationException to the Invoke API and InvokeWithResponseStream API.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Appflow__
  - ### Features
    - This release adds new API to reset connector metadata cache

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds support for targeting Dedicated Host allocations by assetIds in AWS Outposts

## __Amazon Redshift__
  - ### Features
    - Added support for custom domain names for Redshift Provisioned clusters. This feature enables customers to create a custom domain name and use ACM to generate fully secure connections to it.

# __2.20.88__ __2023-06-19__
## __AWS CloudFormation__
  - ### Features
    - Specify desired CloudFormation behavior in the event of ChangeSet execution failure using the CreateChangeSet OnStackFailure parameter

## __AWS Glue__
  - ### Features
    - This release adds support for creating cross region table/database resource links

## __AWS Price List Service__
  - ### Features
    - This release updates the PriceListArn regex pattern.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - `WaiterExecutor` recursive implementation changed to iterative
        - Contributed by: [@flittev](https://github.com/flittev)

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation only update to address various tickets.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - API changes to AWS Verified Access to include data from trust providers in logs

## __Amazon Route 53 Domains__
  - ### Features
    - Update MaxItems upper bound to 1000 for ListPricesRequest

## __Amazon SageMaker Service__
  - ### Features
    - Amazon Sagemaker Autopilot releases CreateAutoMLJobV2 and DescribeAutoMLJobV2 for Autopilot customers with ImageClassification, TextClassification and Tabular problem type config support.

## __Contributors__
Special thanks to the following contributors to this release: 

[@flittev](https://github.com/flittev)
# __2.20.87__ __2023-06-16__
## __AWS Account__
  - ### Features
    - Improve pagination support for ListRegions

## __AWS Application Discovery Service__
  - ### Features
    - Add Amazon EC2 instance recommendations export

## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for AWS Identity and Access Management (IAM).

## __Amazon Connect Service__
  - ### Features
    - Updates the *InstanceStorageConfig APIs to support a new ResourceType: SCREEN_RECORDINGS to enable screen recording and specify the storage configurations for publishing the recordings. Also updates DescribeInstance and ListInstances APIs to include InstanceAccessUrl attribute in the API response.

## __Amazon DynamoDB__
  - ### Bugfixes
    - Created static method EnumAttributeConverter::createWithNameAsKeys which creates a converter based on the Enum::name method to identify enums, rather than Enum::toString. This is preferable because Enum::name is final and cannot be overwritten, as opposed to Enum::toString. EnumAttributeConverter::create is kept as it is, for backward compatibility.
        - Contributed by: [@martinKindall](https://github.com/martinKindall)

## __Amazon Simple Storage Service__
  - ### Features
    - This release adds SDK support for request-payer request header and request-charged response header in the "GetBucketAccelerateConfiguration", "ListMultipartUploads", "ListObjects", "ListObjectsV2" and "ListObjectVersions" S3 APIs.

## __Contributors__
Special thanks to the following contributors to this release: 

[@martinKindall](https://github.com/martinKindall)
# __2.20.86__ __2023-06-15__
## __AWS Audit Manager__
  - ### Features
    - This release introduces 2 Audit Manager features: CSV exports and new manual evidence options. You can now export your evidence finder results in CSV format. In addition, you can now add manual evidence to a control by entering free-form text or uploading a file from your browser.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon DynamoDB Enhanced__
  - ### Bugfixes
    - Thanks to this bugfix it'll be possible to create DynamoDB table containing
      secondary indices when using no arugments `createTable` method from `DefaultDynamoDbTable`
      class. Information about their presence might be expressed using annotations, but it was ignored
      and created tables didn't contain specified indices. Plase note that it is still not possible
      to specify projections for indices using annotations. By default, all fields will be projected.
        - Contributed by: [@breader124](https://github.com/breader124)

## __Amazon Elastic File System__
  - ### Features
    - Documentation updates for EFS.

## __Amazon GuardDuty__
  - ### Features
    - Updated descriptions for some APIs.

## __Amazon Location Service__
  - ### Features
    - Amazon Location Service adds categories to places, including filtering on those categories in searches. Also, you can now add metadata properties to your geofences.

## __DynamoDB Enhanced Client__
  - ### Features
    - Add EnhancedType parameters to static builder methods of StaticTableSchema and StaticImmitableTableSchema
        - Contributed by: [@bmaizels](https://github.com/bmaizels)

## __Contributors__
Special thanks to the following contributors to this release: 

[@bmaizels](https://github.com/bmaizels), [@breader124](https://github.com/breader124)
# __2.20.85__ __2023-06-13__
## __AWS CloudTrail__
  - ### Features
    - This feature allows users to view dashboards for CloudTrail Lake event data stores.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SecurityHub__
  - ### Features
    - Add support for Security Hub Automation Rules

## __AWS SimSpace Weaver__
  - ### Features
    - This release fixes using aws-us-gov ARNs in API calls and adds documentation for snapshot APIs.

## __AWS WAFV2__
  - ### Features
    - You can now detect and block fraudulent account creation attempts with the new AWS WAF Fraud Control account creation fraud prevention (ACFP) managed rule group AWSManagedRulesACFPRuleSet.

## __AWS Well-Architected Tool__
  - ### Features
    - AWS Well-Architected now supports Profiles that help customers prioritize which questions to focus on first by providing a list of prioritized questions that are better aligned with their business goals and outcomes.

## __Amazon CodeGuru Security__
  - ### Features
    - Initial release of Amazon CodeGuru Security APIs

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces a new feature, EC2 Instance Connect Endpoint, that enables you to connect to a resource over TCP, without requiring the resource to have a public IPv4 address.

## __Amazon Lightsail__
  - ### Features
    - This release adds pagination for the Get Certificates API operation.

## __Amazon Simple Storage Service__
  - ### Features
    - Integrate double encryption feature to SDKs.

## __Amazon Verified Permissions__
  - ### Features
    - GA release of Amazon Verified Permissions.

## __EC2 Image Builder__
  - ### Features
    - Change the Image Builder ImagePipeline dateNextRun field to more accurately describe the data.

## __Elastic Disaster Recovery Service__
  - ### Features
    - Added APIs to support network replication and recovery using AWS Elastic Disaster Recovery.

# __2.20.84__ __2023-06-12__
## __AWS Amplify UI Builder__
  - ### Features
    - AWS Amplify UIBuilder is launching Codegen UI, a new feature that enables you to generate your amplify uibuilder components and forms.

## __AWS SDK for Java v2__
  - ### Features
    - Add "unsafe" and "fromRemaining" AsyncRequestBody constructors for byte arrays and ByteBuffers
        - Contributed by: [@StephenFlavin](https://github.com/StephenFlavin)
    - Updated endpoint and partition metadata.
    - `IdleConnectionReaper` now does not prevent `HttpClientConnectionManager` from getting GC'd in the case where an SDK client is created per request and not closed.

## __Amazon DynamoDB__
  - ### Features
    - Documentation updates for DynamoDB

## __Amazon DynamoDB Streams__
  - ### Features
    - Documentation updates for DynamoDB Streams

## __Amazon FSx__
  - ### Features
    - Amazon FSx for NetApp ONTAP now supports joining a storage virtual machine (SVM) to Active Directory after the SVM has been created.

## __Amazon OpenSearch Service__
  - ### Features
    - This release adds support for SkipUnavailable connection property for cross cluster search

## __Amazon Rekognition__
  - ### Features
    - This release adds support for improved accuracy with user vector in Amazon Rekognition Face Search. Adds new APIs: AssociateFaces, CreateUser, DeleteUser, DisassociateFaces, ListUsers, SearchUsers, SearchUsersByImage. Also adds new face metadata that can be stored: user vector.

## __Amazon SageMaker Service__
  - ### Features
    - Sagemaker Neo now supports compilation for inferentia2 (ML_INF2) and Trainium1 (ML_TRN1) as available targets. With these devices, you can run your workloads at highest performance with lowest cost. inferentia2 (ML_INF2) is available in CMH and Trainium1 (ML_TRN1) is available in IAD currently

## __Contributors__
Special thanks to the following contributors to this release: 

[@StephenFlavin](https://github.com/StephenFlavin)
# __2.20.83__ __2023-06-09__
## __AWS Certificate Manager Private Certificate Authority__
  - ### Features
    - Document-only update to refresh CLI documentation for AWS Private CA. No change to the service.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fixed issue with leased connection leaks when threads executing HTTP connections with Apache HttpClient were interrupted while the connection was in progress.

## __Amazon Connect Service__
  - ### Features
    - This release adds search APIs for Prompts, Quick Connects and Hours of Operations, which can be used to search for those resources within a Connect Instance.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - By default, Netty threads are blocked during dns resolution, namely InetAddress.getByName is used under the hood. Now, there's an option to configure the NettyNioAsyncHttpClient in order to use a non blocking dns resolution strategy.
        - Contributed by: [@martinKindall](https://github.com/martinKindall)

## __Contributors__
Special thanks to the following contributors to this release: 

[@martinKindall](https://github.com/martinKindall)
# __2.20.82__ __2023-06-08__
## __AWS Comprehend Medical__
  - ### Features
    - This release supports a new set of entities and traits.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS STS__
  - ### Features
    - Updates the core STS credential provider logic to return AwsSessionCredentials instead of an STS-specific class, and adds expirationTime to AwsSessionCredentials

## __AWS Service Catalog__
  - ### Features
    - New parameter added in ServiceCatalog DescribeProvisioningArtifact api - IncludeProvisioningArtifactParameters. This parameter can be used to return information about the parameters used to provision the product

## __Amazon Athena__
  - ### Features
    - You can now define custom spark properties at start of the session for use cases like cluster encryption, table formats, and general Spark tuning.

## __Amazon Timestream Write__
  - ### Features
    - This release adds the capability for customers to define how their data should be partitioned, optimizing for certain access patterns. This definition will take place as a part of the table creation.

## __Payment Cryptography Control Plane__
  - ### Features
    - Initial release of AWS Payment Cryptography Control Plane service for creating and managing cryptographic keys used during card payment processing.

## __Payment Cryptography Data Plane__
  - ### Features
    - Initial release of AWS Payment Cryptography DataPlane Plane service for performing cryptographic operations typically used during card payment processing.

# __2.20.81__ __2023-06-07__
## __AWS CloudFormation__
  - ### Features
    - AWS CloudFormation StackSets is updating the deployment experience for all stackset operations to skip suspended AWS accounts during deployments. StackSets will skip target AWS accounts that are suspended and set the Detailed Status of the corresponding stack instances as SKIPPED_SUSPENDED_ACCOUNT

## __AWS Direct Connect__
  - ### Features
    - This update corrects the jumbo frames mtu values from 9100 to 8500 for transit virtual interfaces.

## __AWS IoT Core Device Advisor__
  - ### Features
    - AWS IoT Core Device Advisor now supports new Qualification Suite test case list. With this update, customers can more easily create new qualification test suite with an empty rootGroup input.

## __Amazon CloudWatch Logs__
  - ### Features
    - This change adds support for account level data protection policies using 3 new APIs, PutAccountPolicy, DeleteAccountPolicy and DescribeAccountPolicy. DescribeLogGroup API has been modified to indicate if account level policy is applied to the LogGroup via "inheritedProperties" list in the response.

## __Amazon Connect Customer Profiles__
  - ### Features
    - This release introduces event stream related APIs.

## __Amazon EMR Containers__
  - ### Features
    - EMR on EKS adds support for log rotation of Spark container logs with EMR-6.11.0 onwards, to the StartJobRun API.

# __2.20.80__ __2023-06-06__
## __AWS Identity and Access Management__
  - ### Features
    - This release updates the AccountAlias regex pattern with the same length restrictions enforced by the length constraint.

## __AWS IoT__
  - ### Features
    - Adding IoT Device Management Software Package Catalog APIs to register, store, and report system software packages, along with their versions and metadata in a centralized location.

## __AWS IoT Data Plane__
  - ### Features
    - Update thing shadow name regex to allow '$' character

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Signer__
  - ### Features
    - AWS Signer is launching Container Image Signing, a new feature that enables you to sign and verify container images. This feature enables you to validate that only container images you approve are used in your enterprise.

## __Amazon Connect Service__
  - ### Features
    - GetMetricDataV2 API is now available in AWS GovCloud(US) region.

## __Amazon EMR__
  - ### Features
    - This release provides customers the ability to specify an allocation strategies amongst PRICE_CAPACITY_OPTIMIZED, CAPACITY_OPTIMIZED, LOWEST_PRICE, DIVERSIFIED for Spot instances in Instance Feet cluster. This enables customers to choose an allocation strategy best suited for their workload.

## __Amazon Lex Model Building V2__
  - ### Features
    - This release adds support for Lex Developers to create test sets and to execute those test-sets against their bots.

## __Amazon QuickSight__
  - ### Features
    - QuickSight support for pivot table field collapse state, radar chart range scale and multiple scope options in conditional formatting.

## __Amazon Simple Queue Service__
  - ### Features
    - Amazon SQS adds three new APIs - StartMessageMoveTask, CancelMessageMoveTask, and ListMessageMoveTasks to automate redriving messages from dead-letter queues to source queues or a custom destination.

## __Inspector2__
  - ### Features
    - Adds new response properties and request parameters for 'last scanned at' on the ListCoverage operation. This feature allows you to search and view the date of which your resources were last scanned by Inspector.

# __2.20.79__ __2023-06-05__
## __AWS CloudFormation__
  - ### Features
    - AWS CloudFormation StackSets provides customers with three new APIs to activate, deactivate, and describe AWS Organizations trusted access which is needed to get started with service-managed StackSets.

## __AWS Key Management Service__
  - ### Features
    - This release includes feature to import customer's asymmetric (RSA and ECC) and HMAC keys into KMS. It also includes feature to allow customers to specify number of days to schedule a KMS key deletion as a policy condition key.

## __AWS Lambda__
  - ### Features
    - Add Ruby 3.2 (ruby3.2) Runtime support to AWS Lambda.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Upgrading AWS CRT dependency to v0.21.17. This version contains minor fixes and updates

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Making InstanceTagAttribute as the required parameter for the DeregisterInstanceEventNotificationAttributes and RegisterInstanceEventNotificationAttributes APIs.

## __Amazon Fraud Detector__
  - ### Features
    - Added new variable types, new DateTime data type, and new rules engine functions for interacting and working with DateTime data types.

## __Amazon Keyspaces__
  - ### Features
    - This release adds support for MRR GA launch, and includes multiregion support in create-keyspace, get-keyspace, and list-keyspace.

## __AmazonMWAA__
  - ### Features
    - This release adds ROLLING_BACK and CREATING_SNAPSHOT environment statuses for Amazon MWAA environments.

## __FinSpace User Environment Management service__
  - ### Features
    - Releasing new Managed kdb Insights APIs

# __2.20.78__ __2023-06-02__
## __AWS CloudTrail__
  - ### Features
    - This feature allows users to start and stop event ingestion on a CloudTrail Lake event data store.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - Added APIs to describe managed products. The APIs retrieve information about rule groups that are managed by AWS and by AWS Marketplace sellers.

## __Amazon Athena__
  - ### Features
    - This release introduces the DeleteCapacityReservation API and the ability to manage capacity reservations using CloudFormation

## __Amazon SageMaker Service__
  - ### Features
    - This release adds Selective Execution feature that allows SageMaker Pipelines users to run selected steps in a pipeline.

# __2.20.77__ __2023-06-01__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - Corrected the information for the header order FieldToMatch setting

## __Alexa For Business__
  - ### Features
    - Alexa for Business has been deprecated and is no longer supported.

## __Amazon Appflow__
  - ### Features
    - Added ability to select DataTransferApiType for DescribeConnector and CreateFlow requests when using Async supported connectors. Added supportedDataTransferType to DescribeConnector/DescribeConnectors/ListConnector response.

## __Amazon Connect Customer Profiles__
  - ### Features
    - This release introduces calculated attribute related APIs.

## __Amazon Interactive Video Service__
  - ### Features
    - API Update for IVS Advanced Channel type

## __Amazon SageMaker Service__
  - ### Features
    - Amazon Sagemaker Autopilot adds support for Parquet file input to NLP text classification jobs.

# __2.20.76__ __2023-05-31__
## __AWS Config__
  - ### Features
    - Resource Types Exclusion feature launch by AWS Config

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix an issue where the optimal number of parts calculated could be higher than 10,000

## __AWS Service Catalog__
  - ### Features
    - Documentation updates for ServiceCatalog.

## __AWSMainframeModernization__
  - ### Features
    - Adds an optional create-only 'roleArn' property to Application resources. Enables PS and PO data set org types.

## __Amazon Fraud Detector__
  - ### Features
    - This release enables publishing event predictions from Amazon Fraud Detector (AFD) to Amazon EventBridge. For example, after getting predictions from AFD, Amazon EventBridge rules can be configured to trigger notification through an SNS topic, send a message with SES, or trigger Lambda workflows.

## __Amazon HealthLake__
  - ### Features
    - This release adds a new request parameter to the CreateFHIRDatastore API operation. IdentityProviderConfiguration specifies how you want to authenticate incoming requests to your Healthlake Data Store.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for changing the engine for Oracle using the ModifyDbInstance API

## __Amazon WorkSpaces Web__
  - ### Features
    - WorkSpaces Web now allows you to control which IP addresses your WorkSpaces Web portal may be accessed from.

# __2.20.75__ __2023-05-30__
## __AWS Glue__
  - ### Features
    - Added Runtime parameter to allow selection of Ray Runtime

## __AWS Ground Station__
  - ### Features
    - Updating description of GetMinuteUsage to be clearer.

## __AWS IoT FleetWise__
  - ### Features
    - Campaigns now support selecting Timestream or S3 as the data destination, Signal catalogs now support "Deprecation" keyword released in VSS v2.1 and "Comment" keyword released in VSS v3.0

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SecurityHub__
  - ### Features
    - Added new resource detail objects to ASFF, including resources for AwsGuardDutyDetector, AwsAmazonMqBroker, AwsEventSchemasRegistry, AwsAppSyncGraphQlApi and AwsStepFunctionStateMachine.

## __AWS WAFV2__
  - ### Features
    - This SDK release provides customers the ability to use Header Order as a field to match.

## __Amazon Chime SDK Voice__
  - ### Features
    - Added optional CallLeg field to StartSpeakerSearchTask API request

## __Amazon Location Service__
  - ### Features
    - This release adds API support for political views for the maps service APIs: CreateMap, UpdateMap, DescribeMap.

## __Amazon MemoryDB__
  - ### Features
    - Amazon MemoryDB for Redis now supports AWS Identity and Access Management authentication access to Redis clusters starting with redis-engine version 7.0

## __Amazon Personalize__
  - ### Features
    - This release provides support for the exclusion of certain columns for training when creating a solution and creating or updating a recommender with Amazon Personalize.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds 2 new voices - Sofie (da-DK) and Niamh (en-IE)

## __Amazon Security Lake__
  - ### Features
    - Log sources are now versioned. AWS log sources and custom sources will now come with a version identifier that enables producers to vend multiple schema versions to subscribers. Security Lake API have been refactored to more closely align with AWS API conventions.

# __2.20.74__ __2023-05-26__
## __AWS IoT Wireless__
  - ### Features
    - Add Multicast Group support in Network Analyzer Configuration.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - Documentation update for a new Initiation Method value in DescribeContact API

## __Amazon SageMaker Service__
  - ### Features
    - Added ml.p4d and ml.inf1 as supported instance type families for SageMaker Notebook Instances.

# __2.20.73__ __2023-05-25__
## __AWS CodePipeline__
  - ### Features
    - Add PollingDisabledAt time information in PipelineMetadata object of GetPipeline API.

## __AWS Glue__
  - ### Features
    - Added ability to create data quality rulesets for shared, cross-account Glue Data Catalog tables. Added support for dataset comparison rules through a new parameter called AdditionalDataSources. Enhanced the data quality results with a map containing profiled metric values.

## __AWS Migration Hub Refactor Spaces__
  - ### Features
    - This SDK update allows for path parameter syntax to be passed to the CreateRoute API. Path parameter syntax require parameters to be enclosed in {} characters. This update also includes a new AppendSourcePath field which lets users forward the source path to the Service URL endpoint.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon GameLift__
  - ### Features
    - GameLift FleetIQ users can now filter game server claim requests to exclude servers on instances that are draining.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Automatic Model Tuning now supports enabling Autotune for tuning jobs which can choose tuning job configurations.

## __Application Auto Scaling__
  - ### Features
    - With this release, ElastiCache customers will be able to use predefined metricType "ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage" for their ElastiCache instances.

# __2.20.72__ __2023-05-24__
## __AWS AppSync__
  - ### Features
    - This release introduces AppSync Merged APIs, which provide the ability to compose multiple source APIs into a single federated/merged API.

## __AWS Cost and Usage Report Service__
  - ### Features
    - Add support for split cost allocation data on a report.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect Evaluation Capabilities: validation improvements

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker now provides an instantaneous deployment recommendation through the DescribeModel API

# __2.20.71__ __2023-05-23__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon SageMaker Service__
  - ### Features
    - Added ModelNameEquals, ModelPackageVersionArnEquals in request and ModelName, SamplePayloadUrl, ModelPackageVersionArn in response of ListInferenceRecommendationsJobs API. Added Invocation timestamps in response of DescribeInferenceRecommendationsJob API & ListInferenceRecommendationsJobSteps API.

## __Amazon Translate__
  - ### Features
    - Added support for calling TranslateDocument API.

## __Firewall Management Service__
  - ### Features
    - Fixes issue that could cause calls to GetAdminScope and ListAdminAccountsForOrganization to return a 500 Internal Server error.

# __2.20.70__ __2023-05-22__
## __AWS Backup__
  - ### Features
    - Added support for tags on restore.

## __AWS SDK for Java v2__
  - ### Features
    - Add client configuration overriding of SCHEDULED_EXECUTOR_SERVICE option
        - Contributed by: [@scrocquesel](https://github.com/scrocquesel)
    - This commit adds a new ErrorType core metric that is recorded for all failed API call attempts. The ErrorType records the general category  of error that ocurred for a failed API call attempt. Those categories are:

       - Throttling errors
       - Service errors other than throttling
       - I/O errors
       - API call or API call attempt timeouts

       The intent of this metric is to help locate possible issues at a glance and help direct further debugging or investigation.

## __Amazon Pinpoint__
  - ### Features
    - Amazon Pinpoint is deprecating the tags parameter in the UpdateSegment, UpdateCampaign, UpdateEmailTemplate, UpdateSmsTemplate, UpdatePushTemplate, UpdateInAppTemplate and UpdateVoiceTemplate. Amazon Pinpoint will end support tags parameter by May 22, 2023.

## __Amazon QuickSight__
  - ### Features
    - Add support for Asset Bundle, Geospatial Heatmaps.

## __Contributors__
Special thanks to the following contributors to this release: 

[@scrocquesel](https://github.com/scrocquesel)
# __2.20.69__ __2023-05-19__
## __AWS Backup__
  - ### Features
    - Add ResourceArn, ResourceType, and BackupVaultName to ListRecoveryPointsByLegalHold API response.

## __AWS Elemental MediaPackage v2__
  - ### Features
    - Adds support for the MediaPackage Live v2 API

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Cases__
  - ### Features
    - This release adds the ability to create fields with type Url through the CreateField API. For more information see https://docs.aws.amazon.com/cases/latest/APIReference/Welcome.html

## __Amazon Simple Email Service__
  - ### Features
    - This release allows customers to update scaling mode property of dedicated IP pools with PutDedicatedIpPoolScalingAttributes call.

# __2.20.68__ __2023-05-18__
## __AWS CloudTrail__
  - ### Features
    - Add ConflictException to PutEventSelectors, add (Channel/EDS)ARNInvalidException to Tag APIs. These exceptions provide customers with more specific error messages instead of internal errors.

## __AWS Compute Optimizer__
  - ### Features
    - In this launch, we add support for showing integration status with external metric providers such as Instana, Datadog ...etc in GetEC2InstanceRecommendations and ExportEC2InstanceRecommendations apis

## __AWS Elemental MediaConvert__
  - ### Features
    - This release introduces a new MXF Profile for XDCAM which is strictly compliant with the SMPTE RDD 9 standard and improved handling of output name modifiers.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - This update fixes  an issue where CompletableFutures are leaked/never completed when the submission to the FUTURE_COMPLETE_EXECUTOR is rejected.

      By default, the SDK uses `2 * number of cores` (with a maximum of 64), and uses bounded queue of size 1000. In cases where the throughput to the client exceeds the executor's ability to keep up, it would reject executions. Before this change this would lead to leaked futures.

## __AWS Security Token Service__
  - ### Features
    - API updates for the AWS Security Token Service

## __Amazon Athena__
  - ### Features
    - Removing SparkProperties from EngineConfiguration object for StartSession API call

## __Amazon Connect Service__
  - ### Features
    - You can programmatically create and manage prompts using APIs, for example, to extract prompts stored within Amazon Connect and add them to your Amazon S3 bucket. AWS CloudTrail, AWS CloudFormation and tagging are supported.

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation only release to address various tickets.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add support for i4g.large, i4g.xlarge, i4g.2xlarge, i4g.4xlarge, i4g.8xlarge and i4g.16xlarge instances powered by AWS Graviton2 processors that deliver up to 15% better compute performance than our other storage-optimized instances.

## __Amazon Relational Database Service__
  - ### Features
    - RDS documentation update for the EngineVersion parameter of ModifyDBSnapshot

## __Amazon SageMaker geospatial capabilities__
  - ### Features
    - This release makes ExecutionRoleArn a required field in the StartEarthObservationJob API.

## __S3 Transfer Manager__
  - ### Bugfixes
    - Fixed the issue where S3 Transfer Manager attempted to load AWS CRT classes when Java based S3 client was used. See [#3936](https://github.com/aws/aws-sdk-java-v2/issues/3936).

# __2.20.67__ __2023-05-16__
## __AWS Direct Connect__
  - ### Features
    - This release includes an update to the mtu value for CreateTransitVirtualInterface from 9001 mtu to 8500 mtu.

## __AWS Glue__
  - ### Features
    - Add Support for Tags for Custom Entity Types

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Documentations
    - Fix javadoc warnings in the sdk-core package.
        - Contributed by: [@sugmanue](https://github.com/sugmanue)

## __AWS Secrets Manager__
  - ### Features
    - Documentation updates for Secrets Manager

## __AWS WAFV2__
  - ### Features
    - My AWS Service (placeholder) - You can now rate limit web requests based on aggregation keys other than IP addresses, and you can aggregate using combinations of keys. You can also rate limit all requests that match a scope-down statement, without further aggregation.

## __Amazon Detective__
  - ### Features
    - Added and updated API operations in Detective to support the integration of ASFF Security Hub findings.

## __Contributors__
Special thanks to the following contributors to this release: 

[@sugmanue](https://github.com/sugmanue)
# __2.20.66__ __2023-05-15__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Transfer Family__
  - ### Features
    - This release introduces the ability to require both password and SSH key when users authenticate to your Transfer Family servers that use the SFTP protocol.

## __Amazon Athena__
  - ### Features
    - You can now define custom spark properties at start of the session for use cases like cluster encryption, table formats, and general Spark tuning.

## __Amazon CodeCatalyst__
  - ### Features
    - With this release, the users can list the active sessions connected to their Dev Environment on AWS CodeCatalyst

## __Amazon Rekognition__
  - ### Features
    - This release adds a new EyeDirection attribute in Amazon Rekognition DetectFaces and IndexFaces APIs which predicts the yaw and pitch angles of a person's eye gaze direction for each face detected in the image.

## __IAM Roles Anywhere__
  - ### Features
    - Adds support for custom notification settings in a trust anchor. Introduces PutNotificationSettings and ResetNotificationSettings API's. Updates DurationSeconds max value to 3600.

## __Managed Streaming for Kafka__
  - ### Features
    - Added a fix to make clusterarn a required field in ListClientVpcConnections and RejectClientVpcConnection APIs

# __2.20.65__ __2023-05-11__
## __AWS Health APIs and Notifications__
  - ### Features
    - Add support for regional endpoints

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Support__
  - ### Features
    - This release adds 2 new Support APIs, DescribeCreateCaseOptions and DescribeSupportedLanguages. You can use these new APIs to get available support languages.

## __Amazon Connect Service__
  - ### Features
    - This release updates GetMetricDataV2 API, to support metric data up-to last 35 days

## __Amazon ElastiCache__
  - ### Features
    - Added support to modify the cluster mode configuration for the existing ElastiCache ReplicationGroups. Customers can now modify the configuration from cluster mode disabled to cluster mode enabled.

## __Amazon Elasticsearch Service__
  - ### Features
    - This release fixes DescribePackages API error with null filter value parameter.

## __Amazon Interactive Video Service RealTime__
  - ### Features
    - Add methods for inspecting and debugging stages: ListStageSessions, GetStageSession, ListParticipants, GetParticipant, and ListParticipantEvents.

## __Amazon Omics__
  - ### Features
    - This release provides support for Ready2Run and GPU workflows, an improved read set filter, the direct upload of read sets into Omics Storage, and annotation parsing for analytics stores.

## __Amazon OpenSearch Service__
  - ### Features
    - This release fixes DescribePackages API error with null filter value parameter.

## __Amazon Route 53 Resolver__
  - ### Features
    - Update FIPS endpoints for GovCloud (US) regions in SDK.

# __2.20.64__ __2023-05-10__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - STS was being skipped in the default credential provider chain when using native builds in java. Now a proper reflect-config.json file was added to include sts.
        - Contributed by: [@martinKindall](https://github.com/martinKindall)

## __Amazon EMR__
  - ### Features
    - EMR Studio now supports programmatically executing a Notebooks on an EMR on EKS cluster. In addition, notebooks can now be executed by specifying its location in S3.

## __Amazon Relational Database Service__
  - ### Features
    - Amazon Relational Database Service (RDS) updates for the new Aurora I/O-Optimized storage type for Amazon Aurora DB clusters

## __Amazon Simple Workflow Service__
  - ### Features
    - This release adds a new API parameter to exclude old history events from decision tasks.

## __Contributors__
Special thanks to the following contributors to this release: 

[@martinKindall](https://github.com/martinKindall)
# __2.20.63__ __2023-05-09__
## __AWS Glue__
  - ### Features
    - This release adds AmazonRedshift Source and Target nodes in addition to DynamicTransform OutputSchemas

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon SageMaker Service__
  - ### Features
    - This release includes support for (1) Provisioned Concurrency for Amazon SageMaker Serverless Inference and (2) UpdateEndpointWeightsAndCapacities API for Serverless endpoints.

## __Application Auto Scaling__
  - ### Features
    - With this release, Amazon SageMaker Serverless Inference customers can use Application Auto Scaling to auto scale the provisioned concurrency of their serverless endpoints.

# __2.20.62__ __2023-05-08__
## __AWS Glue__
  - ### Features
    - Support large worker types G.4x and G.8x for Glue Spark.

## __AWS IoT SiteWise__
  - ### Features
    - Provide support for 20,000 max results for GetAssetPropertyValueHistory/BatchGetAssetPropertyValueHistory and 15 minute aggregate resolution for GetAssetPropertyAggregates/BatchGetAssetPropertyAggregates

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SDK for Java v2, AWS STS__
  - ### Features
    - Respect async credentials update flag from DefaultCredentialsProvider for WebIdentityTokenFileCredentialProvider, potentially avoiding latency spikes on credentials expiration
        - Contributed by: [@paulolieuthier](https://github.com/paulolieuthier)

## __AWS Security Token Service__
  - ### Features
    - Documentation updates for AWS Security Token Service.

## __Amazon GuardDuty__
  - ### Features
    - Add AccessDeniedException 403 Error message code to support 3 Tagging related APIs

## __Contributors__
Special thanks to the following contributors to this release: 

[@paulolieuthier](https://github.com/paulolieuthier)
# __2.20.61__ __2023-05-05__
## __AWS MediaTailor__
  - ### Features
    - This release adds support for AFTER_LIVE_EDGE mode configuration for avail suppression, and adding a fill-policy setting that sets the avail suppression to PARTIAL_AVAIL or FULL_AVAIL_ONLY when AFTER_LIVE_EDGE is enabled.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support the inf2 and trn1n instances. inf2 instances are purpose built for deep learning inference while trn1n instances are powered by AWS Trainium accelerators and they build on the capabilities of Trainium-powered trn1 instances.

## __Amazon Simple Queue Service__
  - ### Features
    - Revert previous SQS protocol change.

## __Inspector2__
  - ### Features
    - Amazon Inspector now allows customers to search its vulnerability intelligence database if any of the Inspector scanning types are activated.

# __2.20.60__ __2023-05-04__
## __AWS Config__
  - ### Features
    - Updated ResourceType enum with new resource types onboarded by AWS Config in April 2023.

## __AWS Network Firewall__
  - ### Features
    - This release adds support for the Suricata REJECT option in midstream exception configurations.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Avoids NullPointerException when config and credentials files were not found for profiles. Now it returns an empty map, as it used to.
        - Contributed by: [@martinKindall](https://github.com/martinKindall)

## __AWS SecurityHub__
  - ### Features
    - Add support for Finding History.

## __Amazon CloudWatch__
  - ### Features
    - Adds support for filtering by metric names in CloudWatch Metric Streams.

## __Amazon Connect Service__
  - ### Features
    - Remove unused InvalidParameterException from CreateParticipant API

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation update for new error type NamespaceNotFoundException for CreateCluster and UpdateCluster

## __Amazon OpenSearch Service__
  - ### Features
    - DescribeDomainNodes: A new API that provides configuration information for nodes part of the domain

## __Amazon QuickSight__
  - ### Features
    - Add support for Topic, Dataset parameters and VPC

## __Amazon Rekognition__
  - ### Features
    - This release adds a new attribute FaceOccluded. Additionally, you can now select attributes individually (e.g. ["DEFAULT", "FACE_OCCLUDED", "AGE_RANGE"] instead of ["ALL"]), which can reduce response time.

## __Amazon SageMaker Service__
  - ### Features
    - We added support for ml.inf2 and ml.trn1 family of instances on Amazon SageMaker for deploying machine learning (ML) models for Real-time and Asynchronous inference. You can use these instances to achieve high performance at a low cost for generative artificial intelligence (AI) models.

## __Amazon Simple Queue Service__
  - ### Features
    - This release enables customers to call SQS using AWS JSON-1.0 protocol.

## __Amazon Simple Storage Service__
  - ### Features
    - Documentation updates for Amazon S3

## __Contributors__
Special thanks to the following contributors to this release: 

[@martinKindall](https://github.com/martinKindall)
# __2.20.59__ __2023-05-03__
## __AWS AppSync__
  - ### Features
    - Private API support for AWS AppSync. With Private APIs, you can now create GraphQL APIs that can only be accessed from your Amazon Virtual Private Cloud ("VPC").

## __AWS IoT TwinMaker__
  - ### Features
    - This release adds a field for GetScene API to return error code and message from dependency services.

## __AWS Network Firewall__
  - ### Features
    - AWS Network Firewall now supports policy level HOME_NET variable overrides.

## __AWS Well-Architected Tool__
  - ### Features
    - This release deepens integration with AWS Service Catalog AppRegistry to improve workload resource discovery.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds an SDK paginator for GetNetworkInsightsAccessScopeAnalysisFindings

## __Amazon OpenSearch Service__
  - ### Features
    - Amazon OpenSearch Service adds the option to deploy a domain across multiple Availability Zones, with each AZ containing a complete copy of data and with nodes in one AZ acting as a standby. This option provides 99.99% availability and consistent performance in the event of infrastructure failure.

## __Inspector2__
  - ### Features
    - This feature provides deep inspection for linux based instance

# __2.20.58__ __2023-05-02__
## __AWS Resilience Hub__
  - ### Features
    - This release will improve resource level transparency in applications by discovering previously hidden resources.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWSKendraFrontendService__
  - ### Features
    - AWS Kendra now supports configuring document fields/attributes via the GetQuerySuggestions API. You can now base query suggestions on the contents of document fields.

## __Amazon Appflow__
  - ### Features
    - This release adds new API to cancel flow executions.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect Service Rules API update: Added OnContactEvaluationSubmit event source to support user configuring evaluation form rules.

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation only update to address Amazon ECS tickets.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon Sagemaker Autopilot supports training models with sample weights and additional objective metrics.

# __2.20.57__ __2023-05-01__
## __AWS Compute Optimizer__
  - ### Features
    - support for tag filtering within compute optimizer. ability to filter recommendation results by tag and tag key value pairs. ability to filter by inferred workload type added.

## __AWS Key Management Service__
  - ### Features
    - This release makes the NitroEnclave request parameter Recipient and the response field for CiphertextForRecipient available in AWS SDKs. It also adds the regex pattern for CloudHsmClusterId validation.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

# __2.20.56__ __2023-04-28__
## __AWS Direct Connect__
  - ### Features
    - This release corrects the jumbo frames MTU from 9100 to 8500.

## __AWS IoT__
  - ### Features
    - This release allows AWS IoT Core users to specify a TLS security policy when creating and updating AWS IoT Domain Configurations.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SimSpace Weaver__
  - ### Features
    - Added a new CreateSnapshot API. For the StartSimulation API, SchemaS3Location is now optional, added a new SnapshotS3Location parameter. For the DescribeSimulation API, added SNAPSHOT_IN_PROGRESS simulation state, deprecated SchemaError, added new fields: StartError and SnapshotS3Location.

## __AWS WAFV2__
  - ### Features
    - You can now associate a web ACL with a Verified Access instance.

## __Amazon Appflow__
  - ### Features
    - Adds Jwt Support for Salesforce Credentials.

## __Amazon Athena__
  - ### Features
    - You can now use capacity reservations on Amazon Athena to run SQL queries on fully-managed compute capacity.

## __Amazon Elastic File System__
  - ### Features
    - This release adds PAUSED and PAUSING state as a returned value for DescribeReplicationConfigurations response.

## __Amazon Managed Grafana__
  - ### Features
    - This release adds support for the grafanaVersion parameter in CreateWorkspace.

## __Amazon Rekognition__
  - ### Features
    - Added support for aggregating moderation labels by video segment timestamps for Stored Video Content Moderation APIs and added additional information about the job to all Stored Video Get API responses.

## __Amazon WorkSpaces__
  - ### Features
    - Added Windows 11 to support Microsoft_Office_2019

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - The fix involves implementing a null-pointer check in the NettyUtils#isConnectionResetException() method, in case the
          throwable of the original cause has no message.
        - Contributed by: [@martinKindall](https://github.com/martinKindall)

## __Contributors__
Special thanks to the following contributors to this release: 

[@martinKindall](https://github.com/martinKindall)
# __2.20.55__ __2023-04-27__
## __AWS IoT Core Device Advisor__
  - ### Features
    - AWS IoT Core Device Advisor now supports MQTT over WebSocket. With this update, customers can run all three test suites of AWS IoT Core Device Advisor - qualification, custom, and long duration tests - using Signature Version 4 for MQTT over WebSocket.

## __AWS Lambda__
  - ### Features
    - Add Java 17 (java17) support to AWS Lambda

## __AWS Marketplace Catalog Service__
  - ### Features
    - Enabled Pagination for List Entities and List Change Sets operations

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS X-Ray__
  - ### Features
    - Updated X-Ray documentation with Resource Policy API descriptions.

## __Amazon EMR Containers__
  - ### Features
    - This release adds GetManagedEndpointSessionCredentials, a new API that allows customers to generate an auth token to connect to a managed endpoint, enabling features such as self-hosted Jupyter notebooks for EMR on EKS.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for AMD SEV-SNP on EC2 instances.

## __Amazon GuardDuty__
  - ### Features
    - Added API support to initiate on-demand malware scan on specific resources.

## __Amazon OpenSearch Ingestion__
  - ### Features
    - Documentation updates for OpenSearch Ingestion

## __Amazon QLDB__
  - ### Features
    - Documentation updates for Amazon QLDB

## __Amazon SageMaker Service__
  - ### Features
    - Added ml.p4d.24xlarge and ml.p4de.24xlarge as supported instances for SageMaker Studio

## __Managed Streaming for Kafka__
  - ### Features
    - Amazon MSK has added new APIs that allows multi-VPC private connectivity and cluster policy support for Amazon MSK clusters that simplify connectivity and access between your Apache Kafka clients hosted in different VPCs and AWS accounts and your Amazon MSK clusters.

# __2.20.54__ __2023-04-26__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Exclude static fields from the required fields validation done by the ToBuilderIsCorrect class
        - Contributed by: [@sugmanue](https://github.com/sugmanue)
    - Fixed bug where using profile-based credentials could cause the SDK to read the profile file with each request.

## __Amazon OpenSearch Ingestion__
  - ### Features
    - Initial release for OpenSearch Ingestion

## __Contributors__
Special thanks to the following contributors to this release: 

[@sugmanue](https://github.com/sugmanue)
# __2.20.53__ __2023-04-25__
## __AWS DataSync__
  - ### Features
    - This release adds 13 new APIs to support AWS DataSync Discovery GA.

## __AWS Directory Service__
  - ### Features
    - New field added in AWS Managed Microsoft AD DescribeSettings response and regex pattern update for UpdateSettings value. Added length validation to RemoteDomainName.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Messaging__
  - ### Features
    - Remove non actionable field from UpdateChannelReadMarker and DeleteChannelRequest. Add precise exceptions to DeleteChannel and DeleteStreamingConfigurations error cases.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect, Contact Lens Evaluation API release including ability to manage forms and to submit contact evaluations.

## __Amazon Pinpoint__
  - ### Features
    - Adds support for journey runs and querying journey execution metrics based on journey runs. Adds execution metrics to campaign activities. Updates docs for Advanced Quiet Time.

# __2.20.52__ __2023-04-24__
## __AWS CRT HTTP Client__
  - ### Bugfixes
    - Fixed an issue where connection pool metrics were not reported in the AWS CRT HTTP client.

## __AWS Elemental MediaConvert__
  - ### Features
    - This release introduces a noise reduction pre-filter, linear interpolation deinterlace mode, video pass-through, updated default job settings, and expanded LC-AAC Stereo audio bitrate ranges.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Appflow__
  - ### Features
    - Increased the max length for RefreshToken and AuthCode from 2048 to 4096.

## __Amazon CodeCatalyst__
  - ### Features
    - Documentation updates for Amazon CodeCatalyst.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - API changes to AWS Verified Access related to identity providers' information.

## __Amazon Rekognition__
  - ### Features
    - Added new status result to Liveness session status.

# __2.20.51__ __2023-04-21__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - This release adds a new API CreateParticipant. For Amazon Connect Chat, you can use this new API to customize chat flow experiences.

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation update to address various Amazon ECS tickets.

## __Firewall Management Service__
  - ### Features
    - AWS Firewall Manager adds support for multiple administrators. You can now delegate more than one administrator per organization.

# __2.20.50__ __2023-04-20__
## __AWS IoT__
  - ### Features
    - Support additional OTA states in GetOTAUpdate API

## __AWS SDK for Java v2__
  - ### Features
    - API to Add TrustAllCertificates in CRT S3 Client options for test purposes
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - You can now create encrypted API keys to use in a client application integration of the JavaScript CAPTCHA API . You can also retrieve a list of your API keys and the JavaScript application integration URL.

## __Amazon Chime__
  - ### Features
    - Adds support for Hindi and Thai languages and additional Amazon Transcribe parameters to the StartMeetingTranscription API.

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - This release adds support for specifying the recording file format in an S3 recording sink configuration.

## __Amazon Chime SDK Meetings__
  - ### Features
    - Adds support for Hindi and Thai languages and additional Amazon Transcribe parameters to the StartMeetingTranscription API.

## __Amazon GameLift__
  - ### Features
    - Amazon GameLift supports creating Builds for Windows 2016 operating system.

## __Amazon GuardDuty__
  - ### Features
    - This release adds support for the new Lambda Protection feature.

## __Amazon Import/Export Snowball__
  - ### Features
    - Adds support for Amazon S3 compatible storage. AWS Snow Family customers can now use Amazon S3 compatible storage on Snowball Edge devices. Also adds support for V3_5S. This is a refreshed AWS Snowball Edge Storage Optimized device type with 210TB SSD (customer usable).

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Canvas adds ModelRegisterSettings support for CanvasAppSettings.

# __2.20.49__ __2023-04-19__
## __AWS Resource Access Manager__
  - ### Features
    - This release adds support for customer managed permissions. Customer managed permissions enable customers to author and manage tailored permissions for resources shared using RAM.

## __AWS S3 Control__
  - ### Features
    - Provides support for overriding endpoint when region is "snow". This will enable bucket APIs for Amazon S3 Compatible storage on Snow Family devices.

## __AWS SDK for Java v2__
  - ### Features
    - API to Add TrustAllCertificates in CRT S3 Client options for test purposes
    - Updated endpoint and partition metadata.

## __AWS Secrets Manager__
  - ### Features
    - Documentation updates for Secrets Manager

## __AWS SecurityHub__
  - ### Features
    - Update that adds SDK code examples for Security Hub

## __Amazon Comprehend__
  - ### Features
    - This release supports native document models for custom classification, in addition to plain-text models. You train native document models using documents (PDF, Word, images) in their native format.

## __Amazon EC2 Container Service__
  - ### Features
    - This release supports the Account Setting "TagResourceAuthorization" that allows for enhanced Tagging security controls.

## __Amazon Relational Database Service__
  - ### Features
    - Adds support for the ImageId parameter of CreateCustomDBEngineVersion to RDS Custom for Oracle

## __Amazon Simple Storage Service__
  - ### Features
    - Provides support for "Snow" Storage class.

# __2.20.48__ __2023-04-17__
## __AWS IoT Wireless__
  - ### Features
    - Supports the new feature of LoRaWAN roaming, allows to configure MaxEirp for LoRaWAN gateway, and allows to configure PingSlotPeriod for LoRaWAN multicast group

## __AWS Lambda__
  - ### Features
    - Add Python 3.10 (python3.10) support to AWS Lambda

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Appflow__
  - ### Features
    - This release adds a Client Token parameter to the following AppFlow APIs: Create/Update Connector Profile, Create/Update Flow, Start Flow, Register Connector, Update Connector Registration. The Client Token parameter allows idempotent operations for these APIs.

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - This release includes a new configurable value, TrafficPercentageToMonitor, which allows users to adjust the amount of traffic monitored by percentage

## __Amazon DynamoDB__
  - ### Features
    - Documentation updates for DynamoDB API

## __EMR Serverless__
  - ### Features
    - The GetJobRun API has been updated to include the job's billed resource utilization. This utilization shows the aggregate vCPU, memory and storage that AWS has billed for the job run. The billed resources include a 1-minute minimum usage for workers, plus additional storage over 20 GB per worker.

## __Elastic Disaster Recovery Service__
  - ### Features
    - Changed existing APIs and added new APIs to support using an account-level launch configuration template with AWS Elastic Disaster Recovery.

# __2.20.47__ __2023-04-14__
## __AWS Lambda__
  - ### Features
    - This release adds SnapStart related exceptions to InvokeWithResponseStream API. IAM access related documentation is also added for this API.

## __AWS Migration Hub Refactor Spaces__
  - ### Features
    - Doc only update for Refactor Spaces environments without network bridge feature.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon EC2 Container Service__
  - ### Features
    - This release supports ephemeral storage for AWS Fargate Windows containers.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support of modifying the engine mode of database clusters.

# __2.20.46__ __2023-04-13__
## __AWS MediaConnect__
  - ### Features
    - Gateway is a new feature of AWS Elemental MediaConnect. Gateway allows the deployment of on-premises resources for the purpose of transporting live video to and from the AWS Cloud.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Voice__
  - ### Features
    - This release adds tagging support for Voice Connectors and SIP Media Applications

# __2.20.45__ __2023-04-12__
## __AWS Ground Station__
  - ### Features
    - AWS Ground Station Wideband DigIF GA Release

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Managed Blockchain__
  - ### Features
    - Removal of the Ropsten network. The Ethereum foundation ceased support of Ropsten on December 31st, 2022..

# __2.20.44__ __2023-04-11__
## __AWS IoT__
  - ### Features
    - Re-release to remove unexpected API changes

## __AWS IoT Data Plane__
  - ### Features
    - This release adds support for MQTT5 user properties when calling the AWS IoT GetRetainedMessage API

## __AWS SDK for Java v2__
  - ### Features
    - Exposes endpointOverride in SdkClient through ServiceClientConfiguration
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - For web ACLs that protect CloudFront protections, the default request body inspection size is now 16 KB, and you can use the new association configuration to increase the inspection size further, up to 64 KB. Sizes over 16 KB can incur additional costs.

## __Amazon Elastic Container Registry Public__
  - ### Features
    - This release will allow using registry alias as registryId in BatchDeleteImage request.

## __Amazon EventBridge__
  - ### Features
    - EventBridge PutTarget support for multiple SQL arguments on RedshiftDataParameters

## __EMR Serverless__
  - ### Features
    - This release extends GetJobRun API to return job run timeout (executionTimeoutMinutes) specified during StartJobRun call (or default timeout of 720 minutes if none was specified).

# __2.20.43__ __2023-04-10__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK now supports conversion of 608 paint-on captions to pop-on captions for SCC sources.

## __AWS Marketplace Catalog Service__
  - ### Features
    - Added three new APIs to support resource sharing: GetResourcePolicy, PutResourcePolicy, and DeleteResourcePolicy. Added new OwnershipType field to ListEntities request to let users filter on entities that are shared with them. Increased max page size of ListEntities response from 20 to 50 results.

## __AWS SDK for Java v2__
  - ### Features
    - Expose StandardRetryOptions of S3ClientOptions in the S3CrtClient Interface
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - This release adds the ability to configure an agent's routing profile to receive contacts from multiple channels at the same time via extending the UpdateRoutingProfileConcurrency, CreateRoutingProfile and DescribeRoutingProfile APIs.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support for enabling FIPS compliance on Amazon ECS Fargate tasks

## __Amazon Omics__
  - ### Features
    - Remove unexpected API changes.

## __Amazon Rekognition__
  - ### Features
    - This release adds support for Face Liveness APIs in Amazon Rekognition. Updates UpdateStreamProcessor to return ResourceInUseException Exception. Minor updates to API documentation.

# __2.20.42__ __2023-04-07__
## __AWS Lambda__
  - ### Features
    - This release adds a new Lambda InvokeWithResponseStream API to support streaming Lambda function responses. The release also adds a new InvokeMode parameter to Function Url APIs to control whether the response will be streamed or buffered.

## __AWS Service Catalog__
  - ### Features
    - Updates description for property

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Updated timestamp format for GetLifecyclePolicy API

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - This release adds a new parameter 'DBClusterParameterGroupName' to 'RestoreDBClusterFromSnapshot' API to associate the name of the DB cluster parameter group while performing restore.

## __Amazon DynamoDB Enhanced Client__
  - ### Bugfixes
    - Include flattened mappers in attribute converter resolution
        - Contributed by: [@akiesler](https://github.com/akiesler)

## __Amazon FSx__
  - ### Features
    - Amazon FSx for Lustre now supports creating data repository associations on Persistent_1 and Scratch_2 file systems.

## __Amazon QuickSight__
  - ### Features
    - This release has two changes: adding the OR condition to tag-based RLS rules in CreateDataSet and UpdateDataSet; adding RefreshSchedule and Incremental RefreshProperties operations for users to programmatically configure SPICE dataset ingestions.

## __Amazon S3__
  - ### Features
    - Add support for the following in the CRT S3 client:

       - Enabling/disabling accelerate endpoints
       - Using pathstyle addressing

## __Redshift Data API Service__
  - ### Features
    - Update documentation of API descriptions as needed in support of temporary credentials with IAM identity.

## __Contributors__
Special thanks to the following contributors to this release: 

[@akiesler](https://github.com/akiesler)
# __2.20.41__ __2023-04-06__
## __AWS CloudFormation__
  - ### Features
    - Including UPDATE_COMPLETE as a failed status for DeleteStack waiter.

## __AWS IoT Greengrass V2__
  - ### Features
    - Add support for SUCCEEDED value in coreDeviceExecutionStatus field. Documentation updates for Greengrass V2.

## __AWS Proton__
  - ### Features
    - This release adds support for the AWS Proton service sync feature. Service sync enables managing an AWS Proton service (creating and updating instances) and all of it's corresponding service instances from a Git repository.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Relational Database Service__
  - ### Features
    - Adds and updates the SDK examples

## __Amazon S3__
  - ### Features
    - Adding feature for parsing S3 URIs

# __2.20.40__ __2023-04-05__
## __AWS App Runner__
  - ### Features
    - App Runner adds support for seven new vCPU and memory configurations.

## __AWS Config__
  - ### Features
    - This release adds resourceType enums for types released in March 2023.

## __AWS Network Firewall__
  - ### Features
    - AWS Network Firewall now supports IPv6-only subnets.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS SSO Identity Store__
  - ### Features
    - Documentation updates for Identity Store CLI command reference.

## __AWS Service Catalog__
  - ### Features
    - removed incorrect product type value

## __Amazon EC2 Container Service__
  - ### Features
    - This is a document only updated to add information about Amazon Elastic Inference (EI).

## __Amazon Interactive Video Service RealTime__
  - ### Features
    - Fix ParticipantToken ExpirationTime format

## __Amazon VPC Lattice__
  - ### Features
    - This release removes the entities in the API doc model package for auth policies.

# __2.20.39__ __2023-04-04__
## __AWS Amplify UI Builder__
  - ### Features
    - Support StorageField and custom displays for data-bound options in form builder. Support non-string operands for predicates in collections. Support choosing client to get token from.

## __AWS Data Exchange__
  - ### Features
    - This release updates the value of MaxResults.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - This release rolls back association config feature for webACLs that protect CloudFront protections.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - C6in, M6in, M6idn, R6in and R6idn bare metal instances are powered by 3rd Generation Intel Xeon Scalable processors and offer up to 200 Gbps of network bandwidth.

## __Amazon Elastic Inference__
  - ### Features
    - Updated public documentation for the Describe and Tagging APIs.

## __Amazon SageMaker Runtime__
  - ### Features
    - Amazon SageMaker Asynchronous Inference now provides customers a FailureLocation as a response parameter in InvokeEndpointAsync API to capture the model failure responses.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Asynchronous Inference now allows customer's to receive failure model responses in S3 and receive success/failure model responses in SNS notifications.

## __Auto Scaling__
  - ### Features
    - Documentation updates for Amazon EC2 Auto Scaling

# __2.20.38__ __2023-04-03__
## __AWS Glue__
  - ### Features
    - Add support for database-level federation

## __AWS Lake Formation__
  - ### Features
    - Add support for database-level federation

## __AWS License Manager__
  - ### Features
    - This release adds grant override options to the CreateGrantVersion API. These options can be used to specify grant replacement behavior during grant activation.

## __AWS SDK for Java v2__
  - ### Features
    - Added option of using an explicit `ExecutorService` in `FileAsyncResponseTransformer`
        - Contributed by: [@mpdn](https://github.com/mpdn)
    - Updated endpoint and partition metadata.

## __AWS Service Catalog__
  - ### Features
    - This release introduces Service Catalog support for Terraform open source. It enables 1. The notify* APIs to Service Catalog. These APIs are used by the terraform engine to notify the result of the provisioning engine execution. 2. Adds a new TERRAFORM_OPEN_SOURCE product type in CreateProduct API.

## __AWS WAFV2__
  - ### Features
    - For web ACLs that protect CloudFront protections, the default request body inspection size is now 16 KB, and you can use the new association configuration to increase the inspection size further, up to 64 KB. Sizes over 16 KB can incur additional costs.

## __AmazonMWAA__
  - ### Features
    - This Amazon MWAA release adds the ability to customize the Apache Airflow environment by launching a shell script at startup. This shell script is hosted in your environment's Amazon S3 bucket. Amazon MWAA runs the script before installing requirements and initializing the Apache Airflow process.

## __Contributors__
Special thanks to the following contributors to this release: 

[@mpdn](https://github.com/mpdn)
# __2.20.37__ __2023-03-31__
## __AWS CRT-based S3 client__
  - ### Bugfixes
    - Fixed the issue where AWS CRT-based S3 client was eagerly buffering data before the underlying CRT component was able to handle it. See [#3726](https://github.com/aws/aws-sdk-java-v2/issues/3726)
    - Reduced the buffer used to upload object from 16MB to 1MB.

## __AWS Resilience Hub__
  - ### Features
    - Adding EKS related documentation for appTemplateBody

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Server Migration Service__
  - ### Features
    - Deprecating AWS Server Migration Service.

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - This release adds a new feature for Amazon CloudWatch Internet Monitor that enables customers to deliver internet measurements to Amazon S3 buckets as well as CloudWatch Logs.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Documentation updates for EC2 On Demand Capacity Reservations

## __Amazon SageMaker Feature Store Runtime__
  - ### Features
    - In this release, you can now chose between soft delete and hard delete when calling the DeleteRecord API, so you have more flexibility when it comes to managing online store data.

## __Amazon Simple Storage Service__
  - ### Features
    - Documentation updates for Amazon S3

# __2.20.36__ __2023-03-30__
## __AWS Batch__
  - ### Features
    - This feature allows Batch on EKS to support configuration of Pod Labels through Metadata for Batch on EKS Jobs.

## __AWS Compute Optimizer__
  - ### Features
    - This release adds support for HDD EBS volume types and io2 Block Express. We are also adding support for 61 new instance types and instances that have non consecutive runtime.

## __AWS Glue__
  - ### Features
    - This release adds support for AWS Glue Data Quality, which helps you evaluate and monitor the quality of your data and includes the API for creating, deleting, or updating data quality rulesets, runs and evaluations.

## __AWS Network Firewall__
  - ### Features
    - AWS Network Firewall added TLS inspection configurations to allow TLS traffic inspection.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Well-Architected Tool__
  - ### Features
    - AWS Well-Architected SDK now supports getting consolidated report metrics and generating a consolidated report PDF.

## __AWSKendraFrontendService__
  - ### Features
    - AWS Kendra now supports featured results for a query.

## __Amazon Athena__
  - ### Features
    - Make DefaultExecutorDpuSize and CoordinatorDpuSize fields optional in StartSession

## __Amazon EMR__
  - ### Features
    - Updated DescribeCluster and ListClusters API responses to include ErrorDetail that specifies error code, programmatically accessible error data,and an error message. ErrorDetail provides the underlying reason for cluster failure and recommends actions to simplify troubleshooting of EMR clusters.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for Tunnel Endpoint Lifecycle control, a new feature that provides Site-to-Site VPN customers with better visibility and control of their VPN tunnel maintenance updates.

## __Amazon GuardDuty__
  - ### Features
    - Added EKS Runtime Monitoring feature support to existing detector, finding APIs and introducing new Coverage APIs

## __Amazon Interactive Video Service__
  - ### Features
    - Amazon Interactive Video Service (IVS) now offers customers the ability to configure IVS channels to allow insecure RTMP ingest.

## __Amazon SageMaker geospatial capabilities__
  - ### Features
    - Amazon SageMaker geospatial capabilities now supports server-side encryption with customer managed KMS key and SageMaker notebooks with a SageMaker geospatial image in a Amazon SageMaker Domain with VPC only mode.

## __Amazon VPC Lattice__
  - ### Features
    - General Availability (GA) release of Amazon VPC Lattice

## __Auto Scaling__
  - ### Features
    - Amazon EC2 Auto Scaling now supports Elastic Load Balancing traffic sources with the AttachTrafficSources, DetachTrafficSources, and DescribeTrafficSources APIs. This release also introduces a new activity status, "WaitingForConnectionDraining", for VPC Lattice to the DescribeScalingActivities API.

## __EC2 Image Builder__
  - ### Features
    - Adds support for new image workflow details and image vulnerability detection.

## __Elastic Disaster Recovery Service__
  - ### Features
    - Adding a field to the replication configuration APIs to support the auto replicate new disks feature. We also deprecated RetryDataReplication.

# __2.20.35__ __2023-03-29__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Relational Database Service__
  - ### Features
    - Add support for creating a read replica DB instance from a Multi-AZ DB cluster.

## __OpenSearch Service Serverless__
  - ### Features
    - This release includes two new exception types "ServiceQuotaExceededException" and "OcuLimitExceededException".

# __2.20.34__ __2023-03-28__
## __AWS IoT Data Plane__
  - ### Features
    - Add endpoint ruleset support for cn-north-1.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - A binary attribute value must be encoded in base64 format for its String representation in EnhancedDocument.toJson() API

## __AWS Systems Manager Incident Manager__
  - ### Features
    - Increased maximum length of "TriggerDetails.rawData" to 10K characters and "IncidentSummary" to 8K characters.

## __AWS Systems Manager Incident Manager Contacts__
  - ### Features
    - This release adds 12 new APIs as part of Oncall Schedule feature release, adds support for a new contact type: ONCALL_SCHEDULE. Check public documentation for AWS ssm-contacts for more information

# __2.20.33__ __2023-03-27__
## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports ID3 tag insertion for audio only HLS output groups. AWS Elemental Link devices now support tagging.

## __AWS IoT Wireless__
  - ### Features
    - Introducing new APIs that enable Sidewalk devices to communicate with AWS IoT Core through Sidewalk gateways. This will empower AWS customers to connect Sidewalk devices with other AWS IoT Services, creating possibilities for seamless integration and advanced device management.

## __AWS SecurityHub__
  - ### Features
    - Added new resource detail objects to ASFF, including resources for AwsEksCluster, AWSS3Bucket, AwsEc2RouteTable and AwsEC2Instance.

## __AWS Service Catalog App Registry__
  - ### Features
    - In this release, we started supporting ARN in applicationSpecifier and attributeGroupSpecifier. GetAttributeGroup, ListAttributeGroups and ListAttributeGroupsForApplication APIs will now have CreatedBy field in the response.

## __Amazon Athena__
  - ### Features
    - Enforces a minimal level of encryption for the workgroup for query and calculation results that are written to Amazon S3. When enabled, workgroup users can set encryption only to the minimum level set by the administrator or higher when they submit queries.

## __Amazon Chime SDK Voice__
  - ### Features
    - Documentation updates for Amazon Chime SDK Voice.

## __Amazon Connect Participant Service__
  - ### Features
    - This release provides an update to the SendMessage API to handle interactive message response content-types.

## __Amazon Connect Service__
  - ### Features
    - This release introduces support for RelatedContactId in the StartChatContact API. Interactive message and interactive message response have been added to the list of supported message content types for this API as well.

## __Amazon SageMaker Service__
  - ### Features
    - Fixed some improperly rendered links in SDK documentation.

## __Amazon Voice ID__
  - ### Features
    - Amazon Connect Voice ID now supports multiple fraudster watchlists. Every domain has a default watchlist where all existing fraudsters are placed by default. Custom watchlists may now be created, managed, and evaluated against for known fraudster detection.

# __2.20.32__ __2023-03-24__
## __AWS SDK for Java v2__
  - ### Features
    - Adds ServiceClientConfiguration to SdkClient which exposes client settings to the user
    - Updated endpoint and partition metadata.

## __Amazon CloudWatch__
  - ### Features
    - Doc-only update to correct alarm actions list

## __Amazon Comprehend__
  - ### Features
    - This release adds a new field (FlywheelArn) to the EntitiesDetectionJobProperties object. The FlywheelArn field is returned in the DescribeEntitiesDetectionJob and ListEntitiesDetectionJobs responses when the EntitiesDetection job is started with a FlywheelArn instead of an EntityRecognizerArn .

## __Amazon Relational Database Service__
  - ### Features
    - Added error code CreateCustomDBEngineVersionFault for when the create custom engine version for Custom engines fails.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fix a bug where, if validation of of the amount of expected data to be received (HTTP `Content-Length`) fails, the connection would be left dangling, consuming a connection from the pool until the client is shut down.

# __2.20.31__ __2023-03-23__
## __AWS Batch__
  - ### Features
    - This feature allows Batch to support configuration of ephemeral storage size for jobs running on FARGATE

## __AWS Cloud Map__
  - ### Features
    - Reverted the throttling exception RequestLimitExceeded for AWS Cloud Map APIs introduced in SDK version 1.12.424 2023-03-09 to previous exception specified in the ErrorCode.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK now supports passthrough of ID3v2 tags for audio inputs to audio-only HLS outputs.

## __AWS SDK for Java v2__
  - ### Features
    - Introducing Enhanced Document API: A Higher-Level API for Working with Amazon DynamoDB Items
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Identity__
  - ### Features
    - AppInstanceBots can be used to add a bot powered by Amazon Lex to chat channels. ExpirationSettings provides automatic resource deletion for AppInstanceUsers.

## __Amazon Chime SDK Media Pipelines__
  - ### Features
    - This release adds Amazon Chime SDK call analytics. Call analytics include voice analytics, which provides speaker search and voice tone analysis. These capabilities can be used with Amazon Transcribe and Transcribe Call Analytics to generate machine-learning-powered insights from real-time audio.

## __Amazon Chime SDK Messaging__
  - ### Features
    - ExpirationSettings provides automatic resource deletion for Channels.

## __Amazon Chime SDK Voice__
  - ### Features
    - This release adds Amazon Chime SDK call analytics. Call analytics include voice analytics, which provides speaker search and voice tone analysis. These capabilities can be used with Amazon Transcribe and Transcribe Call Analytics to generate machine-learning-powered insights from real-time audio.

## __Amazon GuardDuty__
  - ### Features
    - Adds AutoEnableOrganizationMembers attribute to DescribeOrganizationConfiguration and UpdateOrganizationConfiguration APIs.

## __Amazon Interactive Video Service RealTime__
  - ### Features
    - Initial release of the Amazon Interactive Video Service RealTime API.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Autopilot adds two new APIs - CreateAutoMLJobV2 and DescribeAutoMLJobV2. Amazon SageMaker Notebook Instances now supports the ml.geospatial.interactive instance type.

## __Amazon Textract__
  - ### Features
    - The AnalyzeDocument - Tables feature adds support for new elements in the API: table titles, footers, section titles, summary cells/tables, and table type.

## __CodeArtifact__
  - ### Features
    - Repository CreationTime is added to the CreateRepository and ListRepositories API responses.

# __2.20.30__ __2023-03-22__
## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for AWS Identity and Access Management (IAM).

## __AWS IoT TwinMaker__
  - ### Features
    - This release adds support of adding metadata when creating a new scene or updating an existing scene.

## __AWS Network Manager__
  - ### Features
    - This release includes an update to create-transit-gateway-route-table-attachment, showing example usage for TransitGatewayRouteTableArn.

## __AWS Resilience Hub__
  - ### Features
    - This release provides customers with the ability to import resources from within an EKS cluster and assess the resiliency of EKS cluster workloads.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon EventBridge Pipes__
  - ### Features
    - This release improves validation on the ARNs in the API model

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This Patch Manager release supports creating, updating, and deleting Patch Baselines for AmazonLinux2023, AlmaLinux.

# __2.20.29__ __2023-03-21__
## __AWS Clean Rooms Service__
  - ### Features
    - GA Release of AWS Clean Rooms, Added Tagging Functionality

## __AWS IoT SiteWise__
  - ### Features
    - Provide support for tagging of data streams and enabling tag based authorization for property alias

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Messaging__
  - ### Features
    - Amazon Chime SDK messaging customers can now manage streaming configuration for messaging data for archival and analysis.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for AWS Network Firewall, AWS PrivateLink, and Gateway Load Balancers to Amazon VPC Reachability Analyzer, and it makes the path destination optional as long as a destination address in the filter at source is provided.

## __Application Migration Service__
  - ### Features
    - This release introduces the Import and export feature and expansion of the post-launch actions

# __2.20.28__ __2023-03-20__
## __AWS CRT-based S3 client__
  - ### Features
    - Exposes `S3CrtHttpConfiguration` to allow users to configure HTTP settings such as proxy and connection timeout on AWS CRT-based S3 client. [#3262](https://github.com/aws/aws-sdk-java-v2/issues/3262)

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Neptune__
  - ### Features
    - This release makes following few changes. db-cluster-identifier is now a required parameter of create-db-instance. describe-db-cluster will now return PendingModifiedValues and GlobalClusterIdentifier fields in the response.

## __Amazon S3 on Outposts__
  - ### Features
    - S3 On Outposts added support for endpoint status, and a failed endpoint reason, if any

## __Amazon WorkDocs__
  - ### Features
    - This release adds a new API, SearchResources, which enable users to search through metadata and content of folders, documents, document versions and comments in a WorkDocs site.

## __Application Auto Scaling__
  - ### Features
    - With this release customers can now tag their Application Auto Scaling registered targets with key-value pairs and manage IAM permissions for all the tagged resources centrally.

# __2.20.27__ __2023-03-17__
## __AWS Config__
  - ### Features
    - This release adds resourceType enums for types released from October 2022 through February 2023.

## __AWS Database Migration Service__
  - ### Features
    - S3 setting to create AWS Glue Data Catalog. Oracle setting to control conversion of timestamp column. Support for Kafka SASL Plain authentication. Setting to map boolean from PostgreSQL to Redshift. SQL Server settings to force lob lookup on inline LOBs and to control access of database logs.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWSBillingConductor__
  - ### Features
    - This release adds a new filter to ListAccountAssociations API and a new filter to ListBillingGroups API.

# __2.20.26__ __2023-03-16__
## __AWS Resource Explorer__
  - ### Features
    - Documentation updates for APIs.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon GuardDuty__
  - ### Features
    - Updated 9 APIs for feature enablement to reflect expansion of GuardDuty to features. Added new APIs and updated existing APIs to support RDS Protection GA.

## __Amazon SageMaker Runtime__
  - ### Features
    - Documentation updates for SageMaker Runtime

# __2.20.25__ __2023-03-15__
## __AWS S3 Control__
  - ### Features
    - Added support for S3 Object Lambda aliases.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Security Lake__
  - ### Features
    - Make Create/Get/ListSubscribers APIs return resource share ARN and name so they can be used to validate the RAM resource share to accept. GetDatalake can be used to track status of UpdateDatalake and DeleteDatalake requests.

## __Migration Hub Strategy Recommendations__
  - ### Features
    - This release adds the binary analysis that analyzes IIS application DLLs on Windows and Java applications on Linux to provide anti-pattern report without configuring access to the source code.

# __2.20.24__ __2023-03-14__
## __AWS Data Exchange__
  - ### Features
    - This release enables data providers to license direct access to S3 objects encrypted with Customer Managed Keys (CMK) in AWS KMS through AWS Data Exchange. Subscribers can use these keys to decrypt, then use the encrypted S3 objects shared with them, without creating or managing copies.

## __AWS Direct Connect__
  - ### Features
    - describe-direct-connect-gateway-associations includes a new status, updating, indicating that the association is currently in-process of updating.

## __AWS Identity and Access Management__
  - ### Features
    - Documentation only updates to correct customer-reported issues

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds a new DnsOptions key (PrivateDnsOnlyForInboundResolverEndpoint) to CreateVpcEndpoint and ModifyVpcEndpoint APIs.

## __Amazon Keyspaces__
  - ### Features
    - Adding support for client-side timestamps

## __Application Auto Scaling__
  - ### Features
    - Application Auto Scaling customers can now use mathematical functions to customize the metric used with Target Tracking policies within the policy configuration itself, saving the cost and effort of publishing the customizations as a separate metric.

# __2.20.23__ __2023-03-13__
## __AWS Lake Formation__
  - ### Features
    - This release updates the documentation regarding Get/Update DataCellsFilter

## __AWS S3 Control__
  - ### Features
    - Added support for cross-account Multi-Region Access Points. Added support for S3 Replication for S3 on Outposts.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Telco Network Builder__
  - ### Features
    - This release adds tagging support to the following Network Instance APIs : Instantiate, Update, Terminate.

## __Amazon AppIntegrations Service__
  - ### Features
    - Adds FileConfiguration to Amazon AppIntegrations CreateDataIntegration supporting scheduled downloading of third party files into Amazon Connect from sources such as Microsoft SharePoint.

## __Amazon Connect Wisdom Service__
  - ### Features
    - This release extends Wisdom CreateKnowledgeBase API to support SharePoint connector type by removing the @required trait for objectField

# __2.20.22__ __2023-03-10__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Secrets Manager__
  - ### Features
    - The type definitions of SecretString and SecretBinary now have a minimum length of 1 in the model to match the exception thrown when you pass in empty values.

## __Amazon Interactive Video Service Chat__
  - ### Features
    - This release adds a new exception returned when calling AWS IVS chat UpdateLoggingConfiguration. Now UpdateLoggingConfiguration can return ConflictException when invalid updates are made in sequence to Logging Configurations.

# __2.20.21__ __2023-03-09__
## __AWS Cloud Map__
  - ### Features
    - Updated all AWS Cloud Map APIs to provide consistent throttling exception (RequestLimitExceeded)

## __AWS Network Manager__
  - ### Features
    - This update provides example usage for TransitGatewayRouteTableArn.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudWatch Evidently__
  - ### Features
    - Updated entity override documentation

## __Amazon Connect Service__
  - ### Features
    - This release adds a new API, GetMetricDataV2, which returns metric data for Amazon Connect.

## __Amazon QuickSight__
  - ### Features
    - This release has two changes: add state persistence feature for embedded dashboard and console in GenerateEmbedUrlForRegisteredUser API; add properties for hidden collapsed row dimensions in PivotTableOptions.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Inference now allows SSM access to customer's model container by setting the "EnableSSMAccess" parameter for a ProductionVariant in CreateEndpointConfig API.

## __Amazon Simple Email Service__
  - ### Features
    - This release introduces a new recommendation in Virtual Deliverability Manager Advisor, which detects missing or misconfigured Brand Indicator for Message Identification (BIMI) DNS records for customer sending identities.

## __CodeArtifact__
  - ### Features
    - This release introduces the generic package format, a mechanism for storing arbitrary binary assets. It also adds a new API, PublishPackageVersion, to allow for publishing generic packages.

## __Redshift Data API Service__
  - ### Features
    - Added support for Redshift Serverless workgroup-arn wherever the WorkgroupName parameter is available.

# __2.20.20__ __2023-03-08__
## __AWS Elemental MediaPackage__
  - ### Features
    - This release provides the date and time live resources were created.

## __AWS Elemental MediaPackage VOD__
  - ### Features
    - This release provides the date and time VOD resources were created.

## __AWS Lake Formation__
  - ### Features
    - This release adds two new API support "GetDataCellsFiler" and "UpdateDataCellsFilter", and also updates the corresponding documentation.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Athena__
  - ### Features
    - A new field SubstatementType is added to GetQueryExecution API, so customers have an error free way to detect the query type and interpret the result.

## __Amazon DynamoDB__
  - ### Features
    - Adds deletion protection support to DynamoDB tables. Tables with deletion protection enabled cannot be deleted. Deletion protection is disabled by default, can be enabled via the CreateTable or UpdateTable APIs, and is visible in TableDescription. This setting is not replicated for Global Tables.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Introducing Amazon EC2 C7g, M7g and R7g instances, powered by the latest generation AWS Graviton3 processors and deliver up to 25% better performance over Graviton2-based instances.

## __Amazon Route 53 Resolver__
  - ### Features
    - Add dual-stack and IPv6 support for Route 53 Resolver Endpoint,Add IPv6 target IP in Route 53 Resolver Forwarding Rule

## __Amazon S3__
  - ### Features
    - Adding PartType field to UploadPartRequest to indicate whether the part is the last part or not.

## __Amazon SageMaker Service__
  - ### Features
    - There needs to be a user identity to specify the SageMaker user who perform each action regarding the entity. However, these is a not a unified concept of user identity across SageMaker service that could be used today.

# __2.20.19__ __2023-03-07__
## __AWS Database Migration Service__
  - ### Features
    - This release adds DMS Fleet Advisor Target Recommendation APIs and exposes functionality for DMS Fleet Advisor. It adds functionality to start Target Recommendation calculation.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Location Service__
  - ### Features
    - Documentation update for the release of 3 additional map styles for use with Open Data Maps: Open Data Standard Dark, Open Data Visualization Light & Open Data Visualization Dark.

# __2.20.18__ __2023-03-06__
## __AWS Account__
  - ### Features
    - AWS Account alternate contact email addresses can now have a length of 254 characters and contain the character "|".

## __Amazon Interactive Video Service__
  - ### Features
    - Updated text description in DeleteChannel, Stream, and StreamSummary.

# __2.20.17__ __2023-03-03__
## __AWS Elemental MediaConvert__
  - ### Features
    - The AWS Elemental MediaConvert SDK has improved handling for different input and output color space combinations.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive adds support for Nielsen watermark timezones.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon DynamoDB__
  - ### Features
    - Documentation updates for DynamoDB.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for a new boot mode for EC2 instances called 'UEFI Preferred'.

## __Amazon Macie 2__
  - ### Features
    - Documentation updates for Amazon Macie

## __Amazon Transcribe Service__
  - ### Features
    - Amazon Transcribe now supports role access for these API operations: CreateVocabulary, UpdateVocabulary, CreateVocabularyFilter, and UpdateVocabularyFilter.

# __2.20.16__ __2023-03-02__
## __AWS IoT__
  - ### Features
    - A recurring maintenance window is an optional configuration used for rolling out the job document to all devices in the target group observing a predetermined start time, duration, and frequency that the maintenance window occurs.

## __AWS Organizations__
  - ### Features
    - This release introduces a new reason code, ACCOUNT_CREATION_NOT_COMPLETE, to ConstraintViolationException in CreateOrganization API.

## __AWS Performance Insights__
  - ### Features
    - This release adds a new field PeriodAlignment to allow the customer specifying the returned timestamp of time periods to be either the start or end time.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon EventBridge Pipes__
  - ### Features
    - This release fixes some input parameter range and patterns.

## __Amazon SageMaker Service__
  - ### Features
    - Add a new field "EndpointMetrics" in SageMaker Inference Recommender "ListInferenceRecommendationsJobSteps" API response.

## __Migration Hub Strategy Recommendations__
  - ### Features
    - This release updates the File Import API to allow importing servers already discovered by customers with reduced pre-requisites.

# __2.20.15__ __2023-03-01__
## __AWS Price List Service__
  - ### Features
    - This release adds 2 new APIs - ListPriceLists which returns a list of applicable price lists, and GetPriceListFileUrl which outputs a URL to retrieve your price lists from the generated file from ListPriceLists

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CodeCatalyst__
  - ### Features
    - Published Dev Environments StopDevEnvironmentSession API

## __Amazon S3 on Outposts__
  - ### Features
    - S3 on Outposts introduces a new API ListOutpostsWithS3, with this API you can list all your Outposts with S3 capacity.

# __2.20.14__ __2023-02-28__
## __AWS Key Management Service__
  - ### Features
    - AWS KMS is deprecating the RSAES_PKCS1_V1_5 wrapping algorithm option in the GetParametersForImport API that is used in the AWS KMS Import Key Material feature. AWS KMS will end support for this wrapping algorithm by October 1, 2023.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Add commons-codec to bom-internal to fix dependency convergence issue. See [#3787](https://github.com/aws/aws-sdk-java-v2/issues/3787)

## __Amazon Comprehend__
  - ### Features
    - Amazon Comprehend now supports flywheels to help you train and manage new model versions for custom models.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release allows IMDS support to be set to v2-only on an existing AMI, so that all future instances launched from that AMI will use IMDSv2 by default.

## __Amazon Lightsail__
  - ### Features
    - This release adds Lightsail for Research feature support, such as GUI session access, cost estimates, stop instance on idle, and disk auto mount.

## __Amazon Managed Blockchain__
  - ### Features
    - This release adds support for tagging to the accessor resource in Amazon Managed Blockchain

## __Amazon Omics__
  - ### Features
    - Minor model changes to accomodate batch imports feature

# __2.20.13__ __2023-02-27__
## __AWS Elemental MediaConvert__
  - ### Features
    - The AWS Elemental MediaConvert SDK has added support for HDR10 to SDR tone mapping, and animated GIF video input sources.

## __AWS Lambda__
  - ### Features
    - This release adds the ability to create ESMs with Document DB change streams as event source. For more information see https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fix race in FlatteningSubscriber where onClose called before items passed to onNext. See [#3734](https://github.com/aws/aws-sdk-java-v2/issues/3734)
        - Contributed by: [@stevenshan](https://github.com/stevenshan)

## __Amazon CloudWatch Internet Monitor__
  - ### Features
    - CloudWatch Internet Monitor is a a new service within CloudWatch that will help application developers and network engineers continuously monitor internet performance metrics such as availability and performance between their AWS-hosted applications and end-users of these applications

## __Amazon DevOps Guru__
  - ### Features
    - This release adds the description field on ListAnomaliesForInsight and DescribeAnomaly API responses for proactive anomalies.

## __Amazon Timestream Write__
  - ### Features
    - This release adds the ability to ingest batched historical data or migrate data in bulk from S3 into Timestream using CSV files.

## __Elastic Disaster Recovery Service__
  - ### Features
    - New fields were added to reflect availability zone data in source server and recovery instance description commands responses, as well as source server launch status.

## __Contributors__
Special thanks to the following contributors to this release: 

[@stevenshan](https://github.com/stevenshan)
# __2.20.12__ __2023-02-24__
## __AWS SecurityHub__
  - ### Features
    - New Security Hub APIs and updates to existing APIs that help you consolidate control findings and enable and disable controls across all supported standards

## __AWS Service Catalog__
  - ### Features
    - Documentation updates for Service Catalog

## __Amazon Connect Cases__
  - ### Features
    - This release adds the ability to delete domains through the DeleteDomain API. For more information see https://docs.aws.amazon.com/cases/latest/APIReference/Welcome.html

## __Amazon Connect Service__
  - ### Features
    - StartTaskContact API now supports linked task creation with a new optional RelatedContactId parameter

## __Amazon Redshift__
  - ### Features
    - Documentation updates for Redshift API bringing it in line with IAM best practices.

# __2.20.11__ __2023-02-23__
## __AWS IoT Wireless__
  - ### Features
    - In this release, we add additional capabilities for the FUOTA which allows user to configure the fragment size, the sending interval and the redundancy ratio of the FUOTA tasks

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - You can now associate an AWS WAF v2 web ACL with an AWS App Runner service.

## __Amazon Appflow__
  - ### Features
    - This release enables the customers to choose whether to use Private Link for Metadata and Authorization call when using a private Salesforce connections

## __Amazon EC2 Container Service__
  - ### Features
    - This release supports deleting Amazon ECS task definitions that are in the INACTIVE state.

## __Amazon GuardDuty__
  - ### Features
    - Updated API and data types descriptions for CreateFilter, UpdateFilter, and TriggerDetails.

## __Amazon Location Service__
  - ### Features
    - This release adds support for using Maps APIs with an API Key in addition to AWS Cognito. This includes support for adding, listing, updating and deleting API Keys.

## __Amazon Macie 2__
  - ### Features
    - This release adds support for a new finding type, Policy:IAMUser/S3BucketSharedWithCloudFront, and S3 bucket metadata that indicates if a bucket is shared with an Amazon CloudFront OAI or OAC.

## __Amazon Managed Grafana__
  - ### Features
    - Doc-only update. Updated information on attached role policies for customer provided roles

# __2.20.10__ __2023-02-22__
## __AWS DataSync__
  - ### Features
    - AWS DataSync has relaxed the minimum length constraint of AccessKey for Object Storage locations to 1.

## __Amazon Chime SDK Voice__
  - ### Features
    - This release introduces support for Voice Connector media metrics in the Amazon Chime SDK Voice namespace

## __Amazon CloudFront__
  - ### Features
    - CloudFront now supports block lists in origin request policies so that you can forward all headers, cookies, or query string from viewer requests to the origin *except* for those specified in the block list.

## __Amazon OpenSearch Service__
  - ### Features
    - This release lets customers configure Off-peak window and software update related properties for a new/existing domain. It enhances the capabilities of StartServiceSoftwareUpdate API; adds 2 new APIs - ListScheduledActions & UpdateScheduledAction; and allows Auto-tune to make use of Off-peak window.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Document only update for Feb 2023

## __CloudWatch RUM__
  - ### Features
    - CloudWatch RUM now supports CloudWatch Custom Metrics

# __2.20.9__ __2023-02-21__
## __AWS Resilience Hub__
  - ### Features
    - In this release we improved resilience hub application creation and maintenance by introducing new resource and app component crud APIs, improving visibility and maintenance of application input sources and added support for additional information attributes to be provided by customers.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Fix race condition that could cause a NullPointerException to be raised from ProfileCredentialsProvider.

## __AWS SecurityHub__
  - ### Features
    - Documentation updates for AWS Security Hub

## __AWS Telco Network Builder__
  - ### Features
    - This is the initial SDK release for AWS Telco Network Builder (TNB). AWS Telco Network Builder is a network automation service that helps you deploy and manage telecom networks.

## __Amazon QuickSight__
  - ### Features
    - S3 data sources now accept a custom IAM role.

# __2.20.8__ __2023-02-20__
## __AWS Audit Manager__
  - ### Features
    - This release introduces a ServiceQuotaExceededException to the UpdateAssessmentFrameworkShare API operation.

## __Amazon Connect Service__
  - ### Features
    - Reasons for failed diff has been approved by SDK Reviewer

# __2.20.7__ __2023-02-17__
## __AWS App Runner__
  - ### Features
    - This release supports removing MaxSize limit for AutoScalingConfiguration.

## __AWS Glue__
  - ### Features
    - Release of Delta Lake Data Lake Format for Glue Studio Service

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

# __2.20.6__ __2023-02-16__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - Added a notice for account takeover prevention (ATP). The interface incorrectly lets you to configure ATP response inspection in regional web ACLs in Region US East (N. Virginia), without returning an error. ATP response inspection is only available in web ACLs that protect CloudFront distributions.

## __Amazon EMR__
  - ### Features
    - This release provides customers the ability to define a timeout period for procuring capacity during a resize operation for Instance Fleet clusters. Customers can specify this timeout using the ResizeSpecifications parameter supported by RunJobFlow, ModifyInstanceFleet and AddInstanceFleet APIs.

## __Amazon Interactive Video Service__
  - ### Features
    - Doc-only update. Updated text description in DeleteChannel, Stream, and StreamSummary.

## __Amazon Managed Grafana__
  - ### Features
    - With this release Amazon Managed Grafana now supports inbound Network Access Control that helps you to restrict user access to your Grafana workspaces

# __2.20.5__ __2023-02-15__
## __AWS CloudTrail__
  - ### Features
    - This release adds an InsufficientEncryptionPolicyException type to the StartImport endpoint

## __AWS Glue__
  - ### Features
    - Fix DirectJDBCSource not showing up in CLI code gen

## __AWS Private 5G__
  - ### Features
    - This release introduces a new StartNetworkResourceUpdate API, which enables return/replacement of hardware from a NetworkSite.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS WAFV2__
  - ### Features
    - For protected CloudFront distributions, you can now use the AWS WAF Fraud Control account takeover prevention (ATP) managed rule group to block new login attempts from clients that have recently submitted too many failed login attempts.

## __Amazon Elastic File System__
  - ### Features
    - Documentation update for EFS to support IAM best practices.

## __Amazon Fraud Detector__
  - ### Features
    - This release introduces Lists feature which allows customers to reference a set of values in Fraud Detector's rules. With Lists, customers can dynamically manage these attributes in real time. Lists can be created/deleted and its contents can be modified using the Fraud Detector API.

## __Amazon Relational Database Service__
  - ### Features
    - Database Activity Stream support for RDS for SQL Server.

# __2.20.4__ __2023-02-14__
## __AWS DataSync__
  - ### Features
    - With this launch, we are giving customers the ability to use older SMB protocol versions, enabling them to use DataSync to copy data to and from their legacy storage arrays.

## __Amazon AppConfig__
  - ### Features
    - AWS AppConfig now offers the option to set a version label on hosted configuration versions. Version labels allow you to identify specific hosted configuration versions based on an alternate versioning scheme that you define.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - With this release customers can turn host maintenance on or off when allocating or modifying a supported dedicated host. Host maintenance is turned on by default for supported hosts.

# __2.20.3__ __2023-02-13__
## __AWS Account__
  - ### Features
    - This release of the Account Management API enables customers to view and manage whether AWS Opt-In Regions are enabled or disabled for their Account. For more information, see https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html

## __AWS AppConfig Data__
  - ### Features
    - AWS AppConfig now offers the option to set a version label on hosted configuration versions. If a labeled hosted configuration version is deployed, its version label is available in the GetLatestConfiguration response.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Keep precedence of options when passed to ProfileFileSupplier.aggregate

## __Amazon Import/Export Snowball__
  - ### Features
    - Adds support for EKS Anywhere on Snowball. AWS Snow Family customers can now install EKS Anywhere service on Snowball Edge Compute Optimized devices.

# __2.20.2__ __2023-02-10__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Service__
  - ### Features
    - This update provides the Wisdom session ARN for contacts enabled for Wisdom in the chat channel.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds support for waiters that automatically poll for an imported snapshot until it reaches the completed state.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds two new neural Japanese voices - Kazuha, Tomoko

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Autopilot adds support for selecting algorithms in CreateAutoMLJob API.

## __Amazon Simple Notification Service__
  - ### Features
    - This release adds support for SNS X-Ray active tracing as well as other updates.

## __Auto Scaling__
  - ### Features
    - You can now either terminate/replace, ignore, or wait for EC2 Auto Scaling instances on standby or protected from scale in. Also, you can also roll back changes from a failed instance refresh.

# __2.20.1__ __2023-02-09__
## __AWS Migration Hub Refactor Spaces__
  - ### Features
    - This release adds support for creating environments with a network fabric type of NONE

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Chime SDK Meetings__
  - ### Features
    - Documentation updates for Chime Meetings SDK

## __Amazon CloudWatch Evidently__
  - ### Features
    - Updated entity overrides parameter to accept up to 2500 overrides or a total of 40KB.

## __Amazon EMR Containers__
  - ### Features
    - EMR on EKS allows configuring retry policies for job runs through the StartJobRun API. Using retry policies, a job cause a driver pod to be restarted automatically if it fails or is deleted. The job's status can be seen in the DescribeJobRun and ListJobRun APIs and monitored using CloudWatch events.

## __Amazon Lex Model Building V2__
  - ### Features
    - AWS Lex now supports Network of Bots.

## __Amazon Lex Runtime V2__
  - ### Features
    - AWS Lex now supports Network of Bots.

## __Amazon Lightsail__
  - ### Features
    - Documentation updates for Lightsail

## __Amazon WorkDocs__
  - ### Features
    - Doc only update for the WorkDocs APIs.

## __Amazon WorkSpaces__
  - ### Features
    - Removed Windows Server 2016 BYOL and made changes based on IAM campaign.

# __2.20.0__ __2023-02-08__
## __AWS Backup__
  - ### Features
    - This release added one attribute (resource name) in the output model of our 9 existing APIs in AWS backup so that customers will see the resource name at the output. No input required from Customers.

## __AWS CRT HTTP Client__
  - ### Features
    - The AWS CRT HTTP Client is now generally available. Visit [Dev Guide](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html) for more information.

## __AWS Glue__
  - ### Features
    - DirectJDBCSource + Glue 4.0 streaming options

## __AWS Lake Formation__
  - ### Features
    - This release removes the LFTagpolicyResource expression limits.

## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon CloudFront__
  - ### Features
    - CloudFront Origin Access Control extends support to AWS Elemental MediaStore origins.

## __Amazon S3__
  - ### Bugfixes
    - Bug fix for Default Md5 checksum was getting skipped even when new http checksum was not set to any checksum algorithm.
