# __2.19.33__ __2023-02-07__
## __AWS SDK for Java v2__
  - ### Features
    - - ProfileCredentialsProvider and ProfileTokenProvider can reload credentials when disk profile changes
      - Updated DefaultCredentialsProvider chain for reloading credentials
      - Service support classes store ProfileFile as a Supplier interface
      - SdkClientOption and SdkExecutionAttributes constants for PROFILE_FILE have been deprecated in favor of PROFILE_FILE_SUPPLIER
    - Updated endpoint and partition metadata.

## __AWS Transfer Family__
  - ### Features
    - Updated the documentation for the ImportCertificate API call, and added examples.

# __2.19.32__ __2023-02-06__
## __AWS CRT-based S3 Client__
  - ### Bugfixes
    - Fix an issue where maxConcurrency configured by the user on the builder was not honored.

## __AWS Compute Optimizer__
  - ### Features
    - AWS Compute optimizer can now infer if Kafka is running on an instance.

## __AWS Elemental MediaConvert__
  - ### Features
    - The AWS Elemental MediaConvert SDK has added improved scene change detection capabilities and a bandwidth reduction filter, along with video quality enhancements, to the AVC encoder.

## __AWS Outposts__
  - ### Features
    - Adds OrderType to Order structure. Adds PreviousOrderId and PreviousLineItemId to LineItem structure. Adds new line item status REPLACED. Increases maximum length of pagination token.

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

## __Amazon Connect Customer Profiles__
  - ### Features
    - This release deprecates the PartyType and Gender enum data types from the Profile model and replaces them with new PartyTypeString and GenderString attributes, which accept any string of length up to 255.

## __Amazon Fraud Detector__
  - ### Features
    - My AWS Service (Amazon Fraud Detector) - This release introduces Cold Start Model Training which optimizes training for small datasets and adds intelligent methods for treating unlabeled data. You can now train Online Fraud Insights or Transaction Fraud Insights models with minimal historical-data.

# __2.19.31__ __2023-02-03__
## __AWS Proton__
  - ### Features
    - Add new GetResourcesSummary API

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

## __Amazon Redshift__
  - ### Features
    - Corrects descriptions of the parameters for the API operations RestoreFromClusterSnapshot, RestoreTableFromClusterSnapshot, and CreateCluster.

# __2.19.30__ __2023-02-02__
## __AWS CRT HTTP Client__
  - ### Features
    - Allow users to enable Post Quantum TLS via `AwsCrtAsyncHttpClient.builder().postQuantumTlsEnabled(true).build()`.

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

## __AWS Single Sign-On Admin__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon AppConfig__
  - ### Features
    - AWS AppConfig introduces KMS customer-managed key (CMK) encryption of configuration data, along with AWS Secrets Manager as a new configuration data source. S3 objects using SSE-KMS encryption and SSM Parameter Store SecureStrings are also now supported.

## __Amazon Connect Service__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

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

## __Amazon Keyspaces__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon QuickSight__
  - ### Features
    - QuickSight support for Radar Chart and Dashboard Publish Options

## __Amazon Redshift__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Elastic Load Balancing__
  - ### Features
    - The GWLB Flex Health Check project updates the default values of healthy-threshold-count from 3 to 5 and unhealthy-threshold-count from 3 to 2

# __2.19.29__ __2023-02-01__
## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for AWS Identity and Access Management (IAM).

## __AWS MediaTailor__
  - ### Features
    - The AWS Elemental MediaTailor SDK for Channel Assembly has added support for program updates, and the ability to clip the end of VOD sources in programs.

## __AWS SDK for Java v2__
  - ### Features
    - EC2 Instance Metadata Client is now generally available - https://github.com/aws/aws-sdk-java-v2/issues/61
    - Updated endpoint and partition metadata.

## __Amazon DevOps Guru__
  - ### Features
    - This release adds filter support ListAnomalyForInsight API.

## __Amazon Forecast Service__
  - ### Features
    - This release will enable customer select INCREMENTAL as ImportModel in Forecast's CreateDatasetImportJob API. Verified latest SDK containing required attribute, following https://w.amazon.com/bin/view/AWS-Seer/Launch/Trebuchet/

## __Amazon Simple Notification Service__
  - ### Features
    - Additional attributes added for set-topic-attributes.

# __2.19.28__ __2023-01-31__
## __AWS AppSync__
  - ### Features
    - This release introduces the feature to support EventBridge as AppSync data source.

## __AWS CRT-based S3 Client__
  - ### Bugfixes
    - Fixed an issue where port number was not added to host header. See [#3721](https://github.com/aws/aws-sdk-java-v2/issues/3721) and [#3682](https://github.com/aws/aws-sdk-java-v2/issues/3682).

## __AWS CloudTrail__
  - ### Features
    - Add new "Channel" APIs to enable users to manage channels used for CloudTrail Lake integrations, and "Resource Policy" APIs to enable users to manage the resource-based permissions policy attached to a channel.

## __AWS CloudTrail Data Service__
  - ### Features
    - Add CloudTrail Data Service to enable users to ingest activity events from non-AWS sources into CloudTrail Lake.

## __AWS Ground Station__
  - ### Features
    - DigIF Expansion changes to the Customer APIs.

## __AWS IoT__
  - ### Features
    - Added support for IoT Rules Engine Cloudwatch Logs action batch mode.

## __AWS Outposts__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

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

## __AWS SecurityHub__
  - ### Features
    - New fields have been added to the AWS Security Finding Format. Compliance.SecurityControlId is a unique identifier for a security control across standards. Compliance.AssociatedStandards contains all enabled standards in which a security control is enabled.

## __AWS Support__
  - ### Features
    - This fixes incorrect endpoint construction when a customer is explicitly setting a region.

## __Access Analyzer__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon Connect Participant Service__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This launch allows customers to associate up to 8 IP addresses to their NAT Gateways to increase the limit on concurrent connections to a single destination by eight times from 55K to 440K.

## __Amazon Kinesis__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon OpenSearch Service__
  - ### Features
    - Amazon OpenSearch Service adds the option for a VPC endpoint connection between two domains when the local domain uses OpenSearch version 1.3 or 2.3. You can now use remote reindex to copy indices from one VPC domain to another without a reverse proxy.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds two new neural American English voices - Ruth, Stephen

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Automatic Model Tuning now supports more completion criteria for Hyperparameter Optimization.

## __CodeArtifact__
  - ### Features
    - This release introduces a new DeletePackage API, which enables deletion of a package and all of its versions from a repository.

# __2.19.27__ __2023-01-30__
## __AWS Application Discovery Service__
  - ### Features
    - Update ImportName validation to 255 from the current length of 100

## __AWS CloudFormation__
  - ### Features
    - This feature provides a method of obtaining which regions a stackset has stack instances deployed in.

## __AWS Elemental MediaConvert__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon CloudDirectory__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - We add Prefix Lists as a new route destination option for LocalGatewayRoutes. This will allow customers to create routes to Prefix Lists. Prefix List routes will allow customers to group individual CIDR routes with the same target into a single route.

## __Amazon Simple Workflow Service__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __DynamoDB Enhanced Client__
  - ### Bugfixes
    - Cache BeanTableSchema and ImmutableTableSchema to prevent potential metaspace memory leak with JDK 15+. See [#3701](https://github.com/aws/aws-sdk-java-v2/issues/3701).

## __EC2 Image Builder__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Managed Streaming for Kafka__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

# __2.19.26__ __2023-01-27__
## __AWS Elastic Beanstalk__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __AWS Fault Injection Simulator__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __AWS Greengrass__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __AWS IoT Greengrass V2__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) in SDK.

## __AWS MediaTailor__
  - ### Features
    - This release introduces the As Run logging type, along with API and documentation updates.

## __AWS Outposts__
  - ### Features
    - Adding support for payment term in GetOrder, CreateOrder responses.

## __AWSServerlessApplicationRepository__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon AppStream__
  - ### Features
    - Fixing the issue where Appstream waiters hang for fleet_started and fleet_stopped.

## __Amazon Glacier__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

## __Amazon SageMaker Runtime__
  - ### Features
    - Amazon SageMaker Runtime which supports InvokeEndpointAsync asynchronously can now invoke endpoints with custom timeout values. Asynchronous invocations support longer processing times.

## __Amazon SageMaker Service__
  - ### Features
    - This release supports running SageMaker Training jobs with container images that are in a private Docker registry.

## __Application Auto Scaling__
  - ### Features
    - Enabled FIPS endpoints for GovCloud (US) regions in SDK.

# __2.19.25__ __2023-01-26__
## __AWS CRT HTTP Client__
  - ### Features
    - Throw UnsupportedOperationException if the AWS CRT HTTP Client is configured with HTTP/2 protocol.

  - ### Bugfixes
    - Fix an issue that could result in resource leak when sending request fails due to errors such as invalid request.

## __AWS IoT FleetWise__
  - ### Features
    - Add model validation to BatchCreateVehicle and BatchUpdateVehicle operations that invalidate requests with an empty vehicles list.

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

  - ### Bugfixes
    - Append Content-encoding header instead of over writing the header when Checksum algorithm is selected along with user set Content-encoding

## __Amazon EventBridge__
  - ### Features
    - Minor comments for Redshift Serverless workgroup target support.

## __Amazon Simple Storage Service__
  - ### Features
    - Allow FIPS to be used with path-style URLs.

# __2.19.24__ __2023-01-25__
## __AWS CRT HTTP Client__
  - ### Features
    - Remove CRT connection timeout default

## __AWS CloudFormation__
  - ### Features
    - Enabled FIPS aws-us-gov endpoints in SDK.

## __AWS S3 Control__
  - ### Features
    - Add additional endpoint tests for S3 Control. Fix missing endpoint parameters for PutBucketVersioning and GetBucketVersioning. Prior to this fix, those operations may have resulted in an invalid endpoint being resolved.

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

## __AWS Security Token Service__
  - ### Features
    - Doc only change to update wording in a key topic

## __AWSMainframeModernization__
  - ### Features
    - Add returnCode, batchJobIdentifier in GetBatchJobExecution response, for user to view the batch job execution result & unique identifier from engine. Also removed unused headers from REST APIs

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds new functionality that allows customers to provision IPv6 CIDR blocks through Amazon VPC IP Address Manager (IPAM) as well as allowing customers to utilize IPAM Resource Discovery APIs.

## __Amazon Polly__
  - ### Features
    - Add 5 new neural voices - Sergio (es-ES), Andres (es-MX), Remi (fr-FR), Adriano (it-IT) and Thiago (pt-BR).

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker Inference Recommender now decouples from Model Registry and could accept Model Name to invoke inference recommendations job; Inference Recommender now provides CPU/Memory Utilization metrics data in recommendation output.

## __Redshift Serverless__
  - ### Features
    - Added query monitoring rules as possible parameters for create and update workgroup operations.

# __2.19.23__ __2023-01-24__
## __AWS CRT HTTP Client__
  - ### Features
    - Renamed `readBufferSize` -> `readBufferSizeInBytes`.
    - Renamed: `ConnectionHealthChecksConfiguration` -> `ConnectionHealthConfiguration`
      Renamed: `allowableThroughputFailureInterval` -> `minimumThroughputTimeout`
      Renamed: `minThroughputInBytesPerSecond` -> `minimumThroughputInBps`
      Renamed: `AwsCrtAsyncHttpClient.builder().connectionHealthChecksConfiguration` -> `AwsCrtAsyncHttpClient.builder().connectionHealthConfiguration`

  - ### Removals
    - Removed `tlsCipherPreference`.

## __AWS Glue DataBrew__
  - ### Features
    - Enabled FIPS us-gov-west-1 endpoints in SDK.

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

## __AWS Systems Manager for SAP__
  - ### Features
    - This release provides updates to documentation and support for listing operations performed by AWS Systems Manager for SAP.

## __Amazon Route 53__
  - ### Features
    - Amazon Route 53 now supports the Asia Pacific (Melbourne) Region (ap-southeast-4) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.

# __2.19.22__ __2023-01-23__
## __AWS Lambda__
  - ### Features
    - Release Lambda RuntimeManagementConfig, enabling customers to better manage runtime updates to their Lambda functions. This release adds two new APIs, GetRuntimeManagementConfig and PutRuntimeManagementConfig, as well as support on existing Create/Get/Update function APIs.

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

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Inference now supports P4de instance types.

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

## __Amazon Elastic Compute Cloud__
  - ### Features
    - C6in, M6in, M6idn, R6in and R6idn instances are powered by 3rd Generation Intel Xeon Scalable processors (code named Ice Lake) with an all-core turbo frequency of 3.5 GHz.

## __Amazon Interactive Video Service__
  - ### Features
    - API and Doc update. Update to arns field in BatchGetStreamKey. Also updates to operations and structures.

## __Amazon QuickSight__
  - ### Features
    - This release adds support for data bars in QuickSight table and increases pivot table field well limit.

# __2.19.20__ __2023-01-19__
## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive adds support for SCTE 35 preRollMilliSeconds.

## __AWS Glue__
  - ### Features
    - Release Glue Studio Hudi Data Lake Format for SDK/CLI

## __AWS Ground Station__
  - ### Features
    - Add configurable prepass and postpass times for DataflowEndpointGroup. Add Waiter to allow customers to wait for a contact that was reserved through ReserveContact

## __AWS Panorama__
  - ### Features
    - Added AllowMajorVersionUpdate option to OTAJobConfig to make appliance software major version updates opt-in.

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

## __Amazon Appflow__
  - ### Features
    - Adding support for Salesforce Pardot connector in Amazon AppFlow.

## __Amazon CloudWatch Logs__
  - ### Features
    - Bug fix - Removed the regex pattern validation from CoralModel to avoid potential security issue.

## __Amazon Connect Participant Service__
  - ### Features
    - This release updates Amazon Connect Participant's GetTranscript api to provide transcripts of past chats on a persistent chat session.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect Chat introduces Persistent Chat, allowing customers to resume previous conversations with context and transcripts carried over from previous chats, eliminating the need to repeat themselves and allowing agents to provide personalized service with access to entire conversation history.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds SSM Parameter Resource Aliasing support to EC2 Launch Templates. Launch Templates can now store parameter aliases in place of AMI Resource IDs. CreateLaunchTemplateVersion and DescribeLaunchTemplateVersions now support a convenience flag, ResolveAlias, to return the resolved parameter value.

## __Amazon OpenSearch Service__
  - ### Features
    - This release adds the enhanced dry run option, that checks for validation errors that might occur when deploying configuration changes and provides a summary of these errors, if any. The feature will also indicate whether a blue/green deployment will be required to apply a change.

## __Amazon SageMaker Service__
  - ### Features
    - HyperParameterTuningJobs now allow passing environment variables into the corresponding TrainingJobs

## __CodeArtifact__
  - ### Features
    - Documentation updates for CodeArtifact

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

## __AWS WAFV2__
  - ### Features
    - Improved the visibility of the guidance for updating AWS WAF resources, such as web ACLs and rule groups.

## __Amazon CloudWatch__
  - ### Features
    - Enable cross-account streams in CloudWatch Metric Streams via Observability Access Manager.

## __Amazon Elastic File System__
  - ### Features
    - Documentation updates for EFS access points limit increase

## __Amazon Interactive Video Service Chat__
  - ### Features
    - Updates the range for a Chat Room's maximumMessageRatePerSecond field.

# __2.19.18__ __2023-01-17__
## __AWS Cloud9__
  - ### Features
    - Added minimum value to AutomaticStopTimeMinutes parameter.

## __AWS Network Firewall__
  - ### Features
    - Network Firewall now allows creation of dual stack endpoints, enabling inspection of IPv6 traffic.

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

## __AWSBillingConductor__
  - ### Features
    - This release adds support for SKU Scope for pricing plans.

## __EC2 Image Builder__
  - ### Features
    - Add support for AWS Marketplace product IDs as input during CreateImageRecipe for the parent-image parameter. Add support for listing third-party components.

# __2.19.17__ __2023-01-13__
## __AWS Outposts__
  - ### Features
    - This release adds POWER_30_KVA as an option for PowerDrawKva. PowerDrawKva is part of the RackPhysicalProperties structure in the CreateSite request.

## __AWS Resource Groups__
  - ### Features
    - AWS Resource Groups customers can now turn on Group Lifecycle Events in their AWS account. When you turn this on, Resource Groups monitors your groups for changes to group state or membership. Those changes are sent to Amazon EventBridge as events that you can respond to using rules you create.

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

## __Amazon Connect Service__
  - ### Features
    - This release updates the responses of UpdateContactFlowContent, UpdateContactFlowMetadata, UpdateContactFlowName and DeleteContactFlow API with empty responses.

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

# __2.19.16__ __2023-01-12__
## __AWS Clean Rooms Service__
  - ### Features
    - Initial release of AWS Clean Rooms

## __AWS Elemental MediaConvert__
  - ### Features
    - The AWS Elemental MediaConvert SDK has added support for compact DASH manifest generation, audio normalization using TruePeak measurements, and the ability to clip the sample range in the color corrector.

## __AWS Lambda__
  - ### Features
    - Add support for MaximumConcurrency parameter for SQS event source. Customers can now limit the maximum concurrent invocations for their SQS Event Source Mapping.

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

## __AWS Secrets Manager__
  - ### Features
    - Update documentation for new ListSecrets and DescribeSecret parameters

## __Amazon CloudWatch Logs__
  - ### Features
    - Bug fix: logGroupName is now not a required field in GetLogEvents, FilterLogEvents, GetLogGroupFields, and DescribeLogStreams APIs as logGroupIdentifier can be provided instead

# __2.19.15__ __2023-01-11__
## __AWSKendraFrontendService__
  - ### Features
    - This release adds support to new document types - RTF, XML, XSLT, MS_EXCEL, CSV, JSON, MD

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

  - ### Bugfixes
    - Prevent NullPointerException in Netty exception handler
        - Contributed by: [@sigurjonviktorsson](https://github.com/sigurjonviktorsson)

## __Amazon Location Service__
  - ### Features
    - This release adds support for two new route travel models, Bicycle and Motorcycle which can be used with Grab data source.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for configuring allocated storage on the CreateDBInstanceReadReplica, RestoreDBInstanceFromDBSnapshot, and RestoreDBInstanceToPointInTime APIs.

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

[@sigurjonviktorsson](https://github.com/sigurjonviktorsson)
# __2.19.13__ __2023-01-09__
## __AWS Network Firewall__
  - ### Features
    - Network Firewall now supports the Suricata rule action reject, in addition to the actions pass, drop, and alert.

## __AWS Resource Access Manager__
  - ### Features
    - Enabled FIPS aws-us-gov endpoints in SDK.

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

## __Amazon Elastic Container Registry Public__
  - ### Features
    - This release for Amazon ECR Public makes several change to bring the SDK into sync with the API.

## __Amazon Kendra Intelligent Ranking__
  - ### Features
    - Introducing Amazon Kendra Intelligent Ranking, a new set of Kendra APIs that leverages Kendra semantic ranking capabilities to improve the quality of search results from other search services (i.e. OpenSearch, ElasticSearch, Solr).

## __Amazon WorkSpaces Web__
  - ### Features
    - This release adds support for a new portal authentication type: AWS IAM Identity Center (successor to AWS Single Sign-On).

# __2.19.12__ __2023-01-06__
## __AWS Audit Manager__
  - ### Features
    - This release introduces a new data retention option in your Audit Manager settings. You can now use the DeregistrationPolicy parameter to specify if you want to delete your data when you deregister Audit Manager.

## __AWS Certificate Manager Private Certificate Authority__
  - ### Features
    - Added revocation parameter validation: bucket names must match S3 bucket naming rules and CNAMEs conform to RFC2396 restrictions on the use of special characters in URIs.

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

# __2.19.11__ __2023-01-05__
## __AWS App Runner__
  - ### Features
    - This release adds support of securely referencing secrets and configuration data that are stored in Secrets Manager and SSM Parameter Store by adding them as environment secrets in your App Runner service.

## __AWS SDK for Java v2__
  - ### Features
    - Add `s3-transfer-manager` in `aws-sdk-java` module so that it's included in `bundle`.
    - Updated endpoint and partition metadata.

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

## __Amazon Lightsail__
  - ### Features
    - Documentation updates for Amazon Lightsail.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for specifying which certificate authority (CA) to use for a DB instance's server certificate during DB instance creation, as well as other CA enhancements.

## __AmazonMWAA__
  - ### Features
    - MWAA supports Apache Airflow version 2.4.3.

## __AmplifyBackend__
  - ### Features
    - Updated GetBackendAPIModels response to include ModelIntrospectionSchema json string

## __EMR Serverless__
  - ### Features
    - Adds support for customized images. You can now provide runtime images when creating or updating EMR Serverless Applications.

# __2.19.10__ __2023-01-04__
## __Amazon CloudWatch Logs__
  - ### Features
    - Update to remove sequenceToken as a required field in PutLogEvents calls.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Adding support for QuickSetup Document Type in Systems Manager

## __Application Auto Scaling__
  - ### Features
    - Customers can now use the existing DescribeScalingActivities API to also see the detailed and machine-readable reasons for Application Auto Scaling not scaling their resources and, if needed, take the necessary corrective actions.

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

## __Amazon Security Lake__
  - ### Features
    - Allow CreateSubscriber API to take string input that allows setting more descriptive SubscriberDescription field. Make souceTypes field required in model level for UpdateSubscriberRequest as it is required for every API call on the backend. Allow ListSubscribers take any String as nextToken param.

# __2.19.8__ __2022-12-30__
## __AWS IoT FleetWise__
  - ### Features
    - Update documentation - correct the epoch constant value of default value for expiryTime field in CreateCampaign request.

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

## __Amazon CloudFront__
  - ### Features
    - Extend response headers policy to support removing headers from viewer responses

# __2.19.7__ __2022-12-29__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __AWS Secrets Manager__
  - ### Features
    - Added owning service filter, include planned deletion flag, and next rotation date response parameter in ListSecrets.

## __Amazon API Gateway__
  - ### Features
    - Documentation updates for Amazon API Gateway

## __Amazon Connect Wisdom Service__
  - ### Features
    - This release extends Wisdom CreateContent and StartContentUpload APIs to support PDF and MicrosoftWord docx document uploading.

## __Amazon EMR__
  - ### Features
    - Added GetClusterSessionCredentials API to allow Amazon SageMaker Studio to connect to EMR on EC2 clusters with runtime roles and AWS Lake Formation-based access control for Apache Spark, Apache Hive, and Presto queries.

# __2.19.6__ __2022-12-28__
## __AWS Network Firewall__
  - ### Features
    - AWS Network Firewall now provides status messages for firewalls to help you troubleshoot when your endpoint fails.

## __AWS Route53 Recovery Control Config__
  - ### Features
    - Added support for Python paginators in the route53-recovery-control-config List* APIs.

## __Amazon ElastiCache__
  - ### Features
    - This release allows you to modify the encryption in transit setting, for existing Redis clusters. You can now change the TLS configuration of your Redis clusters without the need to re-build or re-provision the clusters or impact application availability.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for Custom Engine Version (CEV) on RDS Custom SQL Server.

# __2.19.5__ __2022-12-27__
## __AWS Transfer Family__
  - ### Features
    - Add additional operations to throw ThrottlingExceptions

## __Amazon MemoryDB__
  - ### Features
    - This release adds support for MemoryDB Reserved nodes which provides a significant discount compared to on-demand node pricing. Reserved nodes are not physical nodes, but rather a billing discount applied to the use of on-demand nodes in your account.

# __2.19.4__ __2022-12-23__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

## __Amazon Connect Participant Service__
  - ### Features
    - Amazon Connect Chat introduces the Message Receipts feature. This feature allows agents and customers to receive message delivered and read receipts after they send a chat message.

## __Amazon Connect Service__
  - ### Features
    - Support for Routing Profile filter, SortCriteria, and grouping by Routing Profiles for GetCurrentMetricData API. Support for RoutingProfiles, UserHierarchyGroups, and Agents as filters, NextStatus and AgentStatusName for GetCurrentUserData. Adds ApproximateTotalCount to both APIs.

## __Amazon Detective__
  - ### Features
    - This release adds a missed AccessDeniedException type to several endpoints.

## __Amazon FSx__
  - ### Features
    - Fix a bug where a recent release might break certain existing SDKs.

## __Inspector2__
  - ### Features
    - Amazon Inspector adds support for scanning NodeJS 18.x and Go 1.x AWS Lambda function runtimes.

# __2.19.3__ __2022-12-22__
## __AWS Compute Optimizer__
  - ### Features
    - This release enables AWS Compute Optimizer to analyze and generate optimization recommendations for ecs services running on Fargate.

## __AWS IoT Core Device Advisor__
  - ### Features
    - This release adds the following new features: 1) Documentation updates for IoT Device Advisor APIs. 2) Updated required request parameters for IoT Device Advisor APIs. 3) Added new service feature: ability to provide the test endpoint when customer executing the StartSuiteRun API.

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

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

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect Chat introduces the Idle Participant/Autodisconnect feature, which allows users to set timeouts relating to the activity of chat participants, using the new UpdateParticipantRoleConfig API.

## __Amazon Kinesis Video WebRTC Storage__
  - ### Features
    - Amazon Kinesis Video Streams offers capabilities to stream video and audio in real-time via WebRTC to the cloud for storage, playback, and analytical processing. Customers can use our enhanced WebRTC SDK and cloud APIs to enable real-time streaming, as well as media ingestion to the cloud.

## __Amazon Relational Database Service__
  - ### Features
    - Add support for managing master user password in AWS Secrets Manager for the DBInstance and DBCluster.

# __2.19.2__ __2022-12-21__
## __AWS License Manager Linux Subscriptions__
  - ### Features
    - AWS License Manager now offers cross-region, cross-account tracking of commercial Linux subscriptions on AWS. This includes subscriptions purchased as part of EC2 subscription-included AMIs, on the AWS Marketplace, or brought to AWS via Red Hat Cloud Access Program.

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

## __AWS Support__
  - ### Features
    - Documentation updates for the AWS Support API

## __AWS Transfer Family__
  - ### Features
    - This release adds support for Decrypt as a workflow step type.

## __Amazon Connect Participant Service__
  - ### Features
    - Amazon Connect Chat now allows for JSON (application/json) message types to be sent in the SendMessage API.

## __Amazon Connect Service__
  - ### Features
    - Amazon Connect Chat now allows for JSON (application/json) message types to be sent as part of the initial message in the StartChatContact API.

## __Amazon EventBridge Scheduler__
  - ### Features
    - Updated the ListSchedules and ListScheduleGroups APIs to allow the NamePrefix field to start with a number. Updated the validation for executionRole field to support any role name.

## __Amazon Macie 2__
  - ### Features
    - This release adds support for analyzing Amazon S3 objects that use the S3 Glacier Instant Retrieval (Glacier_IR) storage class.

## __Amazon SageMaker Service__
  - ### Features
    - This release enables adding RStudio Workbench support to an existing Amazon SageMaker Studio domain. It allows setting your RStudio on SageMaker environment configuration parameters and also updating the RStudioConnectUrl and RStudioPackageManagerUrl parameters for existing domains

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Doc-only updates for December 2022.

# __2.19.1__ __2022-12-20__
## __AWS Batch__
  - ### Features
    - Adds isCancelled and isTerminated to DescribeJobs response.

## __AWS Elemental MediaLive__
  - ### Features
    - This release adds support for two new features to AWS Elemental MediaLive. First, you can now burn-in timecodes to your MediaLive outputs. Second, we now now support the ability to decode Dolby E audio when it comes in on an input.

## __AWS Resource Explorer__
  - ### Features
    - Documentation updates for AWS Resource Explorer.

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

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Adds support for pagination in the EC2 DescribeImages API.

## __Amazon Lookout for Equipment__
  - ### Features
    - This release adds support for listing inference schedulers by status.

## __Amazon Route 53 Domains__
  - ### Features
    - Use Route 53 domain APIs to change owner, create/delete DS record, modify IPS tag, resend authorization. New: AssociateDelegationSignerToDomain, DisassociateDelegationSignerFromDomain, PushDomain, ResendOperationAuthorization. Updated: UpdateDomainContact, ListOperations, CheckDomainTransferability.

## __Amazon S3 Transfer Manager__
  - ### Bugfixes
    - Add `s3-transfer-manager` to bom so that users can use bom to manage its version.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Autopilot adds support for new objective metrics in CreateAutoMLJob API.

## __Amazon Transcribe Service__
  - ### Features
    - Enable our batch transcription jobs for Swedish and Vietnamese.

## __AmazonNimbleStudio__
  - ### Features
    - Amazon Nimble Studio now supports configuring session storage volumes and persistence, as well as backup and restore sessions through launch profiles.

# __2.19.0__ __2022-12-19__
## __AWS SDK for Java v2__
  - ### Features
    - Updated endpoint and partition metadata.

  - ### Bugfixes
    - Include the raw `partitions.json` data as a string within `DefaultPartitionDataProvider` so it doesn't need to be loaded at runtime as a classpath resource.

## __Amazon Athena__
  - ### Features
    - Add missed InvalidRequestException in GetCalculationExecutionCode,StopCalculationExecution APIs. Correct required parameters (Payload and Type) in UpdateNotebook API. Change Notebook size from 15 Mb to 10 Mb.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support for alarm-based rollbacks in ECS, a new feature that allows customers to add automated safeguards for Amazon ECS service rolling updates.

## __Amazon Kinesis Video Streams__
  - ### Features
    - Amazon Kinesis Video Streams offers capabilities to stream video and audio in real-time via WebRTC to the cloud for storage, playback, and analytical processing. Customers can use our enhanced WebRTC SDK and cloud APIs to enable real-time streaming, as well as media ingestion to the cloud.

## __Amazon Kinesis Video WebRTC Storage__
  - ### Features
    - Amazon Kinesis Video Streams offers capabilities to stream video and audio in real-time via WebRTC to the cloud for storage, playback, and analytical processing. Customers can use our enhanced WebRTC SDK and cloud APIs to enable real-time streaming, as well as media ingestion to the cloud.

## __Amazon Relational Database Service__
  - ### Features
    - Add support for --enable-customer-owned-ip to RDS create-db-instance-read-replica API for RDS on Outposts.

## __Amazon S3 Transfer Manager__
  - ### Features
    - The Amazon S3 Transfer Manager is now generally available. Visit [Dev Guide](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/transfer-manager.html) for more information,

## __Amazon SageMaker Service__
  - ### Features
    - AWS Sagemaker - Sagemaker Images now supports Aliases as secondary identifiers for ImageVersions. SageMaker Images now supports additional metadata for ImageVersions for better images management.
