# __2.8.7__ __2019-09-12__
## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports High Efficiency Video Coding (HEVC) for standard-definition (SD), high-definition (HD), and ultra-high-definition (UHD) encoding with HDR support.Encoding with HEVC offers a number of advantages. While UHD video requires an advanced codec beyond H.264 (AVC), high frame rate (HFR) or High Dynamic Range (HDR) content in HD also benefit from HEVC's advancements. In addition, benefits can be achieved with HD and SD content even if HDR and HFR are not needed.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Fix for FleetActivityStatus and FleetStateCode enum

## __Amazon WorkMail Message Flow__
  - ### Features
    - This release allows customers to access email messages as they flow to and from Amazon WorkMail.

## __Elastic Load Balancing__
  - ### Features
    - Documentation updates for elasticloadbalancingv2: This release adds support for TLS SNI on Network Load Balancers

# __2.8.6__ __2019-09-11__
## __AWS Config__
  - ### Features
    - Adding input validation for the OrganizationConfigRuleName string.

## __AWS MediaConnect__
  - ### Features
    - This release adds support for the RIST protocol on sources and outputs.

## __AWS Step Functions__
  - ### Features
    - Fixing letter case in Map history event details to be small case

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for new data fields and log format in VPC flow logs.

## __Amazon Relational Database Service__
  - ### Features
    - This release allows customers to specify a custom parameter group when creating a Read Replica, for DB engines which support this feature.

## __Amazon Simple Email Service__
  - ### Features
    - Updated API documentation to correct broken links, and to update content based on customer feedback.

# __2.8.5__ __2019-09-10__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix marshalling for models with xml attribute. See [#1182](https://github.com/aws/aws-sdk-java-v2/issues/1182)

## __AWS Storage Gateway__
  - ### Features
    - The CloudWatchLogGroupARN parameter of the UpdateGatewayInformation API allows for configuring the gateway to use a CloudWatch log-group where Storage Gateway health events will be logged.

# __2.8.4__ __2019-09-09__
## __AWS App Mesh__
  - ### Features
    - This release adds support for http retry policies.

## __AWS Marketplace Commerce Analytics__
  - ### Features
    - Add FDP+FPS (monthly_revenue_field_demonstration_usage + monthly_revenue_flexible_payment_schedule) to Marketplace Commerce Analytics Service

## __AWS RoboMaker__
  - ### Features
    - Support for Connectivity to Simulation. When you need to interact with the applications in your simulation job, you can connect to your robot application or simulation application with port forwarding. When you configure port forwarding, traffic will be forwarded from the simulation job port to the application port. Port forwarding makes it easy to connect with tools such as ROS Bridge and other tools. This can be useful when you want to debug or run custom tools to interact with your applications.

## __Amazon AppStream__
  - ### Features
    - IamRoleArn support in CreateFleet, UpdateFleet, CreateImageBuilder APIs

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release expands Site-to-Site VPN tunnel options to allow customers to restrict security algorithms and configure timer settings for VPN connections. Customers can specify these new options while creating new VPN connections, or they can modify the tunnel options on existing connections using a new API.

## __Amazon QLDB__
  - ### Features
    - (New Service) Amazon QLDB is a fully managed ledger database that provides a transparent, immutable, and cryptographically verifiable transaction log owned by a central trusted authority. Amazon QLDB is a new class of serverless database that eliminates the need to engage in the complex development effort of building your own ledger-like applications and it automatically scales to support the demands of your application. Introduces Amazon QLDB API operations needed for managing Amazon QLDB ledgers. This includes the ability to manage Amazon QLDB ledgers, cryptographically verify documents, and export the journal in a ledger.

## __Amazon QLDB Session__
  - ### Features
    - (New Service) Amazon QLDB is a fully managed ledger database that provides a transparent, immutable, and cryptographically verifiable transaction log owned by a central trusted authority. Amazon QLDB is a new class of serverless database that eliminates the need to engage in the complex development effort of building your own ledger-like applications and it automatically scales to support the demands of your application. Introduces Amazon QLDB API operations needed for interacting with data in Amazon QLDB ledgers.

# __2.8.3__ __2019-09-06__
## __Amazon Kinesis Analytics__
  - ### Features
    - Documentation updates for kinesisanalytics

# __2.8.2__ __2019-09-05__
## __AWS Config__
  - ### Features
    - AWS Config now includes the option for marking RemediationConfigurations as automatic, removing the need to call the StartRemediationExecution API. Manual control over resource execution rate is also included, and RemediationConfigurations are now ARN addressable. Exceptions to exclude account resources from being remediated can be configured with the new PutRemediationExceptions, DescribeRemediationExceptions, and DeleteRemediationExceptions APIs.

# __2.8.1__ __2019-09-04__
## __AWS Step Functions__
  - ### Features
    - Added support for new history events

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Amazon EKS DescribeCluster API returns a new OIDC issuer field that can be used to create OIDC identity provider for IAM for Service Accounts feature.

## __Amazon Transcribe Service__
  - ### Features
    - MediaFormat is now optional for StartTranscriptionJob API.

# __2.8.0__ __2019-09-03__
## __AWS Resource Groups Tagging API__
  - ### Features
    - Documentation updates for resourcegroupstaggingapi

## __AWS SDK for Java v2__
  - ### Features
    - Bump minor version to 2.8.0-SNAPSHOT because of [#1391](https://github.com/aws/aws-sdk-java-v2/issues/1391).
    - Upgrade Netty version to 4.1.39.Final, netty reactive streams version to 2.0.3, netty open ssl version to 2.0.25.Final

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for attaching Amazon Elastic Inference accelerators to your containers. This enables you to run deep learning inference workloads with hardware acceleration in a more efficient way.

## __Amazon GameLift__
  - ### Features
    - You can now make use of PKI resources to provide more secure connections between your game clients and servers. To learn more, please refer to the public Amazon GameLift documentation.
