# __2.9.26__ __2019-10-23__
## __AWS Security Token Service__
  - ### Features
    - AWS Security Token Service (STS) now supports a regional configuration flag to make the client respect the region without the need for the endpoint parameter.

## __Amazon Connect Service__
  - ### Features
    - This release adds 4 new APIs ListQueues, ListPhoneNumbers, ListContactFlows, and ListHoursOfOperations, which can be used to programmatically list Queues, PhoneNumbers, ContactFlows, and HoursOfOperations configured for an Amazon Connect instance respectively. You can learn more about the new APIs here: https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds new female voices: US Spanish - Lupe and Brazilian Portuguese - Camila; both voices are available in Standard and Neural engine.

# __2.9.25__ __2019-10-22__
## __AWS IoT Events__
  - ### Features
    - Add support for new serial evaluation method for events in a detector model.

## __AWS OpsWorks CM__
  - ### Features
    - AWS OpsWorks for Chef Automate (OWCA) now allows customers to use a custom domain and respective certificate, for their AWS OpsWorks For Chef Automate servers. Customers can now provide a CustomDomain, CustomCertificate and CustomPrivateKey in CreateServer API to configure their Chef Automate servers with a custom domain and certificate.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Better handle `GOAWAY` messages from the remote endpoint.

# __2.9.24__ __2019-10-18__
## __Amazon CloudWatch__
  - ### Features
    - New Period parameter added to MetricDataQuery structure.

## __Netty NIO Http Client__
  - ### Bugfixes
    - Update `HealthCheckedChannelPool` to check `KEEP_ALIVE` when acquiring a channel from the pool to avoid soon-to-be inactive channels being picked up by a new request. This should reduce the frequency of `IOException: Server failed to complete response` errors. See [#1380](https://github.com/aws/aws-sdk-java-v2/issues/1380), [#1466](https://github.com/aws/aws-sdk-java-v2/issues/1466).

# __2.9.23__ __2019-10-17__
## __AWS Batch__
  - ### Features
    - Adding support for Compute Environment Allocation Strategies

## __Amazon Relational Database Service__
  - ### Features
    - Amazon RDS now supports Amazon RDS on VMware with the introduction of APIs related to Custom Availability Zones and Media installation.

# __2.9.22__ __2019-10-16__
## __AWS Marketplace Commerce Analytics__
  - ### Features
    - add 2 more values for the supporting sections - age of past due funds + uncollected funds breakdown

## __AWS RoboMaker__
  - ### Features
    - This release adds support for ROS2 Dashing as a beta feature

## __Managed Streaming for Kafka__
  - ### Features
    - AWS MSK has added support for adding brokers to a cluster.

# __2.9.21__ __2019-10-15__
## __Amazon Kinesis Video Streams Archived Media__
  - ### Features
    - Add ON_DISCONTINUITY mode to the GetHLSStreamingSessionURL API

# __2.9.20__ __2019-10-14__
## __Amazon Personalize__
  - ### Features
    - AWS Personalize: Adds ability to create a solution version using FULL or UPDATE training mode

## __Amazon WorkSpaces__
  - ### Features
    - Documentation updates for WorkSpaces

# __2.9.19__ __2019-10-11__
## __AWS Greengrass__
  - ### Features
    - Greengrass OTA service supports Raspbian/Armv6l platforms.

# __2.9.18__ __2019-10-10__
## __AWS IoT Analytics__
  - ### Features
    - Add `completionTime` to API call ListDatasetContents.

## __AWS SDK for Java v2__
  - ### Features
    - Implement arn parser functions in `arns` module.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - New EC2 M5n, M5dn, R5n, R5dn instances with 100 Gbps network performance and Elastic Fabric Adapter (EFA) for ultra low latency; New A1.metal bare metal instance powered by AWS Graviton Processors

## __Amazon Lex Runtime Service__
  - ### Features
    - Amazon Lex now supports Session API checkpoints

## __Firewall Management Service__
  - ### Features
    - Firewall Manager now supports Amazon VPC security groups, making it easier to configure and manage security groups across multiple accounts from a single place.

# __2.9.17__ __2019-10-09__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for Dolby Atmos encoding, up to 36 outputs, accelerated transcoding with frame capture and preferred acceleration feature.

## __AWS SDK for Java v2__
  - ### Features
    - Expose instance signature through EC2MetadataUtils

  - ### Bugfixes
    - Fix the implementations of `equals(Object)` and `hashCode()` for `DefaultSdkAutoConstructList` and `DefaultSdkAutoConstructMap` so that they follow the Java `equals` and `hashCode` contract. In addition, ensure that these implementations' `toString()` methods return nicely readable results. Fixes [#1445](https://github.com/aws/aws-sdk-java-v2/issues/1445)

## __Amazon ElastiCache__
  - ### Features
    - Amazon ElastiCache now allows you to apply available service updates on demand to your Memcached and Redis Cache Clusters. Features included: (1) Access to the list of applicable service updates and their priorities. (2) Service update monitoring and regular status updates. (3) Recommended apply-by-dates for scheduling the service updates. (4) Ability to stop and later re-apply updates. For more information, see https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/Self-Service-Updates.html and https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Self-Service-Updates.html

## __Managed Streaming for Kafka__
  - ### Features
    - Updated documentation for Amazon Managed Streaming for Kafka service.

# __2.9.16__ __2019-10-08__
## __AWS DataSync__
  - ### Features
    - Add Sync options to enable/disable TaskQueueing

## __AWS Organizations__
  - ### Features
    - Documentation updates for organizations

## __AWS SDK for Java v2__
  - ### Features
    - EC2MetadataUtils: add marketplaceProductCodes inside InstanceInfo's POJO

## __Amazon EventBridge__
  - ### Features
    - Documentation updates for Amazon EventBridge.

## __Amazon Kinesis Firehose__
  - ### Features
    - With this release, you can use Amazon Kinesis Firehose delivery streams to deliver streaming data to Amazon Elasticsearch Service version 7.x clusters. For technical documentation, look for CreateDeliveryStream operation in Amazon Kinesis Firehose API reference.

## __Amazon S3 Control__
  - ### Features
    - Adds support for the Amazon S3 Control service to the SDK.

# __2.9.15__ __2019-10-07__
## __AWS Direct Connect__
  - ### Features
    - This release adds a service provider field for physical connection creation and provides a list of available partner providers for each Direct Connect location.

## __AWS Glue__
  - ### Features
    - AWS Glue now provides ability to use custom certificates for JDBC Connections.

## __Amazon Import/Export Snowball__
  - ### Features
    - AWS Snowball Edge now allows you to perform an offline update to the software of your Snowball Edge device when your device is not connected to the internet. Previously, updating your Snowball Edge's software required that the device be connected to the internet or be sent back to AWS. Now, you can keep your Snowball Edge software up to date even if your device(s) cannot connect to the internet, or are required to run in an air-gapped environment. To complete offline updates, download the software update from a client machine with connection to the internet using the AWS Command Line Interface (CLI). Then, have the Snowball Edge device download and install the software update using the Snowball Edge device API. For more information about offline updates, visit the Snowball Edge documentation page.

## __Amazon Kinesis Firehose__
  - ### Features
    - Amazon Kinesis Data Firehose now allows delivering data to Elasticsearch clusters set up in a different AWS account than the Firehose AWS account. For technical documentation, look for ElasticsearchDestinationConfiguration in the Amazon Kinesis Firehose API reference.

## __Amazon Pinpoint__
  - ### Features
    - This release of the Amazon Pinpoint API introduces support for using and managing message templates.

## __Amazon Pinpoint Email Service__
  - ### Features
    - This release of the Amazon Pinpoint Email API introduces support for using and managing message templates.

# __2.9.14__ __2019-10-04__
## __AWS Elemental MediaPackage__
  - ### Features
    - New Harvest Job APIs to export segment-accurate content windows from MediaPackage Origin Endpoints to S3. See https://docs.aws.amazon.com/mediapackage/latest/ug/harvest-jobs.html for more info

## __Amazon CloudWatch__
  - ### Bugfixes
    - Add cloudwatch specific http configurations, specifically reducing `connectionMaxIdleTime`. Related to [#1380](https://github.com/aws/aws-sdk-java-v2/issues/1380)

## __Amazon Cognito Identity Provider__
  - ### Features
    - This release adds ClientMetadata input parameter to multiple Cognito User Pools operations, making this parameter available to the customer configured lambda triggers as applicable.

## __Amazon S3__
  - ### Bugfixes
    - Add s3 specific http configurations, specifically reducing `connectionMaxIdleTime`. Related to [#1122](https://github.com/aws/aws-sdk-java-v2/issues/1122)

## __Amazon S3 Control__
  - ### Features
    - Adds support for the Amazon S3 Control service to the SDK.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Documentation updates for Systems Manager / StartSession.

# __2.9.13__ __2019-10-03__
## __AWS Device Farm__
  - ### Features
    - Documentation updates for devicefarm

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release allows customers to purchase regional EC2 RIs on a future date.

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service now supports configuring additional options for domain endpoint, such as whether to require HTTPS for all traffic.

## __Application Auto Scaling__
  - ### Features
    - Documentation updates for Application Auto Scaling

# __2.9.12__ __2019-10-02__
## __Amazon Lightsail__
  - ### Features
    - This release adds support for the automatic snapshots add-on for instances and block storage disks.

# __2.9.11__ __2019-10-01__
## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - This release provides support for describe and modify CA certificates.

# __2.9.10__ __2019-09-30__
## __AWS WAF__
  - ### Features
    - Lowering the threshold for Rate Based rule from 2000 to 100.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for creating a Read Replica with Active Directory domain information. This release updates RDS API to indicate whether an OrderableDBInstanceOption supports Kerberos Authentication.

## __AmazonMQ__
  - ### Features
    - Amazon MQ now includes the ability to scale your brokers by changing the host instance type. See the hostInstanceType property of UpdateBrokerInput (https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-model-updatebrokerinput), and pendingHostInstanceType property of DescribeBrokerOutput (https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-model-describebrokeroutput).

# __2.9.9__ __2019-09-27__
## __AWS Amplify__
  - ### Features
    - This release adds access logs APIs and artifact APIs for AWS Amplify Console.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Update the pool size for default async future completion executor service. See [#1251](https://github.com/aws/aws-sdk-java-v2/issues/1251), [#994](https://github.com/aws/aws-sdk-java-v2/issues/994)

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) removes FirelensConfiguration from the DescribeTask output during the FireLens public preview.

# __2.9.8__ __2019-09-26__
## __AWS CodePipeline__
  - ### Features
    - Documentation updates for CodePipeline

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This release updates the AWS Systems Manager Parameter Store PutParameter and LabelParameterVersion APIs to return the "Tier" of parameter created/updated and the "parameter version" labeled respectively.

# __2.9.7__ __2019-09-25__
## __AWS Database Migration Service__
  - ### Features
    - This release adds a new DeleteConnection API to delete the connection between a replication instance and an endpoint. It also adds an optional S3 setting to specify the precision of any TIMESTAMP column values written to an S3 object file in .parquet format.

## __AWS Global Accelerator__
  - ### Features
    - API Update for AWS Global Accelerator to support for DNS aliasing.

## __Amazon SageMaker Service__
  - ### Features
    - Enable G4D and R5 instances in SageMaker Hosting Services

# __2.9.6__ __2019-09-24__
## __AWS Comprehend Medical__
  - ### Features
    - Use Amazon Comprehend Medical to analyze medical text stored in the specified Amazon S3 bucket. Use the console to create and manage batch analysis jobs, or use the batch APIs to detect both medical entities and protected health information (PHI). The batch APIs start, stop, list, and retrieve information about batch analysis jobs. This release also includes DetectEntitiesV2 operation which returns the Acuity and Direction entities as attributes instead of types.

## __AWS DataSync__
  - ### Features
    - Added S3StorageClass, OverwriteMode sync option, and ONLY_FILES_TRANSFERRED setting for the VerifyMode sync option.

## __Amazon Transcribe Service__
  - ### Features
    - With this update Amazon Transcribe enables you to provide an AWS KMS key to encrypt your transcription output.

# __2.9.5__ __2019-09-23__
## __AWS RDS DataService__
  - ### Features
    - RDS Data API now supports Amazon Aurora Serverless PostgreSQL databases.

## __Amazon Redshift__
  - ### Features
    - Adds API operation DescribeNodeConfigurationOptions and associated data structures.

# __2.9.4__ __2019-09-20__
## __AWS Greengrass__
  - ### Features
    - Greengrass OTA service now returns the updated software version in the PlatformSoftwareVersion parameter of a CreateSoftwareUpdateJob response

## __Amazon Elastic Compute Cloud__
  - ### Features
    - G4 instances are Amazon EC2 instances based on NVIDIA T4 GPUs and are designed to provide cost-effective machine learning inference for applications, like image classification, object detection, recommender systems, automated speech recognition, and language translation. G4 instances are also a cost-effective platform for building and running graphics-intensive applications, such as remote graphics workstations, video transcoding, photo-realistic design, and game streaming in the cloud. To get started with G4 instances visit https://aws.amazon.com/ec2/instance-types/g4.

## __Amazon Relational Database Service__
  - ### Features
    - Add a new LeaseID output field to DescribeReservedDBInstances, which shows the unique identifier for the lease associated with the reserved DB instance. AWS Support might request the lease ID for an issue related to a reserved DB instance.

## __Amazon WorkSpaces__
  - ### Features
    - Adds the WorkSpaces restore feature

# __2.9.3__ __2019-09-19__
## __AWS Glue__
  - ### Features
    - AWS Glue DevEndpoints now supports GlueVersion, enabling you to choose Apache Spark 2.4.3 (in addition to Apache Spark 2.2.1). In addition to supporting the latest version of Spark, you will also have the ability to choose between Python 2 and Python 3.

## __AWS MediaConnect__
  - ### Features
    - When you grant an entitlement, you can now specify the percentage of the entitlement data transfer that you want the subscriber to be responsible for.

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for container image manifest digests. This enables you to identify all tasks launched using a container image pulled from ECR in order to correlate what was built with where it is running.

# __2.9.2__ __2019-09-18__
## __AWS Resource Access Manager__
  - ### Features
    - AWS RAM provides a new ListPendingInvitationResources API action that lists the resources in a resource share that is shared with you but that the invitation is still pending for

## __AWS WAF Regional__
  - ### Features
    - Lowering the threshold for Rate Based rule from 2000 to 100.

## __Amazon API Gateway__
  - ### Features
    - Amazon API Gateway simplifies accessing PRIVATE APIs by allowing you to associate one or more Amazon Virtual Private Cloud (VPC) Endpoints to a private API. API Gateway will create and manage DNS alias records necessary for easily invoking the private APIs. With this feature, you can leverage private APIs in web applications hosted within your VPCs.

# __2.9.1__ __2019-09-17__
## __AWS Identity and Access Management__
  - ### Features
    - Documentation updates for iam

## __Amazon Athena__
  - ### Features
    - This release adds DataManifestLocation field indicating the location and file name of the data manifest file. Users can get a list of files that the Athena query wrote or intended to write from the manifest file.

## __Amazon Personalize__
  - ### Features
    - [Personalize] Adds trainingHours to solutionVersion properties.

# __2.9.0__ __2019-09-16__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for multi-DRM SPEKE with CMAF outputs, MP3 ingest, and options for improved video quality.

## __AWS SDK for Java v2__
  - ### Features
    - Bump minor version to `2.9.0-SNAPSHOT` because of [#1413](https://github.com/aws/aws-sdk-java-v2/issues/1413).
    - Updating dependencies versions: jackson 2.9.8 -> 2.9.9, slf4j 1.7.35 -> 1.7.38, netty 4.1.39.Final -> 4.1.41.Final (contains the fix for the performance regression in 4.1.39)

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - This release lets customers add tags to an Amazon EKS cluster. These tags can be used to control access to the EKS API for managing the cluster using IAM. The Amazon EKS TagResource API allows customers to associate tags with their cluster. Customers can list tags for a cluster using the ListTagsForResource API and remove tags from a cluster with the UntagResource API. Note: tags are specific to the EKS cluster resource, they do not propagate to other AWS resources used by the cluster.
