# __2.22.13__ __2024-01-08__
## __AWS CodeBuild__
  - ### Features
    - Aws CodeBuild now supports new compute type BUILD_GENERAL1_XLARGE

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 R7iz bare metal instances are powered by custom 4th generation Intel Xeon Scalable processors.

## __Amazon Route 53 Resolver__
  - ### Features
    - This release adds support for query type configuration on firewall rules that enables customers for granular action (ALLOW, ALERT, BLOCK) by DNS query type.

# __2.22.12__ __2024-01-05__
## __AWS Key Management Service__
  - ### Features
    - Documentation updates for AWS Key Management Service (KMS).

## __Amazon Connect Service__
  - ### Features
    - Minor trait updates for User APIs

## __Amazon Q Connect__
  - ### Features
    - Marked SearchQuickResponses API as readonly.

## __Redshift Serverless__
  - ### Features
    - use_fips_ssl and require_ssl parameter support for Workgroup, UpdateWorkgroup, and CreateWorkgroup

# __2.22.11__ __2024-01-04__
## __AWS Config__
  - ### Features
    - Updated ResourceType enum with new resource types onboarded by AWS Config in November and December 2023.

## __AWS Service Catalog__
  - ### Features
    - Added Idempotency token support to Service Catalog AssociateServiceActionWithProvisioningArtifact, DisassociateServiceActionFromProvisioningArtifact, DeleteServiceAction API

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - Adding PerformanceInsightsEnabled and PerformanceInsightsKMSKeyId fields to DescribeDBInstances Response.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support for managed instance draining which facilitates graceful termination of Amazon ECS instances.

## __Amazon Elasticsearch Service__
  - ### Features
    - This release adds support for new or existing Amazon OpenSearch domains to enable TLS 1.3 or TLS 1.2 with perfect forward secrecy cipher suites for domain endpoints.

## __Amazon Lightsail__
  - ### Features
    - This release adds support to set up an HTTPS endpoint on an instance.

## __Amazon OpenSearch Service__
  - ### Features
    - This release adds support for new or existing Amazon OpenSearch domains to enable TLS 1.3 or TLS 1.2 with perfect forward secrecy cipher suites for domain endpoints.

## __Amazon SageMaker Service__
  - ### Features
    - Adding support for provisioned throughput mode for SageMaker Feature Groups

# __2.22.10__ __2024-01-03__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release includes video engine updates including HEVC improvements, support for ingesting VP9 encoded video in MP4 containers, and support for user-specified 3D LUTs.

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

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect, Contact Lens Evaluation API increase evaluation notes max length to 3072.

# __2.22.9__ __2023-12-29__
## __AWS App Runner__
  - ### Features
    - AWS App Runner adds Python 3.11 and Node.js 18 runtimes.

## __Amazon Location Service__
  - ### Features
    - This release introduces a new parameter to bypasses an API key's expiry conditions and delete the key.

## __Amazon QuickSight__
  - ### Features
    - Add LinkEntityArn support for different partitions; Add UnsupportedUserEditionException in UpdateDashboardLinks API; Add support for New Reader Experience Topics

# __2.22.8__ __2023-12-28__
## __AWS CodeStar connections__
  - ### Features
    - New integration with the GitLab self-managed provider type.

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

  - ### Bugfixes
    - Fix for Signing Error when ampersand character included in HttpQuery when using DefaultAwsCrtV4aSigner.

## __Amazon Kinesis Video Streams Archived Media__
  - ### Features
    - NoDataRetentionException thrown when GetImages requested for a Stream that does not retain data (that is, has a DataRetentionInHours of 0).

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Studio now supports Docker access from within app container

# __2.22.7__ __2023-12-27__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon EMR__
  - ### Features
    - Add support for customers to modify cluster attribute auto-terminate post cluster launch

# __2.22.6__ __2023-12-26__
## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for AWS Identity and Access Management (IAM).

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

# __2.22.5__ __2023-12-22__
## __AWS Glue__
  - ### Features
    - This release adds additional configurations for Query Session Context on the following APIs: GetUnfilteredTableMetadata, GetUnfilteredPartitionMetadata, GetUnfilteredPartitionsMetadata.

## __AWS Lake Formation__
  - ### Features
    - This release adds additional configurations on GetTemporaryGlueTableCredentials for Query Session Context.

## __AWS MediaConnect__
  - ### Features
    - This release adds the DescribeSourceMetadata API. This API can be used to view the stream information of the flow's source.

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

## __AWS Secrets Manager__
  - ### Features
    - Update endpoint rules and examples.

## __Agents for Amazon Bedrock__
  - ### Features
    - Adding Claude 2.1 support to Bedrock Agents

## __Amazon CloudWatch Network Monitor__
  - ### Features
    - CloudWatch Network Monitor is a new service within CloudWatch that will help network administrators and operators continuously monitor network performance metrics such as round-trip-time and packet loss between their AWS-hosted applications and their on-premises locations.

## __Amazon Omics__
  - ### Features
    - Provides minor corrections and an updated description of APIs.

## __Amazon Simple Storage Service__
  - ### Features
    - Added additional examples for some operations.

# __2.22.4__ __2023-12-21__
## __AWS CodeCommit__
  - ### Features
    - AWS CodeCommit now supports customer managed keys from AWS Key Management Service. UpdateRepositoryEncryptionKey is added for updating the key configuration. CreateRepository, GetRepository, BatchGetRepositories are updated with new input or output parameters.

## __AWS Elemental MediaLive__
  - ### Features
    - MediaLive now supports the ability to configure the audio that an AWS Elemental Link UHD device produces, when the device is configured as the source for a flow in AWS Elemental MediaConnect.

## __AWS RDS DataService__
  - ### Features
    - This release adds support for using RDS Data API with Aurora PostgreSQL Serverless v2 and provisioned DB clusters.

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

  - ### Bugfixes
    - Changed the log level from error to warning when exceptions are found in parsing proxy configuration from system properties/environment variables, as we ignore those exceptions and proceed.
    - Fix an issue where the S3 CRT client can incorrectly treat the body of an error response for `GetObject` as the object's content. For example, if a role has permissions for `HeadObject` but not a `GetObject`, the S3 CRT client would download the `403` response as the object's contents.

## __AWS SDK for Java v2 Bundle__
  - ### Bugfixes
    - Fix an issue where external dependencies are also included unshaded in in the `bundle` JAR.

## __Agents for Amazon Bedrock__
  - ### Features
    - This release introduces Amazon Aurora as a vector store on Knowledge Bases for Amazon Bedrock

## __Amazon AppIntegrations Service__
  - ### Features
    - The Amazon AppIntegrations service adds DeleteApplication API for deleting applications, and updates APIs to support third party applications reacting to workspace events and make data requests to Amazon Connect for agent and contact events.

## __Amazon Connect Service__
  - ### Features
    - Adds APIs to manage User Proficiencies and Predefined Attributes. Enhances StartOutboundVoiceContact API input. Introduces SearchContacts API. Enhances DescribeContact API. Adds an API to update Routing Attributes in QueuePriority and QueueTimeAdjustmentSeconds.

## __Amazon Neptune Graph__
  - ### Features
    - Adds Waiters for successful creation and deletion of Graph, Graph Snapshot, Import Task and Private Endpoints for Neptune Analytics

## __Amazon Prometheus Service__
  - ### Features
    - This release updates Amazon Managed Service for Prometheus APIs to support customer managed KMS keys.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for using RDS Data API with Aurora PostgreSQL Serverless v2 and provisioned DB clusters.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Training now provides model training container access for debugging purposes. Amazon SageMaker Search now provides the ability to use visibility conditions to limit resource access to a single domain or multiple domains.

# __2.22.3__ __2023-12-20__
## __AWS MediaTailor__
  - ### Features
    - Adds the ability to configure time shifting on MediaTailor channels using the TimeShiftConfiguration field

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

## __Amazon AppStream__
  - ### Features
    - This release introduces configurable clipboard, allowing admins to specify the maximum length of text that can be copied by the users from their device to the remote session and vice-versa.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Add support for cluster insights, new EKS capability that surfaces potentially upgrade impacting issues.

## __Amazon GuardDuty__
  - ### Features
    - This release 1) introduces a new API: GetOrganizationStatistics , and 2) adds a new UsageStatisticType TOP_ACCOUNTS_BY_FEATURE for GetUsageStatistics API

## __Amazon Managed Blockchain Query__
  - ### Features
    - Adding Confirmation Status and Execution Status to GetTransaction Response.

## __Amazon Route 53__
  - ### Features
    - Amazon Route 53 now supports the Canada West (Calgary) Region (ca-west-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.

# __2.22.2__ __2023-12-19__
## __AWS AppSync__
  - ### Features
    - This release adds additional configurations on GraphQL APIs for limits on query depth, resolver count, and introspection

## __AWS Marketplace Catalog Service__
  - ### Features
    - AWS Marketplace now supports a new API, BatchDescribeEntities, which returns metadata and content for multiple entities.

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

## __Amazon Chime SDK Meetings__
  - ### Features
    - Add meeting features to specify a maximum camera resolution, a maximum content sharing resolution, and a maximum number of attendees for a given meeting.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Provision BYOIPv4 address ranges and advertise them by specifying the network border groups option in Los Angeles, Phoenix and Dallas AWS Local Zones.

## __Amazon FSx__
  - ### Features
    - Added support for FSx for OpenZFS on-demand data replication across AWS accounts and/or regions.Added the IncludeShared attribute for DescribeSnapshots.Added the CopyStrategy attribute for OpenZFSVolumeConfiguration.

## __Amazon Relational Database Service__
  - ### Features
    - RDS - The release adds two new APIs: DescribeDBRecommendations and ModifyDBRecommendation

# __2.22.1__ __2023-12-18__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Cognito Identity Provider__
  - ### Features
    - Amazon Cognito now supports trigger versions that define the fields in the request sent to pre token generation Lambda triggers.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Add support for EKS Cluster Access Management.

## __Amazon QuickSight__
  - ### Features
    - A docs-only release to add missing entities to the API reference.

## __Amazon Route 53 Resolver__
  - ### Features
    - Add DOH protocols in resolver endpoints.

# __2.22.0__ __2023-12-15__
## __AWS CRT HTTP Client__
  - ### Features
    - Release AWS CRT synchrounouse HTTP client. See [#3343](https://github.com/aws/aws-sdk-java-v2/issues/3343)

## __AWS CRT-based S3 Client__
  - ### Bugfixes
    - Make sure all CRT resources are closed when the AWS CRT-based S3 client is closed.

## __AWS Cloud9__
  - ### Features
    - Updated Cloud9 API documentation for AL2023 release

## __AWS Key Management Service__
  - ### Features
    - Documentation updates for AWS Key Management Service

## __AWS SDK for Java v2__
  - ### Features
    - Bump `aws-crt` version to `0.29.1`.
    - If an HTTP client or HTTP client builder is not specified explicitly on the SDK client AND there are multiple HTTP client implementations on the classpath, the SDK will choose the one that has the highest priority instead of throwing exception. ApacheHttpClient and NettyNioAsyncHttpClient have the highest priority in sync and async SDK client respectively for now.
    - Updated endpoint and partition metadata.

## __Amazon Connect Cases__
  - ### Features
    - Increase number of fields that can be included in CaseEventIncludedData from 50 to 200

## __Amazon Connect Service__
  - ### Features
    - Adds relatedContactId field to StartOutboundVoiceContact API input. Introduces PauseContact API and ResumeContact API for Task contacts. Adds pause duration, number of pauses, timestamps for last paused and resumed events to DescribeContact API response. Adds new Rule type and new Rule action.

## __Amazon Relational Database Service__
  - ### Features
    - Updates Amazon RDS documentation by adding code examples

## __Amazon SageMaker Service__
  - ### Features
    - This release 1) introduces a new API: DeleteCompilationJob , and 2) adds InfraCheckConfig for Create/Describe training job API
