# __2.7.36__ __2019-08-30__
## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for modifying the cluster settings for existing clusters, which enables you to toggle whether Container Insights is enabled or not. Support is also introduced for custom log routing using the ECS FireLens integration.

## __AmazonApiGatewayManagementApi__
  - ### Features
    - You can use getConnection to return information about the connection (when it is connected, IP address, etc) and deleteConnection to disconnect the given connection

## __AmazonMQ__
  - ### Features
    - Adds support for updating security groups selection of an Amazon MQ broker.

# __2.7.35__ __2019-08-29__
## __AWS CodePipeline__
  - ### Features
    - Introducing pipeline execution trigger details in ListPipelineExecutions API.

## __AWS Lambda__
  - ### Features
    - Adds a "MaximumBatchingWindowInSeconds" parameter to event source mapping api's. Usable by Dynamodb and Kinesis event sources.

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for including Docker container IDs in the API response when describing and stopping tasks. This enables customers to easily map containers to the tasks they are associated with.

## __Amazon ElastiCache__
  - ### Features
    - Amazon ElastiCache for Redis now supports encryption at rest using customer managed customer master keys (CMKs) in AWS Key Management Service (KMS). Amazon ElastiCache now supports cluster names upto 40 characters for replicationGoups and upto 50 characters for cacheClusters.

## __Application Auto Scaling__
  - ### Features
    - With the current release, you can suspend and later resume any of the following scaling actions in Application Auto Scaling: scheduled scaling actions, dynamic scaling in actions, dynamic scaling out actions.

# __2.7.34__ __2019-08-28__
## __AWS Elemental MediaConvert__
  - ### Features
    - This release adds the ability to send a job to an on-demand queue while simulating the performance of a job sent to a reserved queue. Use this setting to estimate the number of reserved transcoding slots (RTS) you need for a reserved queue.

## __AWS Global Accelerator__
  - ### Features
    - API Update for AWS Global Accelerator Client IP Preservation

## __Amazon Simple Queue Service__
  - ### Features
    - Added support for message system attributes, which currently lets you send AWS X-Ray trace IDs through Amazon SQS.

# __2.7.33__ __2019-08-27__
## __AWS Organizations__
  - ### Features
    - Documentation updates for organizations

# __2.7.32__ __2019-08-26__
## __AWS SecurityHub__
  - ### Features
    - This release resolves an issue with the DescribeHub action, changes the MasterId and InvitationId parameters for AcceptInvitation to Required, and changes the AccountIds parameter for DeleteInvitations and DeclineInvitations to Required.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This feature adds "default tier" to the AWS Systems Manager Parameter Store for parameter creation and update. AWS customers can now set the "default tier" to one of the following values: Standard (default), Advanced or Intelligent-Tiering. This allows customers to create advanced parameters or parameters in corresponding tiers with one setting rather than code change to specify parameter tiers.

# __2.7.31__ __2019-08-23__
## __AWS Elemental MediaPackage VOD__
  - ### Features
    - Adds optional Constant Initialization Vector (IV) to HLS Encryption for MediaPackage VOD.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release of EC2 VM Import Export adds support for exporting Amazon Machine Image(AMI)s to a VM file

## __Amazon Transcribe Service__
  - ### Features
    - Amazon Transcribe - support transcriptions from audio sources in Russian (ru-RU) and Chinese (zh-CN).

# __2.7.30__ __2019-08-22__
## __AWS DataSync__
  - ### Features
    - This release adds support for SMB location type.

## __Amazon Relational Database Service__
  - ### Features
    - This release allows users to enable RDS Data API while creating Aurora Serverless databases.

# __2.7.29__ __2019-08-21__
## __Amazon DynamoDB__
  - ### Features
    - Public preview version of 'dynamodb-enhanced' that has a new DynamoDb mapper library that can be used with the v2 SDK. See README.md in the module for more detailed information about this module.

## __Amazon ElastiCache__
  - ### Features
    - ElastiCache extends support for Scale down for Redis Cluster-mode enabled and disabled replication groups

## __Amazon Forecast Query Service__
  - ### Features
    - Amazon Forecast is a fully managed machine learning service that makes it easy for customers to generate accurate forecasts using their historical time-series data

## __Amazon Forecast Service__
  - ### Features
    - Amazon Forecast is a fully managed machine learning service that makes it easy for customers to generate accurate forecasts using their historical time-series data

## __Amazon Personalize Runtime__
  - ### Features
    - Increased limits on number of items recommended and reranked: The maximum number of results returned from getRecommendations API has been increased to 200. The maximum number of items which can be reranked via getPersonalizedRanking API has been increased to 200.

## __Amazon Rekognition__
  - ### Features
    - Documentation updates for Amazon Rekognition.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker now supports Amazon EFS and Amazon FSx for Lustre file systems as data sources for training machine learning models. Amazon SageMaker now supports running training jobs on ml.p3dn.24xlarge instance type. This instance type is offered as a limited private preview for certain SageMaker customers. If you are interested in joining the private preview, please reach out to the SageMaker Product Management team via AWS Support."

## __Amazon Simple Queue Service__
  - ### Features
    - This release provides a way to add metadata tags to a queue when it is created. You can use tags to organize and identify your Amazon SQS queues for cost allocation.

## __Apache HTTP Client__
  - ### Features
    - Enable TLS client authentication support for the Apache HTTP Client by allowing customers to specify a `TlsKeyManagersProvider` on the builder. The `KeyManger`s provided will be used when the remote server wants to authenticate the client.

## __HTTP Client SPI__
  - ### Features
    - Add `TlsKeyManagersProvider` interface for supporting TLS client auth in HTTP client implementations.

## __Netty NIO HTTP Client__
  - ### Features
    - Add ability to to use HTTP proxies with the Netty async client.

# __2.7.28__ __2019-08-20__
## __AWS Transfer for SFTP__
  - ### Features
    - New field in response of TestIdentityProvider

## __Alexa For Business__
  - ### Features
    - Adding support for optional locale input in CreateProfile and UpdateProfile APIs

## __Amazon AppStream__
  - ### Features
    - Includes API updates to support streaming through VPC endpoints for image builders and stacks.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker introduces Managed Spot Training. Increases the maximum number of metric definitions to 40 for SageMaker Training and Hyperparameter Tuning Jobs. SageMaker Neo adds support for Acer aiSage and Qualcomm QCS605 and QCS603.

# __2.7.27__ __2019-08-19__
## __AWS App Mesh__
  - ### Features
    - Fix for HttpMethod enum

## __AWS Cost and Usage Report Service__
  - ### Features
    - New IAM permission required for editing AWS Cost and Usage Reports - Starting today, you can allow or deny IAM users permission to edit Cost & Usage Reports through the API and the Billing and Cost Management console. To allow users to edit Cost & Usage Reports, ensure that they have 'cur: ModifyReportDefinition' permission. Refer to the technical documentation (https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_cur_ModifyReportDefinition.html) for additional details.

# __2.7.26__ __2019-08-16__
## __AWS RoboMaker__
  - ### Features
    - Two feature release: 1. AWS RoboMaker introduces log-based simulation. Log-based simulation allows you to play back pre-recorded log data such as sensor streams for testing robotic functions like localization, mapping, and object detection. Use the AWS RoboMaker SDK to test your robotic applications. 2. AWS RoboMaker allow customer to setup a robot deployment timeout when CreateDeploymentJob.

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for controlling the usage of swap space on a per-container basis for Linux containers.

## __Amazon Elastic MapReduce__
  - ### Features
    - Amazon EMR has introduced an account level configuration called Block Public Access that allows you to block clusters with ports open to traffic from public IP sources (i.e. 0.0.0.0/0 for IPv4 and ::/0 for IPv6) from launching. Individual ports or port ranges can be added as exceptions to allow public access.

# __2.7.25__ __2019-08-15__
## __AWS App Mesh__
  - ### Features
    - This release adds support for http header based routing and route prioritization.

## __AWS CodeCommit__
  - ### Features
    - This release adds an API, BatchGetCommits, that allows retrieval of metadata for multiple commits in an AWS CodeCommit repository.

## __AWS Glue__
  - ### Features
    - GetJobBookmarks API is withdrawn.

## __AWS Storage Gateway__
  - ### Features
    - CreateSnapshotFromVolumeRecoveryPoint API supports new parameter: Tags (to be attached to the created resource)

## __Amazon Athena__
  - ### Features
    - This release adds support for querying S3 Requester Pays buckets. Users can enable this feature through their Workgroup settings.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds an option to use private certificates from AWS Certificate Manager (ACM) to authenticate a Site-to-Site VPN connection's tunnel endpoints and customer gateway device.

# __2.7.24__ __2019-08-14__
## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds a new API called SendDiagnosticInterrupt, which allows you to send diagnostic interrupts to your EC2 instance.

# __2.7.23__ __2019-08-13__
## __AWS AppSync__
  - ### Features
    - Adds a configuration option for AppSync GraphQL APIs

# __2.7.22__ __2019-08-12__
## __Amazon CloudWatch__
  - ### Features
    - Documentation updates for monitoring

## __Amazon Rekognition__
  - ### Features
    - Adding new Emotion, Fear

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

## __Auto Scaling__
  - ### Features
    - Amazon EC2 Auto Scaling now supports a new Spot allocation strategy "capacity-optimized" that fulfills your request using Spot Instance pools that are optimally chosen based on the available Spot capacity.

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

## __AWS IoT__
  - ### Features
    - This release adds Quality of Service (QoS) support for AWS IoT rules engine republish action.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fixed the issue where ByteArrayAsyncRequestBody can send duplicate requests when another request comes in at the same time the subscription completes.
    - For APIs that support input event streams, set the `Content-Type` to `application/vnd.amazon.eventstream` on the request.

## __Amazon GuardDuty__
  - ### Features
    - New "evidence" field in the finding model to provide evidence information explaining why the finding has been triggered. Currently only threat-intelligence findings have this field. Some documentation updates.

## __Amazon Lex Runtime Service__
  - ### Features
    - Manage Amazon Lex session state using APIs on the client

## __Amazon Redshift__
  - ### Features
    - Add expectedNextSnapshotScheduleTime and expectedNextSnapshotScheduleTimeStatus to redshift cluster object.

# __2.7.20__ __2019-08-08__
## __AWS CodeBuild__
  - ### Features
    - CodeBuild adds CloudFormation support for SourceCredential

## __AWS Glue__
  - ### Features
    - You can now use AWS Glue to find matching records across dataset even without identifiers to join on by using the new FindMatches ML Transform. Find related products, places, suppliers, customers, and more by teaching a custom machine learning transformation that you can use to identify matching matching records as part of your analysis, data cleaning, or master data management project by adding the FindMatches transformation to your Glue ETL Jobs. If your problem is more along the lines of deduplication, you can use the FindMatches in much the same way to identify customers who have signed up more than ones, products that have accidentally been added to your product catalog more than once, and so forth. Using the FindMatches MLTransform, you can teach a Transform your definition of a duplicate through examples, and it will use machine learning to identify other potential duplicates in your dataset. As with data integration, you can then use your new Transform in your deduplication projects by adding the FindMatches transformation to your Glue ETL Jobs. This release also contains additional APIs that support AWS Lake Formation.

## __AWS Lake Formation__
  - ### Features
    - Lake Formation: (New Service) AWS Lake Formation is a fully managed service that makes it easier for customers to build, secure and manage data lakes. AWS Lake Formation simplifies and automates many of the complex manual steps usually required to create data lakes including collecting, cleaning and cataloging data and securely making that data available for analytics and machine learning.

## __AWS OpsWorks CM__
  - ### Features
    - This release adds support for Chef Automate 2 specific engine attributes.

# __2.7.19__ __2019-08-07__
## __Amazon CloudWatch Application Insights__
  - ### Features
    - CloudWatch Application Insights for .NET and SQL Server now provides integration with AWS Systems Manager OpsCenter. This integration allows you to view and resolve problems and operational issues detected for selected applications.

# __2.7.18__ __2019-08-06__
## __AWS Batch__
  - ### Features
    - Documentation updates for AWS Batch

# __2.7.17__ __2019-08-05__
## __AWS DataSync__
  - ### Features
    - Support VPC endpoints.

## __AWS IoT__
  - ### Features
    - In this release, AWS IoT Device Defender introduces audit mitigation actions that can be applied to audit findings to help mitigate security issues.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 now supports a new Spot allocation strategy "Capacity-optimized" that fulfills your request using Spot Instance pools that are optimally chosen based on the available Spot capacity.

# __2.7.16__ __2019-08-02__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix the issue where the `content-length` set on the request is not honored for streaming operations.

## __AWS Security Token Service__
  - ### Features
    - Documentation updates for sts

# __2.7.15__ __2019-07-30__
## __AWS Elemental MediaConvert__
  - ### Features
    - MediaConvert adds support for specifying priority (-50 to 50) on jobs submitted to on demand or reserved queues

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fixed the issue where `AsyncResponseHandler#prepare` was not invoked before `#onHeaders`. See [#1343](https://github.com/aws/aws-sdk-java-v2/issues/1343).

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds support for Neural text-to-speech engine.

## __Amazon Route 53__
  - ### Features
    - Amazon Route 53 now supports the Middle East (Bahrain) Region (me-south-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.

# __2.7.14__ __2019-07-29__
## __AWS CodeCommit__
  - ### Features
    - This release supports better exception handling for merges.

## __Netty NIO Http Client__
  - ### Bugfixes
    - Update `HandlerRemovingChannelPool` to only remove per request handlers if the channel is open or registered to avoid the race condition when the DefaultChannelPipeline is trying to removing the handler at the same time, causing `NoSuchElementException`.

# __2.7.13__ __2019-07-26__
## __AWS Batch__
  - ### Features
    - AWS Batch now supports SDK auto-pagination and Job-level docker devices.

## __AWS Cost Explorer Service__
  - ### Features
    - Adds support for resource optimization recommendations.

## __AWS Glue__
  - ### Features
    - This release provides GetJobBookmark and GetJobBookmarks APIs. These APIs enable users to look at specific versions or all versions of the JobBookmark for a specific job. This release also enables resetting the job bookmark to a specific run via an enhancement of the ResetJobBookmark API.

## __AWS Greengrass__
  - ### Features
    - Greengrass OTA service supports openwrt/aarch64 and openwrt/armv7l platforms.

## __AWS MediaConnect__
  - ### Features
    - This release adds support for the Zixi pull protocol on outputs.

## __Amazon CloudWatch Logs__
  - ### Features
    - Allow for specifying multiple log groups in an Insights query, and deprecate storedByte field for LogStreams and interleaved field for FilterLogEventsRequest.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - You can now create EC2 Capacity Reservations using Availability Zone ID or Availability Zone name. You can view usage of Amazon EC2 Capacity Reservations per AWS account.

# __2.7.12__ __2019-07-25__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert has added several features including support for: audio normalization using ITU BS.1770-3, 1770-4 algorithms, extension of job progress indicators, input cropping rectangle & output position rectangle filters per input, and dual SCC caption mapping to additional codecs and containers.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive is adding Input Clipping, Immediate Mode Input Switching, and Dynamic Inputs.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release adds support for immutable image tags.

# __2.7.11__ __2019-07-24__
## __AWS Glue__
  - ### Features
    - This release provides GlueVersion option for Job APIs and WorkerType option for DevEndpoint APIs. Job APIs enable users to pick specific GlueVersion for a specific job and pin the job to a specific runtime environment. DevEndpoint APIs enable users to pick different WorkerType for memory intensive workload.

## __AWS Security Token Service__
  - ### Features
    - New STS GetAccessKeyInfo API operation that returns the account identifier for the specified access key ID.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces support for split tunnel with AWS Client VPN, and also adds support for opt-in Regions in DescribeRegions API. In addition, customers can now also tag Launch Templates on creation.

## __Amazon Pinpoint__
  - ### Features
    - This release adds support for programmatic access to many of the same campaign metrics that are displayed on the Amazon Pinpoint console. You can now use the Amazon Pinpoint API to monitor and assess performance data for campaigns, and integrate metrics data with other reporting tools. We update the metrics data continuously, resulting in a data latency timeframe that is limited to approximately two hours.

# __2.7.10__ __2019-07-23__
## __AWS Secrets Manager__
  - ### Features
    - This release increases the maximum allowed size of SecretString or SecretBinary from 7KB to 10KB in the CreateSecret, UpdateSecret, PutSecretValue and GetSecretValue APIs. This release also increases the maximum allowed size of ResourcePolicy from 4KB to 20KB in the GetResourcePolicy and PutResourcePolicy APIs.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - You can now use Maintenance Windows to select a resource group as the target. By selecting a resource group as the target of a Maintenance Window, customers can perform routine tasks across different resources such as Amazon Elastic Compute Cloud (AmazonEC2) instances, Amazon Elastic Block Store (Amazon EBS) volumes, and Amazon Simple Storage Service(Amazon S3) buckets within the same recurring time window.

# __2.7.9__ __2019-07-22__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix model builder enum fluent setters to check null before calling `toString` to avoid NPE.

## __AWS Shield__
  - ### Features
    - Adding new VectorType (HTTP_Reflection) and related top contributor types to describe WordPress Pingback DDoS attacks.

## __AmazonMQ__
  - ### Features
    - Adds support for AWS Key Management Service (KMS) to offer server-side encryption. You can now select your own customer managed CMK, or use an AWS managed CMK in your KMS account.

# __2.7.8__ __2019-07-19__
## __AWS IoT Events__
  - ### Features
    - Adds support for IoT Events, Lambda, SQS and Kinesis Firehose actions.

## __Amazon Simple Queue Service__
  - ### Features
    - This release updates the information about the availability of FIFO queues and includes miscellaneous fixes.

# __2.7.7__ __2019-07-18__
## __AWS CodeDeploy__
  - ### Features
    - Documentation updates for codedeploy

## __Amazon Comprehend__
  - ### Features
    - Amazon Comprehend now supports multiple entities for custom entity recognition

## __Amazon EC2 Container Service__
  - ### Features
    - This release of Amazon Elastic Container Service (Amazon ECS) introduces support for cluster settings. Cluster settings specify whether CloudWatch Container Insights is enabled or disabled for the cluster.

## __Amazon ElastiCache__
  - ### Features
    - Updates for Elasticache

# __2.7.6__ __2019-07-17__
## __AWS Config__
  - ### Features
    - This release adds more granularity to the status of an OrganizationConfigRule by adding a new status. It also adds an exception when organization access is denied.

## __AWS Database Migration Service__
  - ### Features
    - S3 endpoint settings update: 1) Option to append operation column to full-load files. 2) Option to add a commit timestamp column to full-load and cdc files. Updated DescribeAccountAttributes to include UniqueAccountIdentifier.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Notify error by invoking `AsyncResponseTransformer#exceptionOccurred` for streaming operations for services using xml protocol such as S3 when the request fails and is not retriable.

## __Auto Scaling__
  - ### Features
    - Documentation updates for autoscaling

# __2.7.5__ __2019-07-12__
## __AWS Identity and Access Management__
  - ### Features
    - Removed exception that was indicated but never thrown for IAM GetAccessKeyLastUsed API

## __AWS RoboMaker__
  - ### Features
    - Added Melodic as a supported Robot Software Suite Version

## __AWS SDK for Java v2__
  - ### Features
    - Introduce a new method `equalsBySdkFields` to compare only non-inherited fields for model classes.

  - ### Bugfixes
    - Fix `AwsSessionCredentials#equals` to not compare super because the super is an interface.
    - Fix the bug where `equals` and `hashCode` methods in the AWS service request and response classes were not calling super.

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service now supports M5, C5, and R5 instance types.

## __AmazonApiGatewayV2__
  - ### Features
    - Bug fix (Add tags field to Update Stage , Api and DomainName Responses )

# __2.7.4__ __2019-07-11__
## __Amazon CloudWatch Events__
  - ### Features
    - Adds APIs for partner event sources, partner event buses, and custom event buses. These new features are managed in the EventBridge service.

## __Amazon EventBridge__
  - ### Features
    - Amazon EventBridge is a serverless event bus service that makes it easy to connect your applications with data from a variety of sources, including AWS services, partner applications, and your own applications.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fix the issue where the SDK can invoke `channel#read` twice per request and buffer content aggressively before the subscriber is able to consume the data. This should fix [#1122](https://github.com/aws/aws-sdk-java-v2/issues/1122).

# __2.7.3__ __2019-07-10__
## __AWS SDK for Java v2__
  - ### Features
    - Automatically retry on CRC32 checksum validation failures when the service returns a CRC32 checksum that differs from the one the SDK calculated. Previously this would just throw an exception.

## __AWS Service Catalog__
  - ### Features
    - This release adds support for Parameters in ExecuteProvisionedProductServiceAction and adds functionality to get the default parameter values for a Self-Service Action execution against a Provisioned Product via DescribeServiceActionExecutionParameters

## __Amazon Glacier__
  - ### Features
    - Documentation updates for glacier

## __Amazon QuickSight__
  - ### Features
    - Amazon QuickSight now supports embedding dashboards for all non-federated QuickSight users. This includes IAM users, AD users and users from the QuickSight user pool. The get-dashboard-embed-url API accepts QUICKSIGHT as identity type with a user ARN to authenticate the embeddable dashboard viewer as a non-federated user.

# __2.7.2__ __2019-07-09__
## __AWS Amplify__
  - ### Features
    - This release adds webhook APIs and manual deployment APIs for AWS Amplify Console.

## __AWS Config__
  - ### Features
    - AWS Config now supports a new set of APIs to manage AWS Config rules across your organization in AWS Organizations. Using this capability, you can centrally create, update, and delete AWS Config rules across all accounts in your organization. This capability is particularly useful if you have a need to deploy a common set of AWS Config rules across all accounts. You can also specify accounts where AWS Config rules should not be created. In addition, you can use these APIs from the master account in AWS Organizations to enforce governance by ensuring that the underlying AWS Config rules are not modifiable by your organization member accounts.These APIs work for both managed and custom AWS Config rules. For more information, see Enabling AWS Config Rules Across all Accounts in Your Organization in the AWS Config Developer Guide.The new APIs are available in all commercial AWS Regions where AWS Config and AWS Organizations are supported. For the full list of supported Regions, see AWS Regions and Endpoints in the AWS General Reference. To learn more about AWS Config, visit the AWS Config webpage. To learn more about AWS Organizations, visit the AWS Organizations webpage.

## __AWS WAF__
  - ### Features
    - Updated SDK APIs to add tags to WAF Resources: WebACL, Rule, Rulegroup and RateBasedRule. Tags can also be added during creation of these resources.

## __AWS WAF Regional__
  - ### Features
    - Updated SDK APIs to add tags to WAF Resources: WebACL, Rule, Rulegroup and RateBasedRule. Tags can also be added during creation of these resources.

## __Amazon CloudWatch__
  - ### Features
    - This release adds three new APIs (PutAnomalyDetector, DeleteAnomalyDetector, and DescribeAnomalyDetectors) to support the new feature, CloudWatch Anomaly Detection. In addition, PutMetricAlarm and DescribeAlarms APIs are updated to support management of Anomaly Detection based alarms.

## __Amazon Elastic File System__
  - ### Features
    - EFS customers can now enable Lifecycle Management for all file systems. You can also now select from one of four Lifecycle Management policies (14, 30, 60 and 90 days), to automatically move files that have not been accessed for the period of time defined by the policy, from the EFS Standard storage class to the EFS Infrequent Access (IA) storage class. EFS IA provides price/performance that is cost-optimized for files that are not accessed every day.

## __Amazon GameLift__
  - ### Features
    - GameLift FlexMatch now supports matchmaking of up to 200 players per game session, and FlexMatch can now automatically backfill your game sessions whenever there is an open slot.

## __Amazon Kinesis Video Streams__
  - ### Features
    - Add "GET_DASH_STREAMING_SESSION_URL" as an API name to the GetDataEndpoint API.

## __Amazon Kinesis Video Streams Archived Media__
  - ### Features
    - Adds support for the GetDASHStreamingSessionURL API. Also adds support for the Live Replay playback mode of the GetHLSStreamingSessionURL API.

## __Netty NIO HTTP Client__
  - ### Features
    - Improved error messaging when a connection is closed. Fixes [#1260](https://github.com/aws/aws-sdk-java-v2/issues/1260).

# __2.7.1__ __2019-07-08__
## __AWS Cost Explorer Service__
  - ### Features
    - This release introduces a new operation called GetUsageForecast, which allows you to programmatically access AWS Cost Explorer's forecasting engine on usage data (running hours, data transfer, etc).

# __2.7.0__ __2019-07-03__
## __AWS SDK for Java v2__
  - ### Features
    - Update Apache http client version to `4.5.9`.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - AssignPrivateIpAddresses response includes two new fields: AssignedPrivateIpAddresses, NetworkInterfaceId

## __Amazon Relational Database Service__
  - ### Features
    - This release supports Cross-Account Cloning for Amazon Aurora clusters.

## __Amazon Simple Storage Service__
  - ### Features
    - Add S3 x-amz-server-side-encryption-context support.

## __Amazon Simple Workflow Service__
  - ### Features
    - This release adds APIs that allow adding and removing tags to a SWF domain, and viewing tags for a domain. It also enables adding tags when creating a domain.

## __Apache Http Client__
  - ### Bugfixes
    - Disable apache normalization to handle breaking change introduced in apache httpclient `4.5.7`. See [aws/aws-sdk-java[#1919](https://github.com/aws/aws-sdk-java-v2/issues/1919)](https://github.com/aws/aws-sdk-java/issues/1919) for more information.
