# __2.10.91__ __2020-03-20__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __AWS Service Catalog__
  - ### Features
    - Added "productId" and "portfolioId" to responses from CreateConstraint, UpdateConstraint, ListConstraintsForPortfolio, and DescribeConstraint APIs

# __2.10.90__ __2020-03-19__
## __AWS Certificate Manager__
  - ### Features
    - AWS Certificate Manager documentation updated on API calls ImportCertificate and ListCertificate. Specific updates included input constraints, private key size for import and next token size for list.

## __AWS Outposts__
  - ### Features
    - Documentation updates for AWS Outposts.

# __2.10.89__ __2020-03-18__
## __AWS MediaConnect__
  - ### Features
    - Feature adds the ability for a flow to have multiple redundant sources that provides resiliency to a source failing. The new APIs added to enable the feature are, AddFlowSources, RemoveFlowSource and UpdateFlow.

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

## __Amazon Personalize__
  - ### Features
    - [Personalize] Adds support for returning hyperparameter values of the best performing model in a HPO job.

## __Amazon Relational Database Service__
  - ### Features
    - Updated the MaxRecords type in DescribeExportTasks to Integer.

# __2.10.88__ __2020-03-17__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for: AV1 encoding in File Group MP4, DASH and CMAF DASH outputs; PCM/WAV audio output in MPEG2-TS containers; and Opus audio in Webm inputs.

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

  - ### Bugfixes
    - Fix an issue where the signing key is created only once at the start of the request for event streaming requests. This causes requests that span two or more days to have signing errors once the date changes because the signing key was derived only once using the date at the beginning of the request.

# __2.10.87__ __2020-03-16__
## __AWS S3 Control__
  - ### Features
    - Amazon S3 now supports Batch Operations job tagging.

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

## __Amazon Cognito Identity Provider__
  - ### Features
    - Additional response field "CompromisedCredentialsDetected" added to AdminListUserAuthEvents.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - The enhanced DDB client table schema now supports custom AttributeConverterProviders, and StaticAttribute can take individual AttributeConverter to override default attribute converter behavior.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds the ability to update the task placement strategy and constraints for Amazon ECS services.

## __Amazon ElastiCache__
  - ### Features
    - Amazon ElastiCache now supports Global Datastore for Redis. Global Datastore for Redis offers fully managed, fast, reliable and secure cross-region replication. Using Global Datastore for Redis, you can create cross-region read replica clusters for ElastiCache for Redis to enable low-latency reads and disaster recovery across regions. You can create, modify and describe a Global Datastore, as well as add or remove regions from your Global Datastore and promote a region as primary in Global Datastore.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Resource data sync for AWS Systems Manager Inventory now includes destination data sharing. This feature enables you to synchronize inventory data from multiple AWS accounts into a central Amazon S3 bucket. To use this feature, all AWS accounts must be listed in AWS Organizations.

# __2.10.86__ __2020-03-13__
## __Amazon AppConfig__
  - ### Features
    - This release adds S3 as a configuration source provider.

# __2.10.85__ __2020-03-12__
## __AWS IoT__
  - ### Features
    - As part of this release, we are extending capability of AWS IoT Rules Engine to support IoT Cloudwatch log action. The IoT Cloudwatch log rule action lets you send messages from IoT sensors and applications to Cloudwatch logs for troubleshooting and debugging.

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

## __AWS SecurityHub__
  - ### Features
    - The AWS Security Finding Format is being augmented with the following changes. 21 new resource types without corresponding details objects are added. Another new resource type, AwsS3Object, has an accompanying details object. Severity.Label is a new string field that indicates the severity of a finding. The available values are: INFORMATIONAL, LOW, MEDIUM, HIGH, CRITICAL. The new string field Workflow.Status indicates the status of the investigation into a finding. The available values are: NEW, NOTIFIED, RESOLVED, SUPPRESSED.

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

## __Amazon Lex Model Building Service__
  - ### Features
    - Amazon Lex now supports tagging for bots, bot aliases and bot channels.

## __AmazonApiGatewayV2__
  - ### Features
    - Amazon API Gateway HTTP APIs is now generally available. HTTP APIs offer the core functionality of REST API at up to 71% lower price compared to REST API, 60% lower p99 latency, and is significantly easier to use. As part of general availability, we added new features to route requests to private backends such as private ALBs, NLBs, and IP/ports. We also brought over a set of features from REST API such as Stage Variables, and Stage/Route level throttling. Custom domain names can also now be used with both REST And HTTP APIs.

# __2.10.84__ __2020-03-11__
## __Amazon Elastic File System__
  - ### Features
    - Documentation updates for elasticfilesystem

## __Amazon Redshift__
  - ### Features
    - Amazon Redshift now supports operations to pause and resume a cluster on demand or on a schedule.

# __2.10.83__ __2020-03-10__
## __AWS IoT Events__
  - ### Features
    - API update that adds a new parameter, durationExpression, to SetTimerAction, and deprecates seconds

## __AWS Marketplace Commerce Analytics__
  - ### Features
    - Change the disbursement data set to look past 31 days instead until the beginning of the month.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Reverts a recent change from 2.10.70 where the json protocol type was changed to application/json, this is now back to application/x-amz-json-1.1.

## __AWSServerlessApplicationRepository__
  - ### Features
    - AWS Serverless Application Repository now supports sharing applications privately with AWS Organizations.

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

## __Amazon Transcribe Service__
  - ### Features
    - Amazon Transcribe's Automatic Content Redaction feature enables you to automatically redact sensitive personally identifiable information (PII) from transcription results. It replaces each instance of an identified PII utterance with a [PII] tag in the transcript.

# __2.10.82__ __2020-03-09__
## __AWS Database Migration Service__
  - ### Features
    - Added new settings for Kinesis target to include detailed transaction info; to capture table DDL details; to use single-line unformatted json, which can be directly queried by AWS Athena if data is streamed into S3 through AWS Kinesis Firehose. Added CdcInsertsAndUpdates in S3 target settings to allow capture ongoing insertions and updates only.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports the ability to configure the Preferred Channel Pipeline for channels contributing to a Multiplex.

## __AWS SDK for Java v2__
  - ### Features
    - Added support for "retry modes". A retry mode allows configuring multiple SDK parameters at once using default retry profiles, some of which are standardized between AWS SDK languages. See RetryMode javadoc for more information.
    - Added the ability to configure or disable the default retry throttling behavior of the SDK that 'kicks in' during a large volume of retriable service call errors. This behavior can now be configured via `RetryPolicy.retryCapacityCondition`.

  - ### Bugfixes
    - Fixed an issue where specifying your own retry policy would override AWS and service-specific retry conditions. By default, all retry policies now have AWS and service-specific retry conditions added. This can be disabled via the new `RetryPolicy.furtherRefinementsAllowed(false)`.
    - Fixed an issue where the retry condition returned by `RetryPolicy.retryCondition` differed from the one specified by `RetryPolicy.Builder.retryCondition`. The old value can be accessed via the new `RetryPolicy.aggregateRetryCondition`.
    - Use the last seen HTTP/1.1 header value for headers defined to only appear once in an HTTP message instead of merging them all into a list. The order in which header values are inspected is: headers set by the request marshaller, overridden headers set on the client, then finally overridden headers set on the SDK request object. See https://tools.ietf.org/html/rfc2616#section-4.2 for more information.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon Virtual Private Cloud (VPC) NAT Gateway adds support for tagging on resource creation.

# __2.10.81__ __2020-03-06__
## __AWS App Mesh__
  - ### Features
    - App Mesh now supports sharing a Mesh with other AWS accounts. Customers can use AWS Resource Access Manager to share their Mesh with other accounts in their organization to connection applications within a single service mesh. See https://docs.aws.amazon.com/app-mesh/latest/userguide/sharing.html for details.

## __AWS RoboMaker__
  - ### Features
    - Added support for streaming a GUI from robot and simulation applications

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

## __AWS Signer__
  - ### Features
    - This release enables signing image format override in PutSigningProfile requests, adding two more enum fields, JSONEmbedded and JSONDetached. This release also extends the length limit of SigningProfile name from 20 to 64.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release provides customers with a self-service option to enable Local Zones.

## __Amazon GuardDuty__
  - ### Features
    - Amazon GuardDuty findings now include the OutpostArn if the finding is generated for an AWS Outposts EC2 host.

## __Netty NIO Http Client__
  - ### Bugfixes
    - Expand Http2 connection-level flow control window when a new stream is acquired on that connection so that the connection-level window size is proportional to the number of streams.

# __2.10.80__ __2020-03-05__
## __AWS OpsWorks CM__
  - ### Features
    - Updated the Tag regex pattern to align with AWS tagging APIs.

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

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Adds javadoc to operation methods and request/response objects.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - You can now create AWS Client VPN Endpoints with a specified VPC and Security Group. Additionally, you can modify these attributes when modifying the endpoint.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Amazon EKS now supports adding a KMS key to your cluster for envelope encryption of Kubernetes secrets.

## __Amazon GuardDuty__
  - ### Features
    - Add a new finding field for EC2 findings indicating the instance's local IP address involved in the threat.

# __2.10.79__ __2020-03-04__
## __Amazon Pinpoint__
  - ### Features
    - This release of the Amazon Pinpoint API introduces support for integrating recommender models with email, push notification, and SMS message templates. You can now use these types of templates to connect to recommender models and add personalized recommendations to messages that you send from campaigns and journeys.

# __2.10.78__ __2020-03-03__
## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon VPC Flow Logs adds support for tags and tagging on resource creation.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fix an issue where the Netty client was prematurely considering an HTTP/2 request body as sent, but was still in the process of being transferred to the remote endpoint.

# __2.10.77__ __2020-03-02__
## __AWS Comprehend Medical__
  - ### Features
    - New Time Expression feature, part of DetectEntitiesV2 API will provide temporal relations to existing NERe entities such as Medication, Test, Treatment, Procedure and Medical conditions.

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

## __Amazon CloudWatch__
  - ### Features
    - Introducing Amazon CloudWatch Composite Alarms

# __2.10.76__ __2020-02-28__
## __AWS Config__
  - ### Features
    - Correcting list of supported resource types.

# __2.10.75__ __2020-02-28__
## __AWS App Mesh__
  - ### Features
    - App Mesh now supports Transport Layer Security (TLS) between Virtual Nodes in a Mesh. Customers can use managed certificates from an AWS Certificate Manager Private Certificate Authority or bring their own certificates from the local file system to encrypt traffic between their workloads. See https://docs.aws.amazon.com/app-mesh/latest/userguide/virtual-node-tls.html for details.

## __AWS Config__
  - ### Features
    - Accepts a structured query language (SQL) SELECT command and an aggregator name, performs the corresponding search on resources aggregated by the aggregator, and returns resource configurations matching the properties.

## __AWS Glue__
  - ### Features
    - AWS Glue adds resource tagging support for Machine Learning Transforms and adds a new API, ListMLTransforms to support tag filtering. With this feature, customers can use tags in AWS Glue to organize and control access to Machine Learning Transforms.

## __Access Analyzer__
  - ### Features
    - This release includes improvements and fixes bugs for the IAM Access Analyzer feature.

## __Amazon Augmented AI Runtime__
  - ### Features
    - This release updates Amazon Augmented AI ListHumanLoops API, DescribeHumanLoop response, StartHumanLoop response and type names of SDK fields.

## __Amazon CodeGuru Profiler__
  - ### Features
    - Documentation updates for Amazon CodeGuru Profiler

## __Amazon QuickSight__
  - ### Features
    - Added SearchDashboards API that allows listing of dashboards that a specific user has access to.

## __Amazon WorkDocs__
  - ### Features
    - Documentation updates for workdocs

## __Elastic Load Balancing__
  - ### Features
    - Added a target group attribute to support sticky sessions for Network Load Balancers.

# __2.10.74__ __2020-02-27__
## __AWS Global Accelerator__
  - ### Features
    - This release adds support for adding tags to accelerators and bringing your own IP address to AWS Global Accelerator (BYOIP).

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

## __Amazon Lightsail__
  - ### Features
    - Adds support to create notification contacts in Amazon Lightsail, and to create instance, database, and load balancer metric alarms that notify you based on the value of a metric relative to a threshold that you specify.

# __2.10.73__ __2020-02-26__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __AWS SecurityHub__
  - ### Features
    - Security Hub has added to the DescribeProducts API operation a new response field called IntegrationTypes. The IntegrationTypes field lists the types of actions that a product performs relative to Security Hub such as send findings to Security Hub and receive findings from Security Hub.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Added the BeanTableSchema implementation of TableSchema that allows a TableSchema to be instantiated from an annotated Java bean class which can then be used with the DynamoDB Enhanced Client.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release changes the RunInstances CLI and SDK's so that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker UpdateEndpoint API now supports retained variant properties, e.g., instance count, variant weight. SageMaker ListTrials API filter by TrialComponentName. Make ExperimentConfig name length limits consistent with CreateExperiment, CreateTrial, and CreateTrialComponent APIs.

## __Amazon Transcribe Service__
  - ### Features
    - Amazon Transcribe's Automatic Content Redaction feature enables you to automatically redact sensitive personally identifiable information (PII) from transcription results. It replaces each instance of an identified PII utterance with a [PII] tag in the transcript.

# __2.10.72__ __2020-02-25__
## __AWS Outposts__
  - ### Features
    - This release adds DeleteSite and DeleteOutpost.

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

## __AWS Secrets Manager__
  - ### Features
    - This release increases the maximum allowed size of SecretString or SecretBinary from 10KB to 64KB in the CreateSecret, UpdateSecret, PutSecretValue and GetSecretValue APIs.

## __AWS Step Functions__
  - ### Features
    - This release adds support for CloudWatch Logs for Standard Workflows.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Improves discoverability by adding consumer-style methods for all client, table and index operations.

## __Managed Streaming for Kafka__
  - ### Features
    - Amazon MSK has added support for Broker Log delivery to CloudWatch, S3, and Firehose.

# __2.10.71__ __2020-02-24__
## __AWS IoT Events__
  - ### Features
    - Documentation updates for iotcolumbo

## __Amazon CloudWatch Events__
  - ### Features
    - This release allows you to create and manage tags for event buses.

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - Documentation updates for docdb

## __Amazon EventBridge__
  - ### Features
    - This release allows you to create and manage tags for event buses.

## __Amazon FSx__
  - ### Features
    - Announcing persistent file systems for Amazon FSx for Lustre that are ideal for longer-term storage and workloads, and a new generation of scratch file systems that offer higher burst throughput for spiky workloads.

## __Amazon Import/Export Snowball__
  - ### Features
    - AWS Snowball adds a field for entering your GSTIN when creating AWS Snowball jobs in the Asia Pacific (Mumbai) region.

# __2.10.70__ __2020-02-21__
## __AWS WAFV2__
  - ### Features
    - Documentation updates for AWS WAF (wafv2) to correct the guidance for associating a web ACL to a CloudFront distribution.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Improves discoverability by adding consumer-style methods for all client, table and index operations.

## __Amazon Redshift__
  - ### Features
    - Extend elastic resize to support resizing clusters to different instance types.

## __EC2 Image Builder__
  - ### Features
    - This release of EC2 Image Builder increases the maximum policy document size for Image Builder resource-based policy APIs.

# __2.10.69__ __2020-02-20__
## __AWS Savings Plans__
  - ### Features
    - Added support for AWS Lambda in Compute Savings Plans

## __Amazon AppConfig__
  - ### Features
    - This release adds exponential growth type support for deployment strategies.

## __Amazon Pinpoint__
  - ### Features
    - As of this release of the Amazon Pinpoint API, the Title property is optional for the CampaignEmailMessage object.

# __2.10.68__ __2020-02-19__
## __AWS Lambda__
  - ### Features
    - AWS Lambda now supports Ruby 2.7

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

## __AWS Service Catalog__
  - ### Features
    - "ListPortfolioAccess" API now has a new optional parameter "OrganizationParentId". When it is provided and if the portfolio with the "PortfolioId" given was shared with an organization or organizational unit with "OrganizationParentId", all accounts in the organization sub-tree under parent which inherit an organizational portfolio share will be listed, rather than all accounts with external shares. To accommodate long lists returned from the new option, the API now supports pagination.

## __Auto Scaling__
  - ### Features
    - Doc update for EC2 Auto Scaling: Add Enabled parameter for PutScalingPolicy

# __2.10.67__ __2020-02-18__
## __Amazon Chime__
  - ### Features
    - Added AudioFallbackUrl to support Chime SDK client.

## __Amazon Relational Database Service__
  - ### Features
    - This release supports Microsoft Active Directory authentication for Amazon Aurora.

## __Auto Scaling__
  - ### Features
    - Amazon EC2 Auto Scaling now supports the ability to enable/disable target tracking, step scaling, and simple scaling policies.

# __2.10.66__ __2020-02-17__
## __AWS Cloud9__
  - ### Features
    - AWS Cloud9 now supports the ability to tag Cloud9 development environments.

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

## __Amazon DynamoDB__
  - ### Features
    - Amazon DynamoDB enables you to restore your DynamoDB backup or table data across AWS Regions such that the restored table is created in a different AWS Region from where the source table or backup resides. You can do cross-region restores between AWS commercial Regions, AWS China Regions, and AWS GovCloud (US) Regions.

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

## __Amazon Rekognition__
  - ### Features
    - This update adds the ability to detect text in videos and adds filters to image and video text detection.

# __2.10.65__ __2020-02-14__
## __AWS MediaTailor__
  - ### Features
    - AWS Elemental MediaTailor SDK now allows configuration of Personalization Threshold for HLS and DASH streams.

## __AWS SecurityHub__
  - ### Features
    - Security Hub has released a new DescribeStandards API action. This API action allows a customer to list all of the standards available in an account. For each standard, the list provides the customer with the standard name, description, and ARN. Customers can use the ARN as an input to the BatchEnableStandards API action. To learn more, visit our API documentation.

## __AWS Shield__
  - ### Features
    - This release adds support for associating Amazon Route 53 health checks to AWS Shield Advanced protected resources.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - You can now enable Multi-Attach on Provisioned IOPS io1 volumes through the create-volume API.

## __Amazon S3__
  - ### Features
    - Added support for presigning `CreateMultipartUpload`, `UploadPart`, `CompleteMultipartUpload`, and `AbortMultipartUpload` requests.

# __2.10.64__ __2020-02-13__
## __AWS Elemental MediaPackage VOD__
  - ### Features
    - Adds support for DASH with multiple media presentation description periods triggered by presence of SCTE-35 ad markers in the manifest.Also adds optional configuration for DASH SegmentTemplateFormat to refer to segments by Number with Duration, Number with Timeline or Time with Timeline and compact the manifest by combining duplicate SegmentTemplate tags.

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

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Improves discoverability by adding operation methods for deleteItem(), getItem(), putItem and updateItem(), as applicable. These methods take a request object as parameter. Execute() methods for the table interface is removed since they are no longer needed.

## __Netty NIO HTTP Client__
  - ### Features
    - When there is an I/O error on an http2 request, the SDK will start shutting down the connection - stopping using the http2 connection for new requests and closing it after all streams are finished.

# __2.10.63__ __2020-02-12__
## __AWS Directory Service__
  - ### Features
    - Release to add the ExpirationDateTime as an output to ListCertificates so as to ease customers to look into their certificate lifetime and make timely decisions about renewing them.

## __AWS Glue__
  - ### Features
    - Adding ability to add arguments that cannot be overridden to AWS Glue jobs

## __Amazon Chime__
  - ### Features
    - Documentation updates for Amazon Chime

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for tagging public IPv4 pools.

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service now offers fine-grained access control, which adds multiple capabilities to give tighter control over data. New features include the ability to use roles to define granular permissions for indices, documents, or fields and to extend Kibana with read-only views and secure multi-tenant support.

## __Amazon Neptune__
  - ### Features
    - This launch enables Neptune start-db-cluster and stop-db-cluster. Stopping and starting Amazon Neptune clusters helps you manage costs for development and test environments. You can temporarily stop all the DB instances in your cluster, instead of setting up and tearing down all the DB instances each time that you use the cluster.

## __Amazon WorkMail__
  - ### Features
    - This release adds support for access control rules management in Amazon WorkMail.

# __2.10.62__ __2020-02-11__
## __AWS CloudFormation__
  - ### Features
    - This release of AWS CloudFormation StackSets allows you to centrally manage deployments to all the accounts in your organization or specific organizational units (OUs) in AWS Organizations. You will also be able to enable automatic deployments to any new accounts added to your organization or OUs. The permissions needed to deploy across accounts will automatically be taken care of by the StackSets service.

## __Amazon Cognito Identity Provider__
  - ### Features
    - Features:This release adds a new setting for a user pool to allow if customer wants their user signup/signin with case insensitive username. The current default setting is case sensitive, and for our next release we will change it to case insensitive.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon EC2 Now Supports Tagging Spot Fleet.

# __2.10.61__ __2020-02-10__
## __AWS Key Management Service__
  - ### Features
    - The ConnectCustomKeyStore API now provides a new error code (SUBNET_NOT_FOUND) for customers to better troubleshoot if their "connect-custom-key-store" operation fails.

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

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - Added clarifying information that Amazon DocumentDB shares operational technology with Amazon RDS and Amazon Neptune.

# __2.10.60__ __2020-02-07__
## __AWS RoboMaker__
  - ### Features
    - This release adds support for simulation job batches

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

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Improves discoverability by renaming the table and index interfaces to be consistent with the client interface naming, and by adding operation methods for createTable(), scan() and query(), as applicable. These methods take a request object as parameter. Execute() methods for the index interface is removed since they are no longer needed.

## __Amazon Relational Database Service__
  - ### Features
    - Documentation updates for RDS: when restoring a DB cluster from a snapshot, must create DB instances

## __EC2 Image Builder__
  - ### Features
    - This version of the SDK includes bug fixes and documentation updates.

# __2.10.59__ __2020-02-06__
## __AWS AppSync__
  - ### Features
    - AWS AppSync now supports X-Ray

## __AWS CodeBuild__
  - ### Features
    - AWS CodeBuild adds support for Amazon Elastic File Systems

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - In order to make operations more easily discoverable by an IDE, specific operation methods have been added to the enhanced client interface. An operation method takes a corresponding request object as parameter. Meanwhile, the generic execute() method is removed. This change affects only batch and transcribe operations at the database level.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release contains updated text for the GetAuthorizationToken API.

## __Amazon Elastic Block Store__
  - ### Features
    - Documentation updates for EBS direct APIs.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds platform details and billing info to the DescribeImages API.

## __Amazon Lex Model Building Service__
  - ### Features
    - Amazon Lex now supports AMAZON.AlphaNumeric with regular expressions.

# __2.10.58__ __2020-02-05__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for fine-tuned QVBR quality level.

## __AWS Ground Station__
  - ### Features
    - Adds dataflowEndpointRegion property to DataflowEndpointConfig. The dateCreated, lastUpdated, and tags properties on GetSatellite have been deprecated.

## __AWS Resource Groups Tagging API__
  - ### Features
    - Documentation-only update that adds services to the list of supported services.

## __AWS SecurityHub__
  - ### Features
    - Additional resource types are now supported in the AWS Security Finding Format (ASFF). The following new resource types are added, each having an accompanying resource details object with fields for security finding providers to populate: AwsCodeBuildProject, AwsEc2NetworkInterface, AwsEc2SecurityGroup, AwsElasticsearchDomain, AwsLambdaLayerVersion, AwsRdsDbInstance, and AwsWafWebAcl. The following resource types are added without an accompanying details object: AutoscalingAutoscalingGroup, AwsDynamoDbTable, AwsEc2Eip, AwsEc2Snapshot, AwsEc2Volume, AwsRdsDbSnapshot, AwsRedshiftCluster, and AwsS3Object. The number of allowed resources per finding is increased from 10 to 32. A new field is added in the Compliance object, RelatedRequirements. To learn more, visit our documentation on the ASFF.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Updated the maximum number of tags that can be added to a snapshot using DLM to 45.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release provides support for tagging when you create a VPC endpoint, or VPC endpoint service.

## __Amazon Forecast Query Service__
  - ### Features
    - Documentation updates for Amazon Forecast.

# __2.10.57__ __2020-02-04__
## __AWS IoT__
  - ### Features
    - Updated ThrottlingException documentation to report that the error code is 400, and not 429, to reflect actual system behaviour.

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

## __AWS Storage Gateway__
  - ### Features
    - Adding KVM as a support hypervisor

## __Amazon CloudFront__
  - ### Features
    - Documentation updates for CloudFront

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Changing usage of typed builders for PutItem, UpdateItem and StaticTableSchema to explicitly provide class type.
    - Renames top level sync/async MappedDatabase interfaces as DynamoDbEnhancedClient interfaces. Also adds builder definitions to the interfaces together with a static method that returns the default implementation of the builder.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Amazon VPC Flow Logs adds support for 1-minute aggregation intervals.

## __Amazon S3__
  - ### Bugfixes
    - Fixed an issue where fields in `ListObjectVersionsResponse` and `ListMultipartUploadsResponse` are not decoded correctly when encodingType is specified as url. See [#1601](https://github.com/aws/aws-sdk-java-v2/issues/1601)

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This feature ensures that an instance is patched up to the available patches on a particular date. It can be enabled by selecting the 'ApproveUntilDate' option as the auto-approval rule while creating the patch baseline. ApproveUntilDate - The cutoff date for auto approval of released patches. Any patches released on or before this date will be installed automatically.

## __Amazon WorkMail__
  - ### Features
    - This release adds support for tagging Amazon WorkMail organizations.

## __Managed Streaming for Kafka__
  - ### Features
    - This release enables AWS MSK customers to list Apache Kafka versions that are supported on AWS MSK clusters. Also includes changes to expose additional details of a cluster's state in DescribeCluster and ListClusters APIs.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Deliver exceptions to stream channels correctly if there's an exception thrown on connection. This also fixes a bug where publisher signals onComplete if the stream is closed as a result of outbound GOAWAY.
    - Throws `IOException` for the race condition where an HTTP2 connection gets reused at the same time it gets inactive so that failed requests can be retried

# __2.10.56__ __2020-01-24__
## __AWS DataSync__
  - ### Features
    - AWS DataSync now supports FSx for Windows File Server Locations

## __AWS OpsWorks CM__
  - ### Features
    - AWS OpsWorks for Chef Automate now supports in-place upgrade to Chef Automate 2. Eligible servers can be updated through the management console, CLI and APIs.

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

## __Amazon EC2__
  - ### Features
    - Adds EC2ThrottledException as a recognized throttling exception to be retried

## __Amazon EC2 Container Service__
  - ### Features
    - This release provides support for tagging Amazon ECS task sets for services using external deployment controllers.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Adding new error codes for Nodegroups in EKS

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

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fix issue where DNS resolution for a host is only made once for the initial request to the host. If the DNS entries change for a hostname, the client will resolve the new address until the client is closed and recreated.

# __2.10.55__ __2020-01-23__
## __AWS Identity and Access Management__
  - ### Features
    - This release enables the Identity and Access Management policy simulator to simulate permissions boundary policies.

## __AWS SDK for Java v2__
  - ### Features
    - Added ServiceMetadata.servicePartitions() to get partition metadata for a specific service
    - Improved error messages on UnknownHostExceptions
    - Updated service endpoint metadata.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Support for non-blocking asynchronous calling of all mapper operations

## __Amazon Relational Database Service__
  - ### Features
    - This SDK release introduces APIs that automate the export of Amazon RDS snapshot data to Amazon S3. The new APIs include: StartExportTask, CancelExportTask, DescribeExportTasks. These APIs automate the extraction of data from an RDS snapshot and export it to an Amazon S3 bucket. The data is stored in a compressed, consistent, and query-able format. After the data is exported, you can query it directly using tools such as Amazon Athena or Redshift Spectrum. You can also consume the data as part of a data lake solution. If you archive the data in S3 Infrequent Access or Glacier, you can reduce long term data storage costs by applying data lifecycle policies.

# __2.10.54__ __2020-01-21__
## __AWS Application Discovery Service__
  - ### Features
    - Documentation updates for the AWS Application Discovery Service.

## __AWS CodePipeline__
  - ### Features
    - AWS CodePipeline enables an ability to stop pipeline executions.

## __AWS IoT Events__
  - ### Features
    - Documentation updates for iotcolumbo

## __AWS Marketplace Commerce Analytics__
  - ### Features
    - Remove 4 deprecated data sets, change some data sets available dates to 2017-09-15

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

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add an enum value to the result of DescribeByoipCidrs to support CIDRs that are not publicly advertisable.

## __Netty NIO Http Client__
  - ### Bugfixes
    - Fixed a bug where an inactive http2 connection without `GOAWAY` frame received might get reused in a new request, causing `ClosedChannelException`

# __2.10.53__ __2020-01-20__
## __AWS Key Management Service__
  - ### Features
    - The ConnectCustomKeyStore operation now provides new error codes (USER_LOGGED_IN and USER_NOT_FOUND) for customers to better troubleshoot if their connect custom key store operation fails. Password length validation during CreateCustomKeyStore now also occurs on the client side.

## __AWS Lambda__
  - ### Features
    - Added reason codes to StateReasonCode (InvalidSubnet, InvalidSecurityGroup) and LastUpdateStatusReasonCode (SubnetOutOfIPAddresses, InvalidSubnet, InvalidSecurityGroup) for functions that connect to a VPC.

## __Alexa For Business__
  - ### Features
    - Add support for CreatedTime and ConnectionStatusUpdatedTime in response of SearchDevices API.

## __Amazon CloudWatch__
  - ### Features
    - Updating DescribeAnomalyDetectors API to return AnomalyDetector Status value in response.

## __Amazon CloudWatch Application Insights__
  - ### Features
    - This release adds support for a list API to retrieve the configuration events logged during periodic updates to an application by Amazon CloudWatch Application Insights.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release provides support for a preview of bringing your own IPv6 addresses (BYOIP for IPv6) for use in AWS.

# __2.10.52__ __2020-01-17__
## __AWS Batch__
  - ### Features
    - This release ensures INACTIVE job definitions are permanently deleted after 180 days.

## __AWS CloudHSM V2__
  - ### Features
    - This release introduces resource-level and tag-based access control for AWS CloudHSM resources. You can now tag CloudHSM backups, tag CloudHSM clusters on creation, and tag a backup as you copy it to another region.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for MP3 audio only outputs.

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

## __Amazon EC2 Container Service__
  - ### Features
    - This release provides a public preview for specifying Amazon EFS file systems as volumes in your Amazon ECS task definitions.

## __Amazon Neptune__
  - ### Features
    - This release includes Deletion Protection for Amazon Neptune databases.

## __Amazon Redshift__
  - ### Features
    - Documentation updates for redshift

# __2.10.51__ __2020-01-16__
## __AWS Directory Service__
  - ### Features
    - To reduce the number of errors our customers are facing, we have modified the requirements of input parameters for two of Directory Service APIs.

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

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Client VPN now supports Port Configuration for VPN Endpoints, allowing usage of either port 443 or port 1194.

## __Amazon SageMaker Service__
  - ### Features
    - This release adds two new APIs (UpdateWorkforce and DescribeWorkforce) to SageMaker Ground Truth service for workforce IP whitelisting.

# __2.10.50__ __2020-01-15__
## __AWS Organizations__
  - ### Features
    - Updated description for PolicyID parameter and ConstraintViolationException.

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

## __AWS SecurityHub__
  - ### Features
    - Add support for DescribeStandardsControls and UpdateStandardsControl. These new Security Hub API operations are used to track and manage whether a compliance standards control is enabled.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - General Update to EC2 Docs and SDKs

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Document updates for Patch Manager 'NoReboot' feature.

## __Amazon Transcribe Service__
  - ### Bugfixes
    - Fixed an issue where streaming transcriptions would fail with signature validation errors if the date changed during the request.

# __2.10.49__ __2020-01-14__
## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for partition placement groups and instance metadata option in Launch Templates

# __2.10.48__ __2020-01-13__
## __AWS Backup__
  - ### Features
    - Cross-region backup is a new AWS Backup feature that allows enterprises to copy backups across multiple AWS services to different regions.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Documentation updates for the StopInstances API. You can now stop and start an Amazon EBS-backed Spot Instance at will, instead of relying on the Stop interruption behavior to stop your Spot Instances when interrupted.

## __Amazon Elastic File System__
  - ### Features
    - This release adds support for managing EFS file system policies and EFS Access Points.

## __Amazon S3__
  - ### Bugfixes
    - Fixed bug prevent GetBucketBolicy from ever being successful using the asynchronous S3 client.

# __2.10.47__ __2020-01-10__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.
    - Updated service endpoints and added global endpoints for iso and iso-b.

## __AWS Transfer for SFTP__
  - ### Features
    - This release introduces a new endpoint type that allows you to attach Elastic IP addresses from your AWS account with your server's endpoint directly and whitelist access to your server by client's internet IP address(es) using VPC Security Groups.

## __Amazon Chime__
  - ### Features
    - Add shared profile support to new and existing users

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces the ability to tag egress only internet gateways, local gateways, local gateway route tables, local gateway virtual interfaces, local gateway virtual interface groups, local gateway route table VPC association and local gateway route table virtual interface group association. You can use tags to organize and identify your resources for cost allocation.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds an operation that enables users to override the system-default SSL/TLS certificate for new Amazon RDS DB instances temporarily, or remove the customer override.

## __Amazon S3__
  - ### Bugfixes
    - Fix an issue where s3#listObjects incorrectly decoded marker field. See [#1574](https://github.com/aws/aws-sdk-java-v2/issues/1574).

## __Amazon SageMaker Service__
  - ### Features
    - SageMaker ListTrialComponents API filter by TrialName and ExperimentName.

## __Amazon WorkSpaces__
  - ### Features
    - Added the migrate feature to Amazon WorkSpaces.

# __2.10.46__ __2020-01-09__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Increase the priority of the AWS_WEB_IDENTITY_TOKEN_FILE/AWS_ROLE_ARN/AWS_ROLE_SESSION_NAME environment variables when loading credentials so that they are considered before web_identity_token_file/role_arn/role_session_name profile properties. This is consistent with the other AWS SDKs, including the CLI.

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

## __Amazon CloudWatch Logs__
  - ### Features
    - Documentation updates for logs

## __Amazon S3__
  - ### Features
    - Add support for Tagging builder in `CreateMultipartUploadRequest`. See [#1440](https://github.com/aws/aws-sdk-java-v2/issues/1440)

# __2.10.45__ __2020-01-08__
## __AWS Cost Explorer Service__
  - ### Features
    - Documentation updates for CreateCostCategoryDefinition and UpdateCostCategoryDefinition API

## __AWS Step Functions__
  - ### Features
    - Add sfn specific http configurations. See [#1325](https://github.com/aws/aws-sdk-java-v2/issues/1325)

## __Amazon EC2__
  - ### Bugfixes
    - Fix NPE when calling `CopySnapshot`. Fixes [#1564](https://github.com/aws/aws-sdk-java-v2/issues/1564)

## __Amazon Translate__
  - ### Features
    - This release adds a new family of APIs for asynchronous batch translation service that provides option to translate large collection of text or HTML documents stored in Amazon S3 folder. This service accepts a batch of up to 5 GB in size per API call with each document not exceeding 1 MB size and the number of documents not exceeding 1 million per batch. See documentation for more information.

## __Firewall Management Service__
  - ### Features
    - AWS Firewall Manager now supports tagging, and tag-based access control, of policies.

# __2.10.44__ __2020-01-07__
## __AWS CodeBuild__
  - ### Features
    - Add encryption key override to StartBuild API in AWS CodeBuild.

## __AWS Migration Hub__
  - ### Features
    - ListApplicationStates API provides a list of all application migration states

## __AWS X-Ray__
  - ### Features
    - Documentation updates for xray

# __2.10.43__ __2020-01-06__
## __AWS Elemental MediaPackage__
  - ### Features
    - You can now restrict direct access to AWS Elemental MediaPackage by securing requests for live content using CDN authorization. With CDN authorization, content requests require a specific HTTP header and authorization code.

## __AWS SDK for Java v2__
  - ### Features
    - Add `RequestBody.fromRemainingByteBuffer(ByteBuffer)` that copies only the remaining readable bytes of the buffer. See [#1534](https://github.com/aws/aws-sdk-java-v2/issues/1534)

  - ### Bugfixes
    - Reduce ReadTimeout and ConnectTimeout for accessing EC2 metadata instance service

## __Amazon Comprehend__
  - ### Features
    - Amazon Comprehend now supports Multilabel document classification

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release supports service providers configuring a private DNS name for services other than AWS services and services available in the AWS marketplace. This feature allows consumers to access the service using an existing DNS name without making changes to their applications.

## __Amazon S3__
  - ### Bugfixes
    - Requests that return an error response in the body of the HTTP response with a successful (200) status code will now correctly be handled as a failed request by the SDK.

# __2.10.42__ __2020-01-02__
## __AWS Cost Explorer Service__
  - ### Features
    - Documentation updates for GetReservationUtilization for the Cost Explorer API.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix unmarshalling for models with xml attributes. See [#1488](https://github.com/aws/aws-sdk-java-v2/issues/1488).

## __Amazon EC2 Container Registry__
  - ### Features
    - Adds waiters for ImageScanComplete and LifecyclePolicyPreviewComplete

## __Amazon Lex Model Building Service__
  - ### Features
    - Documentation updates for Amazon Lex.

## __Amazon Lightsail__
  - ### Features
    - This release adds support for Certificate Authority (CA) certificate identifier to managed databases in Amazon Lightsail.

## __Netty NIO Http Client__
  - ### Bugfixes
    - Propagate exception properly when an exception is thrown from protocol initialization.

# __2.10.41__ __2019-12-23__
## __AWS Health APIs and Notifications__
  - ### Features
    - With this release, you can now centrally aggregate AWS Health events from all accounts in your AWS organization. Visit AWS Health documentation to learn more about enabling and using this feature: https://docs.aws.amazon.com/health/latest/ug/organizational-view-health.html.

## __Amazon Detective__
  - ### Features
    - Updated the documentation for Amazon Detective.

## __Amazon FSx__
  - ### Features
    - This release adds a new family of APIs (create-data-repository-task, describe-data-repository-task, and cancel-data-repository-task) that allow users to perform operations between their file system and its linked data repository.

# __2.10.40__ __2019-12-20__
## __AWS Device Farm__
  - ### Features
    - Introduced browser testing support through AWS Device Farm

## __AWS SecurityHub__
  - ### Features
    - Additional resource types are now fully supported in the AWS Security Finding Format (ASFF). These resources include AwsElbv2LoadBalancer, AwsKmsKey, AwsIamRole, AwsSqsQueue, AwsLambdaFunction, AwsSnsTopic, and AwsCloudFrontDistribution. Each of these resource types includes an accompanying resource details object with fields for security finding providers to populate. Updates were made to the AwsIamAccessKey resource details object to include information on principal ID and name. To learn more, visit our documentation on the ASFF.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces the ability to tag key pairs, placement groups, export tasks, import image tasks, import snapshot tasks and export image tasks. You can use tags to organize and identify your resources for cost allocation.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Amazon EKS now supports restricting access to the API server public endpoint by applying CIDR blocks

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

## __Amazon Redshift__
  - ### Features
    - Documentation updates for Amazon Redshift RA3 node types.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds an operation that enables users to specify whether a database is restarted when its SSL/TLS certificate is rotated. Only customers who do not use SSL/TLS should use this operation.

## __Amazon S3__
  - ### Bugfixes
    - Fixed an issue where the SDK would attempt to validate the checksum on a PutObjectRequest when S3 was returning invalid checksums. This would cause all requests to buckets with customer-managed-key service-side encryption to fail.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This release updates the attachments support to include AttachmentReference source for Automation documents.

## __Amazon Transcribe Service__
  - ### Features
    - AWS Transcribe now supports vocabulary filtering that allows customers to input words to the service that they don't want to see in the output transcript.

# __2.10.39__ __2019-12-19__
## __AWS CodeStar connections__
  - ### Features
    - Public beta for Bitbucket Cloud support in AWS CodePipeline through integration with AWS CodeStar connections.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - You can now copy snapshots across regions using Data Lifecycle Manager (DLM). You can enable policies which, along with create, can now also copy snapshots to one or more AWS region(s). Copies can be scheduled for up to three regions from a single policy and retention periods are set for each region separately.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - We are updating the supportedRootDevices field to supportedRootDeviceTypes for DescribeInstanceTypes API to ensure that the actual value is returned, correcting a previous error in the model.

## __Amazon GameLift__
  - ### Features
    - Amazon GameLift now supports ARNs for all key GameLift resources, tagging for GameLift resource authorization management, and updated documentation that articulates GameLift's resource authorization strategy.

## __Amazon Lex Model Building Service__
  - ### Features
    - Amazon Lex now supports conversation logs and slot obfuscation.

## __Amazon Personalize Runtime__
  - ### Features
    - Add context map to get-recommendations and get-personalized-ranking request objects to provide contextual metadata at inference time

## __Amazon S3__
  - ### Bugfixes
    - Fixed an issue where a 'checksum mismatch' error is raised whenever a PutObject request is retried while using an async client.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This release allows customers to add tags to Automation execution, enabling them to sort and filter executions in different ways, such as by resource, purpose, owner, or environment.

## __Amazon Transcribe Service__
  - ### Features
    - Amazon Transcribe supports job queuing for the StartTranscriptionJob API.

## __Netty NIO HTTP Client__
  - ### Features
    - `SETTINGS_INITIAL_WINDOW_SIZE` is now configurable on HTTP/2 connections opened by the Netty client using `Http2Configuration#initialWindowSize(Integer)` along with `NettyNioAsyncHttpClient.Builder#http2Configuration(Http2Configuration)`. See https://tools.ietf.org/html/rfc7540#section-6.5.2 for more information.

# __2.10.38__ __2019-12-18__
## __AWS OpsWorks CM__
  - ### Features
    - AWS OpsWorks CM now supports tagging, and tag-based access control, of servers and backups.

## __AWS Resource Groups Tagging API__
  - ### Features
    - Documentation updates for resourcegroupstaggingapi

## __Amazon CloudFront__
  - ### Features
    - Documentation updates for CloudFront

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces the ability to tag Elastic Graphics accelerators. You can use tags to organize and identify your accelerators for cost allocation.

## __Amazon Simple Storage Service__
  - ### Features
    - Updates Amazon S3 endpoints allowing you to configure your client to opt-in to using S3 with the us-east-1 regional endpoint, instead of global.

# __2.10.37__ __2019-12-17__
## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports HLS ID3 segment tagging, HLS redundant manifests for CDNs that support different publishing/viewing endpoints, fragmented MP4 (fMP4), and frame capture intervals specified in milliseconds.

## __AWS IoT__
  - ### Features
    - Added a new Over-the-Air (OTA) Update feature that allows you to use different, or multiple, protocols to transfer an image from the AWS cloud to IoT devices.

## __Amazon EC2 Container Service__
  - ### Features
    - Documentation updates for Amazon ECS.

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

## __Amazon Kinesis Analytics__
  - ### Features
    - Kinesis Data Analytics service now supports running Java applications using Flink 1.8.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Added support for Cloud Watch Output and Document Version to the Run Command tasks in Maintenance Windows.

# __2.10.36__ __2019-12-16__
## __AWS Comprehend Medical__
  - ### Features
    - New Ontology linking APIs will provides medication concepts normalization and Diagnoses codes from input text. In this release we will provide two APIs - RxNorm and ICD10-CM.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - You can now configure your EC2 Fleet to preferentially use EC2 Capacity Reservations for launching On-Demand instances, enabling you to fully utilize the available (and unused) Capacity Reservations before launching On-Demand instances on net new capacity.

## __Amazon S3__
  - ### Features
    - CopyObjectRequest now has `destinationBucket` and `destinationKey` properties for clarity.
      The existing names, `bucket` and `key`, are deprecated.

## __AmazonMQ__
  - ### Features
    - Amazon MQ now supports throughput-optimized message brokers, backed by Amazon EBS.

# __2.10.35__ __2019-12-13__
## __AWS CodeBuild__
  - ### Features
    - CodeBuild adds support for cross account

## __Amazon Detective__
  - ### Features
    - This is the initial release of Amazon Detective.

## __Amazon Simple Email Service__
  - ### Features
    - Added the ability to use your own public-private key pair to configure DKIM authentication for a domain identity.

# __2.10.34__ __2019-12-12__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fixing exception using `RequestBody.fromInputStream` on non-resettable `InputStreams` by making `reset` conditional on `markSupported`. See [#1544](https://github.com/aws/aws-sdk-java-v2/issues/1544) / [#1545](https://github.com/aws/aws-sdk-java-v2/issues/1545)

## __Access Analyzer__
  - ### Features
    - This release includes improvements and fixes bugs for the IAM Access Analyzer feature.

# __2.10.33__ __2019-12-11__
## __AWS SDK for Java v2__
  - ### Features
    - Adds a `has*` method to requests and responses that have a List or Map property.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release allows customers to attach multiple Elastic Inference Accelerators to a single EC2 instance. It adds support for a Count parameter for each Elastic Inference Accelerator type you specify on the RunInstances and LaunchTemplate APIs.

# __2.10.32__ __2019-12-10__
## __AWSKendraFrontendService__
  - ### Features
    - 1. Adding DocumentTitleFieldName as an optional configuration for SharePoint. 2. updating s3 object pattern to support all s3 keys.

# __2.10.31__ __2019-12-09__
## __AWS Key Management Service__
  - ### Features
    - The Verify operation now returns KMSInvalidSignatureException on invalid signatures. The Sign and Verify operations now return KMSInvalidStateException when a request is made against a CMK pending deletion.

## __Amazon QuickSight__
  - ### Features
    - Documentation updates for QuickSight

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Adds the SSM GetCalendarState API and ChangeCalendar SSM Document type. These features enable the forthcoming Systems Manager Change Calendar feature, which will allow you to schedule events during which actions should (or should not) be performed.

## __Managed Streaming for Kafka__
  - ### Features
    - AWS MSK has added support for Open Monitoring with Prometheus.

## __Netty NIO HTTP Client__
  - ### Features
    - Close HTTP/2 connections if they have had 0 streams for 5 seconds. This can be disabled using `useIdleConnectionReaper(false)` or have the time period adjusted using `connectionMaxIdleTime(...)` on the `NettyNioAsyncHttpClient.Builder`.
    - Periodically ping HTTP/2 connections and close them if the service does not respond. The ping periodicity and timeout time is not currently configurable.

# __2.10.30__ __2019-12-04__
## __Amazon Kinesis Video Signaling Channels__
  - ### Features
    - Announcing support for WebRTC in Kinesis Video Streams, as fully managed capability. You can now use simple APIs to enable your connected devices, web, and mobile apps with real-time two-way media streaming capabilities.

## __Amazon Kinesis Video Streams__
  - ### Features
    - Introduces management of signaling channels for Kinesis Video Streams.

## __AmazonApiGatewayV2__
  - ### Features
    - Amazon API Gateway now supports HTTP APIs (beta), enabling customers to quickly build high performance RESTful APIs that are up to 71% cheaper than REST APIs also available from API Gateway. HTTP APIs are optimized for building APIs that proxy to AWS Lambda functions or HTTP backends, making them ideal for serverless workloads. Using HTTP APIs, you can secure your APIs using OIDC and OAuth 2 out of box, quickly build web applications using a simple CORS experience, and get started immediately with automatic deployment and simple create workflows.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fixed an issue where closing the last stream on a connection that had been closed or received a GOAWAY did not close the connection.
    - Fixed an issue where receiving a GOAWAY that would cause the closing of all streams could cause all outstanding streams to be completed successfully instead of exceptionally.

# __2.10.29__ __2019-12-03__
## __AWS Lambda__
  - ### Features
    - - Added the ProvisionedConcurrency type and operations. Allocate provisioned concurrency to enable your function to scale up without fluctuations in latency. Use PutProvisionedConcurrencyConfig to configure provisioned concurrency on a version of a function, or on an alias.

## __AWS Step Functions__
  - ### Features
    - This release of the AWS Step Functions SDK introduces support for Express Workflows.

## __Amazon Elastic Block Store__
  - ### Features
    - This release introduces the EBS direct APIs for Snapshots: 1. ListSnapshotBlocks, which lists the block indexes and block tokens for blocks in an Amazon EBS snapshot. 2. ListChangedBlocks, which lists the block indexes and block tokens for blocks that are different between two snapshots of the same volume/snapshot lineage. 3. GetSnapshotBlock, which returns the data in a block of an Amazon EBS snapshot.

## __Amazon Rekognition__
  - ### Features
    - This SDK Release introduces APIs for Amazon Rekognition Custom Labels feature (CreateProjects, CreateProjectVersion,DescribeProjects, DescribeProjectVersions, StartProjectVersion, StopProjectVersion and DetectCustomLabels). Also new is AugmentedAI (Human In The Loop) Support for DetectModerationLabels in Amazon Rekognition.

## __Amazon Relational Database Service__
  - ### Features
    - This release adds support for the Amazon RDS Proxy

## __Amazon S3__
  - ### Bugfixes
    - Interacting with an access point in a different region to the one the S3 client is configured for will no longer result in the request being signed for the wrong region and rejected by S3.

## __Amazon SageMaker Service__
  - ### Features
    - You can now use SageMaker Autopilot for automatically training and tuning candidate models using a combination of various feature engineering, ML algorithms, and hyperparameters determined from the user's input data. SageMaker Automatic Model Tuning now supports tuning across multiple algorithms. With Amazon SageMaker Experiments users can create Experiments, ExperimentTrials, and ExperimentTrialComponents to track, organize, and evaluate their ML training jobs. With Amazon SageMaker Debugger, users can easily debug training jobs using a number of pre-built rules provided by Amazon SageMaker, or build custom rules. With Amazon SageMaker Processing, users can run on-demand, distributed, and fully managed jobs for data pre- or post- processing or model evaluation. With Amazon SageMaker Model Monitor, a user can create MonitoringSchedules to automatically monitor endpoints to detect data drift and other issues and get alerted on them. This release also includes the preview version of Amazon SageMaker Studio with Domains, UserProfiles, and Apps. This release also includes the preview version of Amazon Augmented AI to easily implement human review of machine learning predictions by creating FlowDefinitions, HumanTaskUis, and HumanLoops.

## __Application Auto Scaling__
  - ### Features
    - This release supports auto scaling of provisioned concurrency for AWS Lambda.

# __2.10.28__ __2019-12-03__
## __AWS Compute Optimizer__
  - ### Features
    - Initial release of AWS Compute Optimizer. AWS Compute Optimizer recommends optimal AWS Compute resources to reduce costs and improve performance for your workloads.

## __AWS Network Manager__
  - ### Features
    - This is the initial SDK release for AWS Network Manager.

## __AWS Outposts__
  - ### Features
    - This is the initial release for AWS Outposts, a fully managed service that extends AWS infrastructure, services, APIs, and tools to customer sites. AWS Outposts enables you to launch and run EC2 instances and EBS volumes locally at your on-premises location. This release introduces new APIs for creating and viewing Outposts.

## __AWS S3 Control__
  - ### Features
    - Amazon S3 Access Points is a new S3 feature that simplifies managing data access at scale for shared data sets on Amazon S3. Access Points provide a customizable way to access the objects in a bucket, with a unique hostname and access policy that enforces the specific permissions and network controls for any request made through the access point. This represents a new way of provisioning access to shared data sets.

## __AWSKendraFrontendService__
  - ### Features
    - It is a preview launch of Amazon Kendra. Amazon Kendra is a managed, highly accurate and easy to use enterprise search service that is powered by machine learning.

## __Amazon Augmented AI Runtime__
  - ### Features
    - This release adds support for Amazon Augmented AI, which makes it easy to build workflows for human review of machine learning predictions.

## __Amazon CodeGuru Profiler__
  - ### Features
    - (New Service) Amazon CodeGuru Profiler analyzes application CPU utilization and latency characteristics to show you where you are spending the most cycles in your application. This analysis is presented in an interactive flame graph that helps you easily understand which paths consume the most resources, verify that your application is performing as expected, and uncover areas that can be optimized further.

## __Amazon CodeGuru Reviewer__
  - ### Features
    - This is the preview release of Amazon CodeGuru Reviewer.

## __Amazon EC2 Container Service__
  - ### Features
    - This release supports ECS Capacity Providers, Fargate Spot, and ECS Cluster Auto Scaling. These features enable new ways for ECS to manage compute capacity used by tasks.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for the following features: 1. An option to enable acceleration for Site-to-Site VPN connections; 2. Inf1 instances featuring up to 16 AWS Inferentia chips; 3. The ability to associate route tables with internet gateways and virtual private gateways; 4. AWS Local Zones that place compute, storage, database, and other select services; 5. Launching and viewing EC2 instances and EBS volumes running locally in Outposts; 6. Peering Transit Gateways between regions simplifying creation of secure and private global networks on AWS; 7. Transit Gateway Multicast, enabling multicast routing within and between VPCs using Transit Gateway as a multicast router.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Introducing Amazon EKS with Fargate. Customers can now use Amazon EKS to launch pods directly onto AWS Fargate, the serverless compute engine built for containers on AWS.

## __Amazon Elasticsearch Service__
  - ### Features
    - UltraWarm storage provides a cost-effective way to store large amounts of read-only data on Amazon Elasticsearch Service. Rather than attached storage, UltraWarm nodes use Amazon S3 and a sophisticated caching solution to improve performance. For indices that you are not actively writing to and query less frequently, UltraWarm storage offers significantly lower costs per GiB. In Elasticsearch, these warm indices behave just like any other index. You can query them using the same APIs or use them to create dashboards in Kibana.

## __Amazon Fraud Detector__
  - ### Features
    - Amazon Fraud Detector is a fully managed service that makes it easy to identify potentially fraudulent online activities such as online payment fraud and the creation of fake accounts. Amazon Fraud Detector uses your data, machine learning (ML), and more than 20 years of fraud detection expertise from Amazon to automatically identify potentially fraudulent online activity so you can catch more fraud faster.

## __Amazon Simple Storage Service__
  - ### Features
    - Amazon S3 Access Points is a new S3 feature that simplifies managing data access at scale for shared data sets on Amazon S3. Access Points provide a customizable way to access the objects in a bucket, with a unique hostname and access policy that enforces the specific permissions and network controls for any request made through the access point. This represents a new way of provisioning access to shared data sets.

## __Amazon Textract__
  - ### Features
    - This SDK Release introduces Amazon Augmented AI support for Amazon Textract AnalyzeDocument API. Image byte payloads for synchronous operations have increased from 5 MB to 10 MB.

# __2.10.27__ __2019-12-02__
## __Access Analyzer__
  - ### Features
    - Introducing AWS IAM Access Analyzer, an IAM feature that makes it easy for AWS customers to ensure that their resource-based policies provide only the intended access to resources outside their AWS accounts.

# __2.10.26__ __2019-12-02__
## __AWS License Manager__
  - ### Features
    - AWS License Manager now automates discovery of bring-your-own-license usage across the customers organization. With few simple settings, customers can add bring your own license product information along with licensing rules, which would enable License Manager to automatically track the instances that have the specified products installed. If License Manager detects any violation of licensing rules, it would notify the customers designated license administrator to take corrective action.

## __Amazon DynamoDB Enhanced Client [Preview]__
  - ### Features
    - Write operations (put, get, delete) now support 'conditionExpression'

## __Amazon Elastic Compute Cloud__
  - ### Features
    - AWS now provides a new BYOL experience for software licenses, such as Windows and SQL Server, that require a dedicated physical server. You can now enjoy the flexibility and cost effectiveness of using your own licenses on Amazon EC2 Dedicated Hosts, but with the simplicity, resiliency, and elasticity of AWS. You can specify your Dedicated Host management preferences, such as host allocation, host capacity utilization, and instance placement in AWS License Manager. Once set up, AWS takes care of these administrative tasks on your behalf, so that you can seamlessly launch virtual machines (instances) on Dedicated Hosts just like you would launch an EC2 instance with AWS provided licenses.

## __EC2 Image Builder__
  - ### Features
    - This is the first release of EC2 Image Builder, a service that provides a managed experience for automating the creation of EC2 AMIs.

## __Schemas__
  - ### Features
    - This release introduces support for Amazon EventBridge schema registry, making it easy to discover and write code for events in EventBridge.

# __2.10.25__ __2019-11-26__
## __AWS Directory Service__
  - ### Features
    - This release will introduce optional encryption over LDAP network traffic using SSL certificates between customer's self-managed AD and AWS Directory Services instances. The release also provides APIs for Certificate management.

## __AWS Kinesis__
  - ### Bugfixes
    - Reducing default read timeout and write timeout to 10 seconds for Kinesis client.

## __AWS MediaTailor__
  - ### Features
    - AWS Elemental MediaTailor SDK now allows configuration of the Live Pre-Roll feature for HLS and DASH streams.

## __AWS Organizations__
  - ### Features
    - Introduces the DescribeEffectivePolicy action, which returns the contents of the policy that's in effect for the account.

## __AWS RDS DataService__
  - ### Features
    - Type hints to improve handling of some specific parameter types (date/time, decimal etc) for ExecuteStatement and BatchExecuteStatement APIs

## __AWS Resource Groups Tagging API__
  - ### Features
    - You can use tag policies to help standardize on tags across your organization's resources.

## __AWSServerlessApplicationRepository__
  - ### Features
    - AWS Serverless Application Repository now supports verified authors. Verified means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.

## __Amazon Cognito Identity Provider__
  - ### Features
    - This release adds a new setting for a user pool to configure which recovery methods a user can use to recover their account via the forgot password operation.

## __Amazon DynamoDB__
  - ### Features
    - 1) Amazon Contributor Insights for Amazon DynamoDB is a diagnostic tool for identifying frequently accessed keys and understanding database traffic trends. 2) Support for displaying new fields when a table's encryption state is Inaccessible or the table have been Archived.

## __Amazon Elastic Inference__
  - ### Features
    - Amazon Elastic Inference allows customers to attach Elastic Inference Accelerators to Amazon EC2 and Amazon ECS tasks, thus providing low-cost GPU-powered acceleration and reducing the cost of running deep learning inference. This release allows customers to add or remove tags for their Elastic Inference Accelerators.

## __Amazon QuickSight__
  - ### Features
    - Documentation updates for QuickSight

## __Amazon WorkSpaces__
  - ### Features
    - For the WorkspaceBundle API, added the image identifier and the time of the last update.

## __Netty NIO HTTP Client__
  - ### Features
    - Detect unhealthy http2 connections when read or write times out by sending PING frames

# __2.10.24__ __2019-11-25__
## __AWS CodeBuild__
  - ### Features
    - CodeBuild adds support for test reporting

## __AWS Cost Explorer Service__
  - ### Features
    - This launch provides customers with access to Cost Category Public Beta APIs.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for 8K outputs and support for QuickTime Animation Codec (RLE) inputs.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports the ability to create a multiple program transport stream (MPTS).

## __AWS Elemental MediaPackage VOD__
  - ### Features
    - Adds a domain name to PackagingGroups, representing the fully qualified domain name for Assets created in the group.

## __AWS Greengrass__
  - ### Features
    - IoT Greengrass supports machine learning resources in 'No container' mode.

## __AWS IoT__
  - ### Features
    - This release adds: 1) APIs for fleet provisioning claim and template, 2) endpoint configuration and custom domains, 3) support for enhanced custom authentication, d) support for 4 additional audit checks: Device and CA certificate key quality checks, IoT role alias over-permissive check and IoT role alias access to unused services check, 5) extended capability of AWS IoT Rules Engine to support IoT SiteWise rule action. The IoT SiteWise rule action lets you send messages from IoT sensors and applications to IoT SiteWise asset properties

## __AWS IoT Secure Tunneling__
  - ### Features
    - This release adds support for IoT Secure Tunneling to remote access devices behind restricted firewalls.

## __AWS Key Management Service__
  - ### Features
    - AWS Key Management Service (KMS) now enables creation and use of asymmetric Customer Master Keys (CMKs) and the generation of asymmetric data key pairs.

## __AWS Lambda__
  - ### Features
    - Added the function state and update status to the output of GetFunctionConfiguration and other actions. Check the state information to ensure that a function is ready before you perform operations on it. Functions take time to become ready when you connect them to a VPC.Added the EventInvokeConfig type and operations to configure error handling options for asynchronous invocation. Use PutFunctionEventInvokeConfig to configure the number of retries and the maximum age of events when you invoke the function asynchronously.Added on-failure and on-success destination settings for asynchronous invocation. Configure destinations to send an invocation record to an SNS topic, an SQS queue, an EventBridge event bus, or a Lambda function.Added error handling options to event source mappings. This enables you to configure the number of retries, configure the maximum age of records, or retry with smaller batches when an error occurs when a function processes a Kinesis or DynamoDB stream.Added the on-failure destination setting to event source mappings. This enables you to send discarded events to an SNS topic or SQS queue when all retries fail or when the maximum record age is exceeded when a function processes a Kinesis or DynamoDB stream.Added the ParallelizationFactor option to event source mappings to increase concurrency per shard when a function processes a Kinesis or DynamoDB stream.

## __AWS Resource Access Manager__
  - ### Features
    - AWS RAM provides new APIs to view the permissions granted to principals in a resource share. This release also creates corresponding resource shares for supported services that use resource policies, as well as an API to promote them to standard shares that can be managed in RAM.

## __AWS WAFV2__
  - ### Features
    - This release introduces new set of APIs ("wafv2") for AWS WAF. Major changes include single set of APIs for creating/updating resources in global and regional scope, and rules are configured directly into web ACL instead of being referenced. The previous APIs ("waf" and "waf-regional") are now referred as AWS WAF Classic. For more information visit: https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html

## __Alexa For Business__
  - ### Features
    - API update for Alexa for Business: This update enables the use of meeting room configuration that can be applied to a room profile. These settings help improve and measure utilization on Alexa for Business enabled rooms. New features include end meeting reminders, intelligent room release and room utilization analytics report.

## __Amazon AppConfig__
  - ### Features
    - Introducing AWS AppConfig, a new service that enables customers to quickly deploy validated configurations to applications of any size in a controlled and monitored fashion.

## __Amazon Athena__
  - ### Features
    - This release adds additional query lifecycle metrics to the QueryExecutionStatistics object in GetQueryExecution response.

## __Amazon CloudWatch__
  - ### Features
    - This release adds a new feature called "Contributor Insights". "Contributor Insights" supports the following 6 new APIs (PutInsightRule, DeleteInsightRules, EnableInsightRules, DisableInsightRules, DescribeInsightRules and GetInsightRuleReport).

## __Amazon CloudWatch Application Insights__
  - ### Features
    - CloudWatch Application Insights for .NET and SQL Server includes the follwing features: -Tagging Create and manage tags for your applications.-Custom log pattern matching. Define custom log patterns to be detected and monitored.-Resource-level permissions. Specify applications users can access.

## __Amazon Cognito Identity Provider__
  - ### Features
    - Amazon Cognito Userpools now supports Sign in with Apple as an Identity Provider.

## __Amazon Comprehend__
  - ### Features
    - Amazon Comprehend now supports real-time analysis with Custom Classification

## __Amazon Data Lifecycle Manager__
  - ### Features
    - You can now set time based retention policies on Data Lifecycle Manager. With this launch, DLM allows you to set snapshot retention period in the following interval units: days, weeks, months and years.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds two new APIs: 1. ModifyDefaultCreditSpecification, which allows you to set default credit specification at the account level per AWS Region, per burstable performance instance family, so that all new burstable performance instances in the account launch using the new default credit specification. 2. GetDefaultCreditSpecification, which allows you to get current default credit specification per AWS Region, per burstable performance instance family. This release also adds new client exceptions for StartInstances and StopInstances.

## __Amazon Kinesis Analytics__
  - ### Features
    - Kinesis Data Analytics service adds support to configure Java applications to access resources in a VPC. Also releasing support to configure Java applications to set allowNonRestoreState flag through the service APIs.

## __Amazon Lex Runtime Service__
  - ### Features
    - Amazon Lex adds "sessionId" attribute to the PostText and PostContent response.

## __Amazon Redshift__
  - ### Features
    - This release contains changes for 1. Redshift Scheduler 2. Update to the DescribeNodeConfigurationOptions to include a new action type recommend-node-config

## __Amazon Relational Database Service__
  - ### Features
    - Cluster Endpoints can now be tagged by using --tags in the create-db-cluster-endpoint API

## __Amazon Simple Email Service__
  - ### Features
    - This release includes support for automatically suppressing email addresses that result in hard bounce or complaint events at the account level, and for managing addresses on this account-level suppression list.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - AWS Systems Manager Documents now supports more Document Types: ApplicationConfiguration, ApplicationConfigurationSchema and DeploymentStrategy. This release also extends Document Permissions capabilities and introduces a new Force flag for DeleteDocument API.

## __Application Auto Scaling__
  - ### Features
    - This release supports auto scaling of document classifier endpoints for Comprehend; and supports target tracking based on the average capacity utilization metric for AppStream 2.0 fleets.

## __Elastic Load Balancing__
  - ### Features
    - This release of Elastic Load Balancing V2 adds new subnet features for Network Load Balancers and a new routing algorithm for Application Load Balancers.

# __2.10.23__ __2019-11-22__
## __AWS Auto Scaling Plans__
  - ### Features
    - Update default endpoint for AWS Auto Scaling.

## __AWS Certificate Manager__
  - ### Features
    - This release adds support for Tag-Based IAM for AWS Certificate Manager and adding tags to certificates upon creation.

## __AWS CodeBuild__
  - ### Features
    - Add Canonical ARN to LogsLocation.

## __AWS Elemental MediaPackage VOD__
  - ### Features
    - Includes the submission time of Asset ingestion request in the API response for Create/List/Describe Assets.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - The ProcessCredentialsProvider now supports credential files up to 64 KB by default through an increase of the processOutputLimit from 1024 bytes to 64000 bytes.

## __AWS Security Token Service__
  - ### Features
    - Support tagging for STS sessions and tag based access control for the STS APIs

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds two new APIs (DescribeInstanceTypes and DescribeInstanceTypeOfferings) that give customers access to instance type attributes and regional and zonal offerings.

## __Amazon Elastic MapReduce__
  - ### Features
    - Amazon EMR adds support for concurrent step execution and cancelling running steps. Amazon EMR has added a new Outpost ARN field in the ListCluster and DescribeCluster API responses that is populated for clusters launched in an AWS Outpost subnet.

## __Amazon Forecast Service__
  - ### Features
    - This release adds two key updates to existing APIs. 1. Amazon Forecast can now generate forecasts in any quantile using the optional parameter forecastTypes in the CreateForecast API and 2. You can get additional details (metrics and relevant error messages) on your AutoML runs using the DescribePredictor and GetAccuracyMetrics APIs.

## __Amazon Rekognition__
  - ### Features
    - This release adds enhanced face filtering support to the IndexFaces API operation, and introduces face filtering for CompareFaces and SearchFacesByImage API operations.

## __Amazon Simple Notification Service__
  - ### Features
    - Added documentation for the dead-letter queue feature.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Add RebootOption and LastNoRebootInstallOperationTime for DescribeInstancePatchStates and DescribeInstancePatchStatesForPatchGroup API

## __Application Auto Scaling__
  - ### Features
    - Update default endpoint for Application Auto Scaling.

# __2.10.22__ __2019-11-21__
## __AWS Amplify__
  - ### Features
    - This release of AWS Amplify Console introduces support for backend environments. Backend environments are containers for AWS deployments. Each environment is a collection of AWS resources.

## __AWS AppSync__
  - ### Features
    - AppSync: AWS AppSync now supports the ability to add, configure, and maintain caching for your AWS AppSync GraphQL API.

## __AWS Config__
  - ### Features
    - AWS Config launches Custom Configuration Items. A new feature which allows customers to publish resource configuration for third-party resources, custom, or on-premises servers.

## __AWS Glue__
  - ### Features
    - This release adds support for Glue 1.0 compatible ML Transforms.

## __AWSMarketplace Metering__
  - ### Features
    - Documentation updates for the AWS Marketplace Metering Service.

## __Amazon Connect Participant Service__
  - ### Features
    - This release adds 5 new APIs: CreateParticipantConnection, DisconnectParticipant, GetTranscript, SendEvent, and SendMessage. For Amazon Connect chat, you can use them to programmatically perform participant actions on the configured Amazon Connect instance. Learn more here: https://docs.aws.amazon.com/connect-participant/latest/APIReference/Welcome.html

## __Amazon Connect Service__
  - ### Features
    - This release adds a new API: StartChatContact. You can use it to programmatically start a chat on the specified Amazon Connect instance. Learn more here: https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html

## __Amazon DynamoDB__
  - ### Features
    - With this release, you can convert an existing Amazon DynamoDB table to a global table by adding replicas in other AWS Regions.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for attaching AWS License Manager Configurations to Amazon Machine Image (AMI) using ImportImage API; and adds support for running different instance sizes on EC2 Dedicated Hosts

## __Amazon Lex Model Building Service__
  - ### Features
    - Amazon Lex now supports Sentiment Analysis

## __Amazon Lex Runtime Service__
  - ### Features
    - Amazon Lex now supports Sentiment Analysis

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - The release contains new API and API changes for AWS Systems Manager Explorer product.

## __Amazon Transcribe Service__
  - ### Features
    - With this release, Amazon Transcribe now supports transcriptions from audio sources in Hebrew (he-IL), Swiss German (de-CH), Japanese (ja-JP), Turkish (tr-TR), Arabic-Gulf (ar-AE), Malay (ms-MY), Telugu (te-IN)

# __2.10.21__ __2019-11-20__
## __AWS Application Discovery Service__
  - ### Features
    - New exception type for use with Migration Hub home region

## __AWS CloudTrail__
  - ### Features
    - 1. This release adds two new APIs, GetInsightSelectors and PutInsightSelectors, which let you configure CloudTrail Insights event delivery on a trail. An Insights event is a new type of event that is generated when CloudTrail detects unusual activity in your AWS account. In this release, only "ApiCallRateInsight" is a supported Insights event type. 2. This release also adds the new "ExcludeManagementEventSource" option to the existing PutEventSelectors API. This field currently supports only AWS Key Management Services.

## __AWS CodeCommit__
  - ### Features
    - This release adds support for creating pull request approval rules and pull request approval rule templates in AWS CodeCommit. This allows developers to block merges of pull requests, contingent on the approval rules being satisfiied.

## __AWS DataSync__
  - ### Features
    - Update to configure task to run periodically on a schedule

## __AWS Elemental MediaStore__
  - ### Features
    - This release fixes a broken link in the SDK documentation.

## __AWS Migration Hub__
  - ### Features
    - New exception type for use with Migration Hub home region

## __AWS Migration Hub Config__
  - ### Features
    - AWS Migration Hub Config Service allows you to get and set the Migration Hub home region for use with AWS Migration Hub and Application Discovery Service

## __AWS Storage Gateway__
  - ### Features
    - The new DescribeAvailabilityMonitorTest API provides the results of the most recent High Availability monitoring test. The new StartAvailabilityMonitorTest API verifies the storage gateway is configured for High Availability monitoring. The new ActiveDirectoryStatus response element has been added to the DescribeSMBSettings and JoinDomain APIs to indicate the status of the gateway after the most recent JoinDomain operation. The new TimeoutInSeconds parameter of the JoinDomain API allows for the configuration of the timeout in which the JoinDomain operation must complete.

## __Amazon Chime__
  - ### Features
    - Adds APIs to create and manage meeting session resources for the Amazon Chime SDK

## __Amazon Data Lifecycle Manager__
  - ### Features
    - DLM now supports Fast Snapshot Restore. You can enable Fast Restore on snapshots created by DLM, provide the AZs and the number of snapshots to be enabled with this capability.

## __Amazon EC2 Container Service__
  - ### Features
    - Added support for CPU and memory task-level overrides on the RunTask and StartTask APIs. Added location information to Tasks.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release of Amazon Elastic Compute Cloud (Amazon EC2) introduces support for Amazon Elastic Block Store (Amazon EBS) fast snapshot restores.
    - Upgrades to Instance Metadata Service version 2 (IMDS v2). With IMDS v2, a session token is used to make requests for EC2 instance metadata and credentials.

## __Amazon FSx__
  - ### Features
    - Announcing a Multi-AZ deployment type for Amazon FSx for Windows File Server, providing fully-managed Windows file storage with high availability and redundancy across multiple AWS Availability Zones.

## __Amazon Kinesis Firehose__
  - ### Features
    - With this release, Amazon Kinesis Data Firehose allows server side encryption with customer managed CMKs. Customer managed CMKs ( "Customer Master Keys") are AWS Key Management Service (KMS) keys that are fully managed by the customer. With customer managed CMKs, customers can establish and maintain their key policies, IAM policies, rotating policies and add tags. For more information about AWS KMS and CMKs, please refer to: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html. Please refer to the following link to create CMKs: https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-create-cmk.html

## __Amazon QuickSight__
  - ### Features
    - Amazon QuickSight now supports programmatic creation and management of data sources, data sets, dashboards and templates with new APIs. Templates hold dashboard metadata, and can be used to create copies connected to the same or different dataset as required. Also included in this release are APIs for SPICE ingestions, fine-grained access control over AWS resources using AWS Identity and Access Management (IAM) policies, as well AWS tagging. APIs are supported for both Standard and Enterprise Edition, with edition-specific support for specific functionality.

## __Amazon Simple Storage Service__
  - ### Features
    - This release introduces support for Amazon S3 Replication Time Control, a new feature of S3 Replication that provides a predictable replication time backed by a Service Level Agreement. S3 Replication Time Control helps customers meet compliance or business requirements for data replication, and provides visibility into the replication process with new Amazon CloudWatch Metrics.

## __Amazon Transcribe Service__
  - ### Features
    - With this release Amazon Transcribe enables alternative transcriptions so that you can see different interpretations of transcribed audio.

# __2.10.20__ __2019-11-19__
## __AWS CloudFormation__
  - ### Features
    - This release of AWS CloudFormation StackSets enables users to detect drift on a stack set and the stack instances that belong to that stack set.

## __AWS CodeBuild__
  - ### Features
    - Add support for ARM and GPU-enhanced build environments and a new SSD-backed Linux compute type with additional CPU and memory in CodeBuild

## __AWS Config__
  - ### Features
    - AWSConfig launches support for conformance packs. A conformance pack is a new resource type that allows you to package a collection of Config rules and remediation actions into a single entity. You can create and deploy conformance packs into your account or across all accounts in your organization

## __AWS Identity and Access Management__
  - ### Features
    - IAM reports the timestamp when a role's credentials were last used to make an AWS request. This helps you identify unused roles and remove them confidently from your AWS accounts.

## __AWS IoT__
  - ### Features
    - As part of this release, we are extending the capability of AWS IoT Rules Engine to send messages directly to customer's own web services/applications. Customers can now create topic rules with HTTP actions to route messages from IoT Core directly to URL's that they own. Ownership is proved by creating and confirming topic rule destinations.

## __AWS Lambda__
  - ### Features
    - This release provides three new runtimes to support Node.js 12 (initially 12.13.0), Python 3.8 and Java 11.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for RunInstances to specify the metadata options for new instances; adds a new API, ModifyInstanceMetadataOptions, which lets you modify the metadata options for a running or stopped instance; and adds support for CreateCustomerGateway to specify a device name.

## __Auto Scaling__
  - ### Features
    - Amazon EC2 Auto Scaling now supports Instance Weighting and Max Instance Lifetime. Instance Weighting allows specifying the capacity units for each instance type included in the MixedInstancesPolicy and how they would contribute to your application's performance. Max Instance Lifetime allows specifying the maximum length of time that an instance can be in service. If any instances are approaching this limit, Amazon EC2 Auto Scaling gradually replaces them.

## __Elastic Load Balancing__
  - ### Features
    - This release allows forward actions on Application Load Balancers to route requests to multiple target groups, based on the weight you specify for each target group.

# __2.10.19__ __2019-11-18__
## __AWS CloudFormation__
  - ### Features
    - This release introduces APIs for the CloudFormation Registry, a new service to submit and discover resource providers with which you can manage third-party resources natively in CloudFormation.

## __AWS Cost Explorer Service__
  - ### Features
    - add EstimatedOnDemandCostWithCurrentCommitment to GetSavingsPlansPurchaseRecommendationRequest API

## __Amazon Pinpoint__
  - ### Features
    - This release of the Amazon Pinpoint API introduces support for using and managing message templates for messages that are sent through the voice channel. It also introduces support for specifying default values for message variables in message templates.

## __Amazon Relational Database Service__
  - ### Features
    - Documentation updates for rds

## __Amazon SageMaker Runtime__
  - ### Features
    - Amazon SageMaker Runtime now supports a new TargetModel header to invoke a specific model hosted on multi model endpoints.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker now supports multi-model endpoints to host multiple models on an endpoint using a single inference container.

## __Amazon Simple Storage Service__
  - ### Features
    - Added support for S3 Replication for existing objects. This release allows customers who have requested and been granted access to replicate existing S3 objects across buckets.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - The release contains new API and API changes for AWS Systems Manager Explorer product.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Update default connectionMaxIdleTimeout of NettyNioAsyncClient to 5 seconds

# __2.10.18__ __2019-11-15__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for DolbyVision encoding, and SCTE35 & ESAM insertion to DASH ISO EMSG.

## __AWS SDK for Java v2__
  - ### Features
    - When SdkException or one of its children is created without a 'message', inherit the message from the exception 'cause' (if any). This should reduce the chance of an exception being raised by the SDK with a null message.

## __Amazon Chime__
  - ### Features
    - This release adds support for Chime Room Management APIs

## __Amazon CloudWatch Logs__
  - ### Features
    - Documentation updates for logs

## __Amazon Cognito Identity Provider__
  - ### Features
    - This release adds a new option in the User Pool to allow specifying sender's name in the emails sent by Amazon Cognito. This release also adds support to add SES Configuration Set to the emails sent by Amazon Cognito.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - You can now add tags while copying snapshots. Previously, a user had to first copy the snapshot and then add tags to the copied snapshot manually. Moving forward, you can specify the list of tags you wish to be applied to the copied snapshot as a parameter on the Copy Snapshot API.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Introducing Amazon EKS managed node groups, a new feature that lets you easily provision worker nodes for Amazon EKS clusters and keep them up to date using the Amazon EKS management console, CLI, and APIs.

## __Amazon Elastic MapReduce__
  - ### Features
    - Access to the cluster ARN makes it easier for you to author resource-level permissions policies in AWS Identity and Access Management. To simplify the process of obtaining the cluster ARN, Amazon EMR has added a new field containing the cluster ARN to all API responses that include the cluster ID.

## __Amazon GuardDuty__
  - ### Features
    - This release includes new operations related to findings export, including: CreatePublishingDestination, UpdatePublishingDestination, DescribePublishingDestination, DeletePublishingDestination and ListPublishingDestinations.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This release updates AWS Systems Manager Parameter Store documentation for the enhanced search capability.

## __Amazon WorkSpaces__
  - ### Features
    - Added APIs to register your directories with Amazon WorkSpaces and to modify directory details.

## __Elastic Load Balancing__
  - ### Features
    - Documentation-only change to the default value of the routing.http.drop_invalid_header_fields.enabled attribute.

# __2.10.17__ __2019-11-14__
## __AWSMarketplace Metering__
  - ### Features
    - Added CustomerNotEntitledException in MeterUsage API for Container use case.

## __Amazon Cognito Identity Provider__
  - ### Features
    - This release adds a new setting at user pool client to prevent user existence related errors during authentication, confirmation, and password recovery related operations. This release also adds support to enable or disable specific authentication flows for a user pool client.

## __Amazon Connect Service__
  - ### Features
    - This release enhances the existing user management APIs and adds 3 new APIs - TagResource, UntagResource, and ListTagsForResource to support tagging Amazon Connect users, which facilitates more granular access controls for Amazon Connect users within an Amazon Connect instance. You can learn more about the new APIs here: https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html.

## __Amazon Personalize__
  - ### Features
    - Amazon Personalize: Adds ability to get batch recommendations by creating a batch inference job.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Updates support for adding attachments to Systems Manager Automation documents

# __2.10.16__ __2019-11-13__
## __AWS Data Exchange__
  - ### Features
    - Introducing AWS Data Exchange, a service that makes it easy for AWS customers to securely create, manage, access, and exchange data sets in the cloud.

## __AWS IoT__
  - ### Features
    - This release adds the custom fields definition support in the index definition for AWS IoT Fleet Indexing Service. Custom fields can be used as an aggregation field to run aggregations with both existing GetStatistics API and newly added GetCardinality, GetPercentiles APIs. GetStatistics will return all statistics (min/max/sum/avg/count...) with this release. For more information, please refer to our latest documentation: https://docs.aws.amazon.com/iot/latest/developerguide/iot-indexing.html

## __Amazon CloudSearch__
  - ### Features
    - Amazon CloudSearch domains let you require that all traffic to the domain arrive over HTTPS. This security feature helps you block clients that send unencrypted requests to the domain.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - You can now add tags to a lifecycle policy in Data Lifecycle Manager (DLM). Tags allow you to categorize your policies in different ways, such as by department, purpose or owner. You can also enable resource level permissions based on tags to set access control on ability to modify or delete a tagged policy.

## __Amazon Simple Email Service__
  - ### Features
    - This is the first release of version 2 of the Amazon SES API. You can use this API to configure your Amazon SES account, and to send email. This API extends the functionality that exists in the previous version of the Amazon SES API.

# __2.10.15__ __2019-11-12__
## __AWS CodePipeline__
  - ### Features
    - AWS CodePipeline now supports the use of variables in action configuration.

## __AWS Marketplace Catalog Service__
  - ### Features
    - This is the first release for the AWS Marketplace Catalog service which allows you to list, describe and manage change requests on your published entities on AWS Marketplace.

## __Amazon DynamoDB__
  - ### Features
    - Amazon DynamoDB enables you to restore your data to a new DynamoDB table using a point-in-time or on-demand backup. You now can modify the settings on the new restored table. Specifically, you can exclude some or all of the local and global secondary indexes from being created with the restored table. In addition, you can change the billing mode and provisioned capacity settings.

## __Amazon Transcribe Service__
  - ### Features
    - With this release, Amazon Transcribe now supports transcriptions from audio sources in Welsh English (en-WL), Scottish English(en-AB), Irish English(en-IE), Farsi(fa-IR), Tamil(ta-IN), Indonesian(id-ID), Portuguese (pt-PT), Dutch(nl-NL).

## __Elastic Load Balancing__
  - ### Features
    - You can configure your Application Load Balancer to either drop invalid header fields or forward them to targets.

# __2.10.14__ __2019-11-11__
## __AWS CloudFormation__
  - ### Features
    - The Resource Import feature enables customers to import existing AWS resources into new or existing CloudFormation Stacks.

## __AWS Cost Explorer Service__
  - ### Features
    - This launch provides customers with access to GetCostAndUsageWithResources API.

## __Amazon Polly__
  - ### Features
    - Add `PollyPresigner` which enables support for presigning `SynthesizeSpeech` requests.

# __2.10.13__ __2019-11-08__
## __Amazon Cognito Identity__
  - ### Features
    - This release adds support for disabling classic flow.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release contains ticket fixes for Amazon ECR.

# __2.10.12__ __2019-11-07__
## __AWS S3__
  - ### Features
    - Added support for presignPutObject in S3Presigner.

## __AWS SSO OIDC__
  - ### Features
    - This is an initial release of AWS Single Sign-On OAuth device code authorization service.

## __AWS Single Sign-On__
  - ### Features
    - This is an initial release of AWS Single Sign-On (SSO) end-user access. This release adds support for accessing AWS accounts assigned in AWS SSO using short term credentials.

## __Amazon Comprehend__
  - ### Features
    - This release adds new languages (ar, hi, ko, ja, zh, zh-TW) for Amazon Comprehend's DetectSentiment, DetectEntities, DetectKeyPhrases, BatchDetectSentiment, BatchDetectEntities and BatchDetectKeyPhrases APIs

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - AWS Systems Manager Session Manager target length increased to 400.

## __Netty NIO HTTP Client__
  - ### Features
    - Switch from setting the absolute URI in HTTP requests with no `Host` header to setting the absolute request path and query paramters and a `Host` header.

# __2.10.11__ __2019-11-06__
## __AWS SDK for Java v2__
  - ### Features
    - Added the web identity credentials provider to the default credential chain

## __AWS Savings Plans__
  - ### Features
    - This is the first release of Savings Plans, a new flexible pricing model that offers low prices on Amazon EC2 and AWS Fargate usage.

# __2.10.10__ __2019-11-06__
## __AWS Budgets__
  - ### Features
    - Documentation updates for budgets to track Savings Plans utilization and coverage

## __AWS CodeBuild__
  - ### Features
    - Add support for Build Number, Secrets Manager and Exported Environment Variables.

## __AWS Cost Explorer Service__
  - ### Features
    - This launch provides customers with access to Savings Plans management APIs.

## __AWS Savings Plans__
  - ### Features
    - This is the first release of Savings Plans, a new flexible pricing model that offers low prices on Amazon EC2 and AWS Fargate usage.

## __AWS Signer__
  - ### Features
    - This release adds support for tagging code-signing profiles in AWS Signer.

## __Amazon Elastic File System__
  - ### Features
    - EFS customers can select a lifecycle policy that automatically moves files that have not been accessed for 7 days into the EFS Infrequent Access (EFS IA) storage class. EFS IA provides price/performance that is cost-optimized for files that are not accessed every day.

# __2.10.9__ __2019-11-05__
## __AWS CodeStar Notifications__
  - ### Features
    - This release adds a notification manager for events in repositories, build projects, deployments, and pipelines. You can now configure rules and receive notifications about events that occur for resources. Each notification includes a status message as well as a link to the resource (repository, build project, deployment application, or pipeline) whose event generated the notification.

## __Amazon Relational Database Service__
  - ### Features
    - Documentation updates for Amazon RDS

# __2.10.8__ __2019-11-04__
## __AWS RoboMaker__
  - ### Features
    - RoboMaker Fleet Management launch a feature to verify your robot is ready to download and install the new robot application using a download condition file, which is a script run on the robot prior to downloading the new deployment.

## __Amazon DynamoDB Accelerator (DAX)__
  - ### Features
    - Documentation updates for dax

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Documentation updates for ec2

# __2.10.7__ __2019-11-01__
## __AWS CloudTrail__
  - ### Features
    - This release adds two new APIs, GetTrail and ListTrails, and support for adding tags when you create a trail by using a new TagsList parameter on CreateTrail operations.

## __AWS Database Migration Service__
  - ### Features
    - This release contains task timeline attributes in replication task statistics. This release also adds a note to the documentation for the CdcStartPosition task request parameter. This note describes how to enable the use of native CDC start points for a PostgreSQL source by setting the new slotName extra connection attribute on the source endpoint to the name of an existing logical replication slot.

## __Amazon Pinpoint__
  - ### Features
    - This release of the Amazon Pinpoint API introduces support for using and managing journeys, and querying analytics data for journeys.

# __2.10.6__ __2019-10-31__
## __AWS Amplify__
  - ### Features
    - This release of AWS Amplify Console introduces support for Web Previews. This feature allows user to create ephemeral branch deployments from pull request submissions made to a connected repository. A pull-request preview deploys every pull request made to your Git repository to a unique preview URL.

## __AWS Support__
  - ### Features
    - The status descriptions for TrustedAdvisorCheckRefreshStatus have been updated

## __Amazon Simple Storage Service__
  - ### Features
    - S3 Inventory now supports a new field 'IntelligentTieringAccessTier' that reports the access tier (frequent or infrequent) of objects stored in Intelligent-Tiering storage class.

# __2.10.5__ __2019-10-30__
## __Amazon ElastiCache__
  - ### Features
    - Amazon ElastiCache for Redis 5.0.5 now allows you to modify authentication tokens by setting and rotating new tokens. You can now modify active tokens while in use, or add brand-new tokens to existing encryption-in-transit enabled clusters that were previously setup without authentication tokens. This is a two-step process that allows you to set and rotate the token without interrupting client requests.

# __2.10.4__ __2019-10-29__
## __AWS Cloud9__
  - ### Features
    - Added CREATING and CREATE_FAILED environment lifecycle statuses.

## __Amazon AppStream__
  - ### Features
    - Adds support for providing domain names that can embed streaming sessions

# __2.10.3__ __2019-10-28__
## __Amazon Simple Storage Service__
  - ### Features
    - Adding support in SelectObjectContent for scanning a portion of an object specified by a scan range.

# __2.10.2__ __2019-10-28__
## __AWS Transfer for SFTP__
  - ### Features
    - This release adds logical directories support to your AWS SFTP server endpoint, so you can now create logical directory structures mapped to Amazon Simple Storage Service (Amazon S3) bucket paths for users created and stored within the service. Amazon S3 bucket names and paths can now be hidden from AWS SFTP users, providing an additional level of privacy to meet security requirements. You can lock down your SFTP users' access to designated folders (commonly referred to as 'chroot'), and simplify complex folder structures for data distribution through SFTP without replicating files across multiple users.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release of Amazon Elastic Container Registry Service (Amazon ECR) introduces support for image scanning. This identifies the software vulnerabilities in the container image based on the Common Vulnerabilities and Exposures (CVE) database.

## __Amazon ElastiCache__
  - ### Features
    - Amazon ElastiCache adds support for migrating Redis workloads hosted on Amazon EC2 into ElastiCache by syncing the data between the source Redis cluster and target ElastiCache for Redis cluster in real time. For more information, see https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/migrate-to-elasticache.html.

# __2.10.1__ __2019-10-25__
## __Amazon Transcribe Streaming Service__
  - ### Features
    - With this release, Amazon Transcribe Streaming now supports audio sources in Australian English (en-AU).

# __2.10.0__ __2019-10-24__
## __AWS App Mesh__
  - ### Features
    - This release adds support for the gRPC and HTTP/2 protocols.

## __AWS SDK for Java v2__
  - ### Features
    - Updating to use Jackson 2.10.0 and Netty 4.1.42.Final

## __Amazon Chime__
  - ### Features
    - This release introduces Voice Connector PDX region and defaults previously created Voice Connectors to IAD. You can create Voice Connector Groups and add region specific Voice Connectors to direct telephony traffic across AWS regions in case of regional failures. With this release you can add phone numbers to Voice Connector Groups and can bulk move phone numbers between Voice Connectors, between Voice Connector and Voice Connector Groups and between Voice Connector Groups. Voice Connector now supports additional settings to enable SIP Log capture. This is in addition to the launch of Voice Connector Cloud Watch metrics in this release. This release also supports assigning outbound calling name (CNAM) to AWS account and individual phone numbers assigned to Voice Connectors. * Voice Connector now supports a setting to enable real time audio streaming delivered via Kinesis Audio streams. Please note that recording Amazon Chime Voice Connector calls with this feature maybe be subject to laws or regulations regarding the recording of telephone calls and other electronic communications. AWS Customer and their end users' have the responsibility to comply with all applicable laws regarding the recording, including properly notifying all participants in a recorded session or to a recorded communication that the session or communication is being recorded and obtain their consent.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release updates CreateFpgaImage to support tagging FPGA images on creation

## __Amazon GameLift__
  - ### Features
    - Amazon GameLift offers expanded hardware options for game hosting: Custom game builds can use the Amazon Linux 2 operating system, and fleets for both custom builds and Realtime servers can now use C5, M5, and R5 instance types.

## __Amazon SageMaker Service__
  - ### Features
    - Adds support for the new family of Elastic Inference Accelerators (eia2) for SageMaker Hosting and Notebook Services

## __Netty NIO Http Client__
  - ### Bugfixes
    - Fix a race condition where the channel is closed right after all content is buffered, causing `server failed to complete the response` error by adding a flag when `LastHttpContentHandler` is received.
