# __2.15.82__ __2021-02-15__
## __AWS Config__
  - ### Features
    - Added option to provide KMS key to AWS Config DeliveryChannel

## __AWS Elemental MediaLive__
  - ### Features
    - AWS MediaLive now supports Automatic-Input-Failover for CDI Inputs.

## __AWS MediaTailor__
  - ### Features
    - MediaTailor now supports specifying aliases for dynamic variables. This allows use cases such as binding multiple origin domains to a single MediaTailor playback configuration.

## __Amazon Kinesis Video Streams Archived Media__
  - ### Features
    - The ListFragments and GetMediaForFragmentList APIs now support StreamName or StreamARN as input parameters.

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

## __Amazon Pinpoint__
  - ### Features
    - Lets customers use origination number when specifying SMS message configuration for Campaigns and Journeys.

## __Amazon WorkMail Message Flow__
  - ### Features
    - This release allows customers to update email messages as they flow in and out of Amazon WorkMail

## __Redshift Data API Service__
  - ### Features
    - This release enables fine grant access control in ListStatements, GetStatementResult, CancelStatement and DescribeStatement.

# __2.15.81__ __2021-02-12__
## __AWS AppSync__
  - ### Features
    - Approve release for appsync local on pipeline resolver

## __AWS CodePipeline__
  - ### Features
    - The release provides new GetActionType and UpdateActionType APIs for viewing and editing action types in CodePipeline.

## __AWS Identity and Access Management__
  - ### Features
    - AWS Identity and Access Management now supports tagging for the following resources: customer managed policies, identity providers, instance profiles, server certificates, and virtual MFA devices.

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

## __AWS WAFV2__
  - ### Features
    - Added the option to inspect the web request body as parsed and filtered JSON (new FieldToMatch type JsonBody), in addition to the existing option to inspect the web request body as plain text.

## __Amazon Detective__
  - ### Features
    - The API definition now indicates that the format for timestamps is an ISO 8601 date-time string

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Amazon EKS now supports OpenId Connect (OIDC) compatible identity providers as a user authentication option

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API replaces the term master account with the term administrator account, including deprecating APIs that use the previous term and adding APIs that use the new term.

## __Amazon Personalize Events__
  - ### Features
    - Increased maximum char size of PutUsers and PutItems properties.

## __Amazon Relational Database Service__
  - ### Features
    - EngineMode in the response of DescribeDBClusterSnapshots. SupportedEngineModes, SupportsParallelQuery and SupportsGlobalDatabases in ValidUpgradeTarget of DBEngineVersions in DescribeDBEngineVersions.

## __Elastic Load Balancing__
  - ### Features
    - Adds a target group attribute for application-based stickiness for Application Load Balancers and an update to the client IP preservation attribute for Network Load Balancers.

# __2.15.80__ __2021-02-11__
## __AWS Glue DataBrew__
  - ### Features
    - This release adds support for profile job sampling, which determines the number of rows on which the profile job will be executed.

## __Amazon Relational Database Service__
  - ### Features
    - Adding support for RDS Aurora Global Database Failover

# __2.15.79__ __2021-02-09__
## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for WMA audio only ingest, SMPTE-TT text and image caption ingest, and MPEG-2 video in MXF OP1a outputs.

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

## __Amazon GameLift__
  - ### Features
    - GameLift FleetIQ users can now use AMD instance families in supported Regions. In addition, FlexMatch matchmaking notification now supports SNS FIFO topics.

## __Amazon QLDB Session__
  - ### Features
    - This release adds CapacityExceededException to the AWS QLDBSession API.

## __Amazon QuickSight__
  - ### Features
    - QuickSight now supports Python's paginators for Exploration APIs.

## __Amazon SageMaker Service__
  - ### Features
    - Add a new optional FrameworkVersion field to Sagemaker Neo CreateCompilationJob API

# __2.15.78__ __2021-02-08__
## __AWS CloudTrail__
  - ### Features
    - ConflictException is now thrown when certain operations are called on resources before CloudTrail has time to load the resources. Two new exceptions have been added to the PutInsightSelectors API.

## __AWS Data Exchange__
  - ### Features
    - This release introduces the new ExportRevision job type, which allows for the export of an entire revision.

## __AWS Global Accelerator__
  - ### Features
    - Global Accelerator now supports bringing your own IP addresses for custom routing accelerators

## __AWS IoT SiteWise__
  - ### Features
    - Recall CreatePresignedPortalUrl API

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

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for elasticache

## __Amazon Interactive Video Service__
  - ### Features
    - Fixed an issue where StreamStartTime could not be unmarshalled from response. Changed DeleteChannel and DeleteStreamKey response codes to 204.

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API adds support for specifying a time range in queries for usage data.

## __Elastic Load Balancing__
  - ### Features
    - Adds a target group attribute for application-based stickiness for Application Load Balancers.

# __2.15.77__ __2021-02-05__
## __AWS Organizations__
  - ### Features
    - Added support for a few additional exception codes for some AWS Organizations APIs.

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

## __Amazon Macie__
  - ### Features
    - Documentation updates for Amazon Macie Classic. We replaced the term "master account" with the term "administrator account." An administrator account is used to centrally manage multiple accounts.

## __Elastic Load Balancing__
  - ### Features
    - Adds a target group attribute for client IP preservation for Network Load Balancers.

# __2.15.76__ __2021-02-04__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __Amazon Appflow__
  - ### Features
    - Adding schedule offset as an input for scheduled flows in CreateFlow API. Also, adding data pull start time and data pull end time for DescribeFlowExecutionRecords API response.

## __Amazon Athena__
  - ### Features
    - Adds the Athena ListEngineVersions action and the EngineVersion data type. ListEngineVersions returns the available Athena engine versions, including Auto, as a list of EngineVersion objects.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Provide support for EBS Local Snapshots on AWS Outpost in Data Lifecycle Manager (DLM).

## __Amazon EMR Containers__
  - ### Features
    - This release is to correct the timestamp format to ISO8601 for the date parameters in the describe and list API response objects of Job Run and Virtual Clusters.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - AWS Outposts now supports EBS local snapshots on Outposts that allows customers to store snapshots of EBS volumes and AMIs locally on S3 on Outposts.

## __Amazon QuickSight__
  - ### Features
    - API release for field folders feature.

# __2.15.75__ __2021-02-03__
## __AWS Audit Manager__
  - ### Features
    - This release adds AccessDeniedException to GetServicesInScope API.

## __AWS CodeBuild__
  - ### Features
    - Documentation updates for codebuild

## __AWS Compute Optimizer__
  - ### Features
    - Documentation updates for Compute Optimizer

## __AWS Cost Explorer Service__
  - ### Features
    - Clarify valid values for the filter parameter for certain APIs.

## __AWS Glue DataBrew__
  - ### Features
    - This release adds the DescribeJobRun API to allow customers retrieve details of a given job run

## __AWS IoT SiteWise__
  - ### Features
    - Update AccessPolicy API input to support IAM role for IAM mode. Iam role is added as part of accessPolicyIdentity.

## __AWS Lambda__
  - ### Features
    - Support for creating Lambda Functions using 'nodejs14.x'

## __AWS SecurityHub__
  - ### Features
    - Added a ProductArn parameter to DescribeProducts. ProductArn is used to identify the integration to return details for.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - EC2 Public IP now supports API for setting PTR records on Elastic IP address.

## __Amazon S3__
  - ### Features
    - Amazon S3 now supports AWS PrivateLink, providing direct access to S3 via a private endpoint within your virtual private network.

## __Amazon WorkMail__
  - ### Features
    - Increased maximum length of ipRanges values for Access Control Rules from 10 to 1024.

# __2.15.74__ __2021-02-02__
## __AWS App Mesh__
  - ### Features
    - App Mesh now supports mutual TLS with two-way peer authentication. You can specify client certificates, server-side TLS validation, and matching of Subject Alternative Names.

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports Image Media Playlists on HLS outputs, version 0.4 (trick-mode).

## __AWS IoT Wireless__
  - ### Features
    - Add enum value MqttTopic for Destination ExpressionType, add LoRaWANNetworkServerCertificateId for GetWirelessGatewayCertificate API

## __AWS Organizations__
  - ### Features
    - Documentation updates for AWS Organizations.

## __AWS RDS DataService__
  - ### Features
    - With the Data API, you can now use UUID and JSON data types as input to your database. Also with the Data API, you can now have a LONG type value returned from your database as a STRING value.

## __AWS S3 Control__
  - ### Features
    - Amazon S3 Batch Operations now supports Delete Object Tagging

## __Amazon Location Service__
  - ### Features
    - Doc only update for Amazon Location Maps that fixes a customer related issue regarding MapConfiguration

## __Amazon Lookout for Vision__
  - ### Features
    - This release includes the General Availability (GA) SDK for Amazon Lookout for Vision. New for GA is tagging support for Amazon Lookout for Vision models.

## __Amazon Route 53__
  - ### Features
    - Documentation updates for Route 53

## __Application Auto Scaling__
  - ### Features
    - With this release, scheduled actions of Application Auto Scaling can be created in the local time zone and automatically adjusted according to daylight saving changes.

# __2.15.73__ __2021-01-29__
## __AWS Elemental MediaLive__
  - ### Features
    - "AWS Elemental MediaLive now supports output to a private VPC. When this property is specified, the output will egress from a user specified VPC."

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

## __Amazon Connect Service__
  - ### Features
    - Added API to manage queues or get hours of operation for a queue programmatically, which can be used to create new/update queues, or take actions when skills are outside of their hours of operation.

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API adds support for using object prefixes to refine the scope of a classification job.

## __Amazon Transcribe Streaming Service__
  - ### Features
    - Amazon Transcribe Streaming Medical now supports Protected Health Information (PHI) identification which enables you to identify PHI entities based on HIPAA Privacy Rule.

# __2.15.72__ __2021-01-28__
## __AWS Glue DataBrew__
  - ### Features
    - This SDK release adds support for specifying a custom delimiter for input CSV datasets and for CSV job outputs.

## __AWS IoT__
  - ### Features
    - Documentation updates for IoT DeleteOTAUpdate API

## __AWS RoboMaker__
  - ### Features
    - This release allows Robomaker customers to specify configuration for uploading logs and artifacts generated by their simulation jobs.

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

## __AWS Well-Architected Tool__
  - ### Features
    - Documentation updates for AWS Well-Architected Tool

## __Amazon CloudWatch__
  - ### Features
    - Update to SDK to support label time zones in CloudWatch GetMetricData

## __Amazon Managed Blockchain__
  - ### Features
    - This release supports tagging on Amazon Managed Blockchain resources.

# __2.15.71__ __2021-01-27__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __Access Analyzer__
  - ### Features
    - This release adds Secrets Manager secrets as a supported resource in IAM Access Analyzer to help you identify secrets that can be accessed from outside your account or AWS organization.

## __Amazon Connect Customer Profiles__
  - ### Features
    - This release makes Uri a required parameter in GetIntegrationRequest and DeleteIntegrationRequest.

## __Amazon ElastiCache__
  - ### Features
    - Add support to pass ParameterGroup name as part updating Engine Version of Global Datastore.

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service adds support for node-to-node encryption and encryption at rest for existing domains running Elasticsearch version 6.7 and above

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

## __Amazon Simple Email Service__
  - ### Features
    - This release includes the ability to assign a configuration set to an email identity (a domain or email address), which allows the settings from the configuration set to be applied to the identity.

# __2.15.70__ __2021-01-26__
## __AWS Backup__
  - ### Features
    - Documentation updates for AWS Backup

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

## __Amazon DocumentDB with MongoDB compatibility__
  - ### Features
    - Cross-Region Copying Pre-Signer for CopyDBClusterSnapshot and CreateDBCluster API of DocDB.

## __Amazon Neptune__
  - ### Features
    - Cross-Region Copying Pre-Signer for CopyDBClusterSnapshot and CreateDBCluster API of Neptune.

## __DynamoDB Enhanced Client__
  - ### Bugfixes
    - Converts string to NULL attribute if it's null. See [#2243](https://github.com/aws/aws-sdk-java-v2/issues/2243)

# __2.15.69__ __2021-01-22__
## __AWS IoT Greengrass V2__
  - ### Features
    - Documentation updates that improve clarity and fix broken links.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Introducing startDate field for CapacityReservation object for the date and time which the reservation started and adding reserved parameter for ModifyCapacityReservation.

## __Amazon Lex Model Building V2__
  - ### Features
    - This release adds support for Amazon Lex V2 APIs for model building.

## __Amazon Lex Runtime V2__
  - ### Features
    - This release adds support for Amazon Lex V2 APIs for runtime, including Streaming APIs for conversation management.

## __Amazon Redshift__
  - ### Features
    - Update VPC endpoint field names.

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

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Documentation updates for the ListDocumentFilters API action.

# __2.15.68__ __2021-01-21__
## __AWS Resource Groups Tagging API__
  - ### Features
    - This release adds a new parameter ResourceARNList to Resource Groups Tagging api GetResources api to allow customers retrieve tag data for specific resources.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Add support for content-type in AsyncRequestBody.

## __AWS SecurityHub__
  - ### Features
    - This release of ASFF adds a new Action object and a new resource details object - AwsSsmPatchCompliance. It also adds several new attributes for the AwsEc2NetworkInterface resource type.

## __Managed Streaming for Kafka__
  - ### Features
    - Amazon MSK has added a new API that allows you to update all the brokers in the cluster to the specified type.

# __2.15.67__ __2021-01-19__
## __AWS Certificate Manager Private Certificate Authority__
  - ### Features
    - ACM Private CA is launching additional certificate templates and API parameters. This allows customers to create custom certificates for their identity and secure communication use cases.

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

## __Amazon Chime__
  - ### Features
    - Add support for specifying ChimeBearer header as part of the request for Amazon Chime SDK messaging APIs. Documentation updates.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support to include task definition metadata information such as registeredAt, deregisteredAt, registeredBy as part of DescribeTaskDefinition API.

# __2.15.66__ __2021-01-15__
## __Amazon Simple Notification Service__
  - ### Features
    - Documentation updates for Amazon SNS.

# __2.15.65__ __2021-01-14__
## __AWS S3 Control__
  - ### Features
    - Amazon S3 Batch Operations now supports restoring objects from the S3 Intelligent-Tiering Archive Access and Deep Archive Access tiers.

## __Amazon Cognito Identity__
  - ### Features
    - Add Attributes For Access Control support for Amazon Cognito Identity Pools to facilitate access to AWS resources based on attributes from social and corporate identity providers

## __Amazon Pinpoint__
  - ### Features
    - Customers can create segments using 5 new filters. Filters can check for the presence of a substring in attributes and can perform time-based comparisons formatted as ISO_INSTANT datetimes.

## __Amazon SageMaker Service__
  - ### Features
    - This feature allows customers to enable/disable model caching on Multi-Model endpoints.

# __2.15.64__ __2021-01-13__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Reverting synchronization of eventsToDeliver Object in onComplete() [PR#1971](https://github.com/aws/aws-sdk-java-v2/pull/1971) since it was causing latency.

## __Amazon Fraud Detector__
  - ### Features
    - Added support for cancelling a model version that is TRAINING_IN_PROGRESS.

## __Amazon Personalize__
  - ### Features
    - Miscellaneous updates and improvements to the documentation

# __2.15.63__ __2021-01-12__
## __AWS Audit Manager__
  - ### Features
    - This release introduces tag support for assessment frameworks. You can now add, remove, and get tags from existing frameworks, and specify the tags to apply when creating a custom framework.

## __AWS Commont Runtime HTTP Client__
  - ### Features
    - Upgrade `aws-crt` to version `0.9.3`

## __Amazon AppStream__
  - ### Features
    - Adds support for the Smart Card Redirection feature

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for elasticache

## __Amazon Lightsail__
  - ### Features
    - This release adds IPv6 support for Amazon Lightsail instances, container services, CDN distributions, and load balancers.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - AWS Systems Manager adds pagination support for DescribeDocumentPermission API

# __2.15.62__ __2021-01-11__
## __AWS Key Management Service__
  - ### Features
    - Adds support for filtering grants by grant ID and grantee principal in ListGrants requests to AWS KMS.

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

## __Amazon Relational Database Service__
  - ### Features
    - This releases adds support for Major Version Upgrades on Aurora MySQL Global Clusters. Customers will be able to upgrade their whole Aurora MySQL Global Cluster to a new major engine version.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Correctly select the cipher suites based on the HTTP protocol. See [#2159](https://github.com/aws/aws-sdk-java-v2/issues/2159)
    - Use `SystemPropretyTlsKeyManagersProvider` if no `KeyManger` is provided.

# __2.15.61__ __2021-01-07__
## __AWS CodePipeline__
  - ### Features
    - Adding cancelled status and summary for executions aborted by pipeline updates.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for I-Frame-only HLS manifest generation in CMAF outputs.

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

## __Amazon DevOps Guru__
  - ### Features
    - Add resourceHours field in GetAccountHealth API to show total number of resource hours AWS Dev Ops Guru has done work for in the last hour.

# __2.15.60__ __2021-01-06__
## __AWS Auto Scaling Plans__
  - ### Features
    - Documentation updates for AWS Auto Scaling

## __AWS Transfer Family__
  - ### Features
    - This release adds support for Amazon EFS, so customers can transfer files over SFTP, FTPS and FTP in and out of Amazon S3 as well as Amazon EFS.

## __Auto Scaling__
  - ### Features
    - This update increases the number of instance types that can be added to the overrides within an mixed instances group configuration.

# __2.15.59__ __2021-01-05__
## __AWS Cost Explorer Service__
  - ### Features
    - - ### Features - Add new GetCostcategories API - Support filter for GetDimensions, GetTags and GetCostcategories api - Support sortBy metrics for GetDimensions, GetTags and GetCostcategories api

## __Amazon S3__
  - ### Features
    - `S3Utilities#getUrl` now supports versionId. See [#2224](https://github.com/aws/aws-sdk-java-v2/issues/2224)

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

# __2.15.58__ __2021-01-04__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix for [#1684](https://github.com/aws/aws-sdk-java-v2/issues/1684) Some of the Retry attempts which failed due to the API TimeOuts did not successfully retried but ended up with AbortedException.

## __Amazon CloudSearch__
  - ### Features
    - This release adds support for new Amazon CloudSearch instances.

## __Amazon HealthLake__
  - ### Features
    - Amazon HealthLake now supports exporting data from FHIR Data Stores in Preview.

# __2.15.57__ __2020-12-31__
## __AWS Service Catalog__
  - ### Features
    - Enhanced Service Catalog DescribeProvisioningParameters API to return new parameter constraints, i.e., MinLength, MaxLength, MinValue, MaxValue, ConstraintDescription and AllowedPattern

# __2.15.56__ __2020-12-30__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for elasticache

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API includes miscellaneous updates and improvements to the documentation.

# __2.15.55__ __2020-12-29__
## __AWS Certificate Manager Private Certificate Authority__
  - ### Features
    - This release adds a new parameter "CsrExtensions" in the "CertificateAuthorityConfiguration" data structure, which allows customers to add the addition of KU and SIA into the CA CSR.

## __AmazonApiGatewayV2__
  - ### Features
    - Amazon API Gateway now supports data mapping for HTTP APIs which allows customers to modify HTTP Request before sending it to their integration and HTTP Response before sending it to the invoker.

# __2.15.54__ __2020-12-28__
## __Amazon CloudFront__
  - ### Features
    - Amazon CloudFront has deprecated the CreateStreamingDistribution and CreateStreamingDistributionWithTags APIs as part of discontinuing support for Real-Time Messaging Protocol (RTMP) distributions.

# __2.15.53__ __2020-12-23__
## __AWS Compute Optimizer__
  - ### Features
    - This release enables AWS Compute Optimizer to analyze and generate optimization recommendations for lambda functions.

## __AWS Database Migration Service__
  - ### Features
    - AWS DMS launches support for AWS Secrets Manager to manage Oracle ASM Database credentials

## __AWS Resource Groups__
  - ### Features
    - Add operation `PutGroupConfiguration`. Support dedicated hosts and add `Pending` in operations `Un/GroupResources`. Add `Resources` in `ListGroupResources` and deprecate `ResourceIdentifiers`.

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

# __2.15.52__ __2020-12-22__
## __AWS Cost Explorer Service__
  - ### Features
    - This release adds additional metadata that may be applicable to the Rightsizing Recommendations.

## __AWS Glue__
  - ### Features
    - AWS Glue Find Matches machine learning transforms now support column importance scores.

## __AWS IoT Wireless__
  - ### Features
    - Adding the ability to use Fingerprint in GetPartnerAccount and ListPartnerAccounts API responses to protect sensitive customer account information.

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

## __Amazon Connect Service__
  - ### Features
    - This release adds support for quick connects. For details, see the Release Notes in the Amazon Connect Administrator Guide.

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for elasticache

## __Amazon Relational Database Service__
  - ### Features
    - Adds customer-owned IP address (CoIP) support to Amazon RDS on AWS Outposts.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - SSM Maintenance Window support for registering/updating maintenance window tasks without targets.

# __2.15.51__ __2020-12-21__
## __AWS Batch__
  - ### Features
    - Documentation updates for batch

## __AWS Config__
  - ### Features
    - AWS Config adds support to save advanced queries. New API operations - GetStoredQuery, PutStoredQuery, ListStoredQueries, DeleteStoredQuery

## __AWS Database Migration Service__
  - ### Features
    - AWS DMS launches support for AWS Secrets Manager to manage source and target database credentials.

## __AWS Glue__
  - ### Features
    - Add 4 connection properties: SECRET_ID, CONNECTOR_URL, CONNECTOR_TYPE, CONNECTOR_CLASS_NAME. Add two connection types: MARKETPLACE, CUSTOM

## __AWS Outposts__
  - ### Features
    - In this release, AWS Outposts adds support for three new APIs: TagResource, UntagResource, and ListTagsForResource. Customers can now manage tags for their resources through the SDK.

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

## __AWS SecurityHub__
  - ### Features
    - Finding providers can now use BatchImportFindings to update Confidence, Criticality, RelatedFindings, Severity, and Types.

## __AWS Service Catalog App Registry__
  - ### Features
    - New API `SyncResouce` to update AppRegistry system tags.

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

## __Amazon Connect Participant Service__
  - ### Features
    - This release adds three new APIs: StartAttachmentUpload, CompleteAttachmentUpload, and GetAttachment. For Amazon Connect Chat, you can use these APIs to share files in chat conversations.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds Tag On Create feature support for the AllocateAddress API.

## __Amazon Managed Blockchain__
  - ### Features
    - Added support for provisioning and managing public Ethereum nodes on main and test networks supporting secure access using Sigv4 and standard open-source Ethereum APIs.

## __Amazon QLDB Session__
  - ### Features
    - Adds "TimingInformation" to all SendCommand API results and "IOUsage" to ExecuteStatementResult, FetchPageResult and CommitTransactionResult.

## __Amazon Simple Storage Service__
  - ### Features
    - Format GetObject's Expires header to be an http-date instead of iso8601

## __Service Quotas__
  - ### Features
    - Added the ability to tag applied quotas.

# __2.15.50__ __2020-12-18__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

  - ### Bugfixes
    - Upgrading jackson.databind.version to 2.10.5.1

## __Amazon Elastic Compute Cloud__
  - ### Features
    - EBS io2 volumes now supports Multi-Attach

## __Amazon Personalize Runtime__
  - ### Features
    - Updated FilterValues regex pattern to align with Filter Expression.

## __Amazon Relational Database Service__
  - ### Features
    - Adds IAM DB authentication information to the PendingModifiedValues output of the DescribeDBInstances API. Adds ClusterPendingModifiedValues information to the output of the DescribeDBClusters API.

# __2.15.49__ __2020-12-17__
## __AWS Config__
  - ### Features
    - Adding PutExternalEvaluation API which grants permission to deliver evaluation result to AWS Config

## __AWS Key Management Service__
  - ### Features
    - Added CreationDate and LastUpdatedDate timestamps to ListAliases API response

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

  - ### Bugfixes
    - This change fixes a bug in the code generation related to eventstreams that prevents multiple events to share the same shape.

## __AWS Service Catalog__
  - ### Features
    - Support TagOptions sharing with Service Catalog portfolio sharing.

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Provide Cross-account copy event based policy support in DataLifecycleManager (DLM)

## __Amazon Elastic Compute Cloud__
  - ### Features
    - C6gn instances are powered by AWS Graviton2 processors and offer 100 Gbps networking bandwidth. These instances deliver up to 40% better price-performance benefit versus comparable x86-based instances

## __Amazon Route 53__
  - ### Features
    - This release adds support for DNSSEC signing in Amazon Route 53.

## __Amazon Route 53 Resolver__
  - ### Features
    - Route 53 Resolver adds support for enabling resolver DNSSEC validation in virtual private cloud (VPC).

## __Amazon Simple Queue Service__
  - ### Features
    - Amazon SQS adds queue attributes to enable high throughput FIFO.

## __EC2 Image Builder__
  - ### Features
    - This release adds support for building and distributing container images within EC2 Image Builder.

# __2.15.48__ __2020-12-16__
## __AWS Cost Explorer Service__
  - ### Features
    - This release updates the "MonitorArnList" from a list of String to be a list of Arn for both CreateAnomalySubscription and UpdateAnomalySubscription APIs

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

## __AWS Well-Architected Tool__
  - ### Features
    - This is the first release of AWS Well-Architected Tool API support, use to review your workload and compare against the latest AWS architectural best practices.

## __Amazon Location Service__
  - ### Features
    - Initial release of Amazon Location Service. A new geospatial service providing capabilities to render maps, geocode/reverse geocode, track device locations, and detect geofence entry/exit events.

## __Amazon Prometheus Service__
  - ### Features
    - Documentation updates for Amazon Managed Service for Prometheus

## __Amazon QuickSight__
  - ### Features
    - QuickSight now supports connecting to federated data sources of Athena

# __2.15.47__ __2020-12-15__
## __AWS IoT__
  - ### Features
    - AWS IoT Rules Engine adds Kafka Action that allows sending data to Apache Kafka clusters inside a VPC. AWS IoT Device Defender adds custom metrics and machine-learning based anomaly detection.

## __AWS IoT Analytics__
  - ### Features
    - FileFormatConfiguration enables data store to save data in JSON or Parquet format. S3Paths enables you to specify the S3 objects that save your channel messages when you reprocess the pipeline.

## __AWS IoT Core Device Advisor__
  - ### Features
    - AWS IoT Core Device Advisor is fully managed test capability for IoT devices. Device manufacturers can use Device Advisor to test their IoT devices for reliable and secure connectivity with AWS IoT.

## __AWS IoT Fleet Hub__
  - ### Features
    - AWS IoT Fleet Hub, a new feature of AWS IoT Device Management that provides a web application for monitoring and managing device fleets connected to AWS IoT at scale.

## __AWS IoT Greengrass V2__
  - ### Features
    - AWS IoT Greengrass V2 is a new major version of AWS IoT Greengrass. This release adds several updates such as modular components, continuous deployments, and improved ease of use.

## __AWS IoT Wireless__
  - ### Features
    - AWS IoT for LoRaWAN enables customers to setup a private LoRaWAN network by connecting their LoRaWAN devices and gateways to the AWS cloud without managing a LoRaWAN Network Server.

## __AWS Lambda__
  - ### Features
    - Added support for Apache Kafka as a event source. Added support for TumblingWindowInSeconds for streams event source mappings. Added support for FunctionResponseTypes for streams event source mappings

## __Amazon Prometheus Service__
  - ### Features
    - (New Service) Amazon Managed Service for Prometheus is a fully managed Prometheus-compatible monitoring service that makes it easy to monitor containerized applications securely and at scale.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Adding support for Change Manager API content

# __2.15.46__ __2020-12-14__
## __AWS Global Accelerator__
  - ### Features
    - This release adds support for custom routing accelerators

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

  - ### Bugfixes
    - Treat zero-byte responses from async HTTP clients as not having a payload, regardless of the response content-length. This fixes an issue that could cause HEAD responses (e.g. s3's headObject responses) with a content-length specified from being treated as having a payload. This fixes issues like [#1216](https://github.com/aws/aws-sdk-java-v2/issues/1216) where the SDK attempts to read data from the response based on the content-length, not based on whether there was actually a payload.

## __Amazon DevOps Guru__
  - ### Features
    - Documentation updates for DevOps Guru.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Add c5n.metal to ec2 instance types list

# __2.15.45__ __2020-12-11__
## __AWS CloudTrail__
  - ### Features
    - CloudTrailInvalidClientTokenIdException is now thrown when a call results in the InvalidClientTokenId error code. The Name parameter of the AdvancedEventSelector data type is now optional.

## __AWS IoT SiteWise__
  - ### Features
    - Added the ListAssetRelationships operation and support for composite asset models, which represent structured sets of properties within asset models.

## __AWS Performance Insights__
  - ### Features
    - You can group DB load according to the dimension groups for database, application, and session type. Amazon RDS also supports the dimensions db.name, db.application.name, and db.session_type.name.

## __Amazon CloudWatch__
  - ### Features
    - Documentation updates for monitoring

## __Amazon GuardDuty__
  - ### Features
    - Documentation updates for GuardDuty

## __Auto Scaling__
  - ### Features
    - Documentation updates and corrections for Amazon EC2 Auto Scaling API Reference and SDKs.

# __2.15.44__ __2020-12-10__
## __AWS Network Manager__
  - ### Features
    - This release adds API support for Transit Gateway Connect integration into AWS Network Manager.

## __AWSKendraFrontendService__
  - ### Features
    - Amazon Kendra now supports adding synonyms to an index through the new Thesaurus resource.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - TGW connect simplifies connectivity of SD-WAN appliances; IGMP support for TGW multicast; VPC Reachability Analyzer for VPC resources connectivity analysis.

# __2.15.43__ __2020-12-09__
## __AWS Global Accelerator__
  - ### Features
    - This release adds support for custom routing accelerators

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

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for G4ad instances powered by AMD Radeon Pro V520 GPUs and AMD 2nd Generation EPYC processors

## __Amazon Redshift__
  - ### Features
    - Add support for availability zone relocation feature.

# __2.15.42__ __2020-12-08__
## __AWS Audit Manager__
  - ### Features
    - AWS Audit Manager helps you continuously audit your AWS usage to simplify how you manage risk and compliance. This update releases the first version of the AWS Audit Manager APIs and SDK.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - The SDK will now retry on `TransactionInProgressException` error code.

## __AWSKendraFrontendService__
  - ### Features
    - 1. Amazon Kendra connector for Google Drive repositories 2. Amazon Kendra's relevance ranking models are regularly tuned for each customer by capturing end-user search patterns and feedback.

## __Amazon EC2 Container Registry__
  - ### Features
    - This release adds support for configuring cross-region and cross-account replication of your Amazon ECR images.

## __Amazon EMR Containers__
  - ### Features
    - This release adds support for Amazon EMR on EKS, a simple way to run Spark on Kubernetes.

## __Amazon Forecast Service__
  - ### Features
    - This release adds support for the Amazon Forecast Weather Index which can increase forecasting accuracy by automatically including weather forecasts in demand forecasts.

## __Amazon HealthLake__
  - ### Features
    - This release introduces Amazon HealthLake (preview), a HIPAA-eligible service that enables healthcare and life sciences customers to store, transform, query, and analyze health data in the AWS Cloud.

## __Amazon QuickSight__
  - ### Features
    - Added new parameters for join optimization.

## __Amazon SageMaker Runtime__
  - ### Features
    - This feature allows customers to invoke their endpoint with an inference ID. If used and data capture for the endpoint is enabled, this ID will be captured along with request data.

## __Amazon SageMaker Service__
  - ### Features
    - This feature helps you monitor model performance characteristics such as accuracy, identify undesired bias in your ML models, and explain model decisions better with explainability drift detection.

## __Amazon Sagemaker Edge Manager__
  - ### Features
    - Amazon SageMaker Edge Manager makes it easy to optimize, secure, monitor, and maintain machine learning (ML) models across fleets of edge devices such as smart cameras, smart speakers, and robots.

# __2.15.41__ __2020-12-07__
## __AWS Common Runtime HTTP Client__
  - ### Features
    - Bump up `aws-crt` version to `0.9.0`

## __AWS Database Migration Service__
  - ### Features
    - Added PreserveTransaction setting to preserve order of CDC for S3 as target. Added CsvNoSupValue setting to replace empty value for columns not included in the supplemental log for S3 as target.

## __AWS SDK for Java v2__
  - ### Features
    - Added amz-sdk-request and removed amz-sdk-retry header. The new header matches the behavior of the other SDKs.
    - Updated service endpoint metadata.

## __AWS Service Catalog App Registry__
  - ### Features
    - AWS Service Catalog AppRegistry now supports adding, removing, and listing tags on resources after they are created.

## __Netty NIO HTTP Client__
  - ### Bugfixes
    - Fixed the issue where certain handshake errors manifested as acquire connection timeout error when using TLS1.3 and proxy.

# __2.15.40__ __2020-12-04__
## __AWS Directory Service__
  - ### Features
    - Documentation updates for ds - updated descriptions

## __AWS Elemental MediaLive__
  - ### Features
    - AWS Elemental MediaLive now supports black video and audio silence as new conditions to trigger automatic input failover.

## __AWS Lambda__
  - ### Features
    - Added the additional enum InvalidImage to StateReasonCode and LastUpdateStatusReasonCode fields.

## __AWS License Manager__
  - ### Features
    - Automated Discovery now has support for custom tags, and detects software uninstalls.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Avoid costly metrics collection when metric collector is NoOpMetricCollector.
        - Contributed by: [@croudet](https://github.com/croudet)

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces tag-on-create capability for the CreateImage API. A user can now specify tags that will be applied to the new resources (image, snapshots or both), during creation time.

## __Amazon Relational Database Service__
  - ### Features
    - Adds support for Amazon RDS Cross-Region Automated Backups, the ability to setup automatic replication of snapshots and transaction logs from a primary AWS Region to a secondary AWS Region.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - AWS Systems Manager Patch Manager MAC OS Support and OpsMetadata Store APIs to store operational metadata for an Application.

## __Amazon WorkSpaces__
  - ### Features
    - Update the import-workspace-image API to have "BYOL_REGULAR_WSP" as a valid input string for ingestion-process.

## __Managed Streaming for Kafka__
  - ### Features
    - Adding HEALING to ClusterState.

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

[@croudet](https://github.com/croudet)
# __2.15.39__ __2020-12-03__
## __AWS Batch__
  - ### Features
    - This release adds support for customer to run Batch Jobs on ECS Fargate, the serverless compute engine built for containers on AWS. Customer can also propagate Job and Job Definition Tags to ECS Task.

## __AWS Compute Optimizer__
  - ### Features
    - This release enables AWS Compute Optimizer to analyze and generate optimization recommendations for EBS volumes that are attached to instances.

## __AWS License Manager__
  - ### Features
    - AWS License Manager enables managed entitlements for AWS customers and Software Vendors (ISV). You can track and distribute license entitlements from AWS Marketplace and supported ISVs.

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

## __AmplifyBackend__
  - ### Features
    - Regular documentation updates.

# __2.15.38__ __2020-12-01__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __Amazon Connect Customer Profiles__
  - ### Features
    - This is the first release of Amazon Connect Customer Profiles, a unified customer profile for your Amazon Connect contact center.

# __2.15.37__ __2020-12-01__
## __AWS Directory Service__
  - ### Features
    - Adding client authentication feature for AWS AD Connector

## __AWS Lambda__
  - ### Features
    - This release includes support for a new feature: Container images support in AWS Lambda. This adds APIs for deploying functions as container images. AWS Lambda now supports memory up to 10240MB.

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

## __Amazon AppIntegrations Service__
  - ### Features
    - The Amazon AppIntegrations service (in preview release) enables you to configure and reuse connections to external applications.

## __Amazon Connect Contact Lens__
  - ### Features
    - Contact Lens for Amazon Connect analyzes conversations, both real-time and post-call. The ListRealtimeContactAnalysisSegments API returns a list of analysis segments for a real-time analysis session.

## __Amazon Connect Service__
  - ### Features
    - This release adds an Amazon Connect API that provides the ability to create tasks, and a set of APIs (in preview) to configure AppIntegrations associations with Amazon Connect instances.

## __Amazon DevOps Guru__
  - ### Features
    - (New Service) Amazon DevOps Guru is available in public preview. It's a fully managed service that uses machine learning to analyze your operational solutions to help you find and troubleshoot issues.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for: EBS gp3 volumes; and D3/D3en/R5b/M5zn instances powered by Intel Cascade Lake CPUs

## __Amazon Elastic Container Registry Public__
  - ### Features
    - Supports Amazon Elastic Container Registry (Amazon ECR) Public, a fully managed registry that makes it easy for a developer to publicly share container software worldwide for anyone to download.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - Amazon EKS now allows you to define and manage the lifecycle for Kubernetes add-ons for your clusters. This release adds support for the AWS VPC CNI (vpc-cni).

## __Amazon Honeycode__
  - ### Features
    - Introducing APIs to read and write directly from Honeycode tables. Use APIs to pull table and column metadata, then use the read and write APIs to programmatically read and write from the tables.

## __Amazon Lookout for Vision__
  - ### Features
    - This release introduces support for Amazon Lookout for Vision.

## __Amazon SageMaker Feature Store Runtime__
  - ### Features
    - This release adds support for Amazon SageMaker Feature Store, which makes it easy for customers to create, version, share, and manage curated data for machine learning (ML) development.

## __Amazon SageMaker Service__
  - ### Features
    - Amazon SageMaker Pipelines for ML workflows. Amazon SageMaker Feature Store, a fully managed repository for ML features.

## __Amazon Simple Storage Service__
  - ### Features
    - S3 adds support for multiple-destination replication, option to sync replica modifications; S3 Bucket Keys to reduce cost of S3 SSE with AWS KMS

## __AmplifyBackend__
  - ### Features
    - (New Service) The Amplify Admin UI offers an accessible way to develop app backends and manage app content. We recommend that you use the Amplify Admin UI to manage the backend of your Amplify app.

# __2.15.36__ __2020-11-30__
## __AWS SDK for Java v2__
  - ### Features
    - Add LICENSE.txt and NOTICE.txt to META-INF directory of generated JARs
    - Updated service endpoint metadata.

  - ### Bugfixes
    - Fixed a resource leak that could occur when closing the default credentials provider (or a client using the default credentials provider), when `closeable` credentials like STS or SSO were in use. Fixes [#2149](https://github.com/aws/aws-sdk-java-v2/issues/2149).

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release introduces Amazon EC2 Mac1 instances, a new Amazon EC2 instance family built on Apple Mac mini computers, powered by AWS Nitro System, and support running macOS workloads on Amazon EC2

# __2.15.35__ __2020-11-24__
## __AWS Batch__
  - ### Features
    - Add Ec2Configuration in ComputeEnvironment.ComputeResources. Use in CreateComputeEnvironment API to enable AmazonLinux2 support.

## __AWS CloudFormation__
  - ### Features
    - Adds support for the new Modules feature for CloudFormation. A module encapsulates one or more resources and their respective configurations for reuse across your organization.

## __AWS CloudTrail__
  - ### Features
    - CloudTrail now includes advanced event selectors, which give you finer-grained control over the events that are logged to your trail.

## __AWS CodeBuild__
  - ### Features
    - Adding GetReportGroupTrend API for Test Reports.

## __AWS Elastic Beanstalk__
  - ### Features
    - Updates the Integer constraint of DescribeEnvironmentManagedActionHistory's MaxItems parameter to [1, 100].

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for Vorbis and Opus audio in OGG/OGA containers.

## __AWS IoT SiteWise__
  - ### Features
    - This release adds support for customer managed customer master key (CMK) based encryption in IoT SiteWise.

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

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

## __Amazon Appflow__
  - ### Features
    - Upsolver as a destination connector and documentation update.

## __Amazon Cognito Identity Provider__
  - ### Features
    - This release adds ability to configure Cognito User Pools with third party sms and email providers for sending notifications to users.

## __Amazon Comprehend__
  - ### Features
    - Support Comprehend events detection APIs

## __Amazon FSx__
  - ### Features
    - This release adds the capability to increase storage capacity of Amazon FSx for Lustre file systems, providing the flexibility to meet evolving storage needs over time.

## __Amazon GameLift__
  - ### Features
    - GameLift FlexMatch is now available as a standalone matchmaking solution. FlexMatch now provides customizable matchmaking for games hosted peer-to-peer, on-premises, or on cloud compute primitives.

## __Amazon Lex Model Building Service__
  - ### Features
    - Lex now supports es-419, de-DE locales

## __Amazon QuickSight__
  - ### Features
    - Support for embedding without user registration. New enum EmbeddingIdentityType. A potential breaking change. Affects code that refers IdentityType enum type directly instead of literal string value.

## __Amazon Timestream Write__
  - ### Features
    - Adds support of upserts for idempotent updates to Timestream.

## __Amazon Transcribe Streaming Service__
  - ### Features
    - Amazon Transcribe Medical streaming added medical specialties and HTTP/2 support. Amazon Transcribe streaming supports additional languages. Both support OGG/OPUS and FLAC codecs for streaming.

## __AmazonMWAA__
  - ### Features
    - (New Service) Amazon MWAA is a managed service for Apache Airflow that makes it easy for data engineers and data scientists to execute data processing workflows in the cloud.

# __2.15.34__ __2020-11-23__
## __AWS CodeStar connections__
  - ### Features
    - Added support for the UpdateHost API.

## __AWS Glue__
  - ### Features
    - Feature1 - Glue crawler adds data lineage configuration option. Feature2 - AWS Glue Data Catalog adds APIs for PartitionIndex creation and deletion as part of Enhancement Partition Management feature.

## __AWS IoT__
  - ### Features
    - This release enables users to identify different file types in the over-the-air update (OTA) functionality using fileType parameter for CreateOTAUpdate API

## __AWS Lambda__
  - ### Features
    - This release includes support for new feature: Code Signing for AWS Lambda. This adds new resources and APIs to configure Lambda functions to accept and verify signed code artifacts at deployment.

## __AWS License Manager__
  - ### Features
    - AWS License Manager now provides the ability for license administrators to be able to associate license configurations to AMIs shared with their AWS account

## __AWS Outposts__
  - ### Features
    - Support specifying tags during the creation of the Outpost resource. Tags are now returned in the response body of Outpost APIs.

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

## __AWS SecurityHub__
  - ### Features
    - Updated the account management API to support the integration with AWS Organizations. Added new methods to allow users to view and manage the delegated administrator account for Security Hub.

## __AWS Signer__
  - ### Features
    - AWS Signer is launching code-signing for AWS Lambda. Now customers can cryptographically sign Lambda code to ensure trust, integrity, and functionality.

## __AWS Single Sign-On Admin__
  - ### Features
    - AWS Single Sign-On now enables attribute-based access control for workforce identities to simplify permissions in AWS

## __Amazon CloudWatch Application Insights__
  - ### Features
    - Add Detected Workload to ApplicationComponent which shows the workloads that installed in the component

## __Amazon DynamoDB__
  - ### Features
    - With this release, you can capture data changes in any Amazon DynamoDB table as an Amazon Kinesis data stream. You also can use PartiQL (SQL-compatible language) to manipulate data in DynamoDB tables.

## __Amazon EC2 Container Service__
  - ### Features
    - This release adds support for updating capacity providers, specifying custom instance warmup periods for capacity providers, and using deployment circuit breaker for your ECS Services.

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for elasticache

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for Multiple Private DNS names to DescribeVpcEndpointServices response.

## __Amazon Elastic MapReduce__
  - ### Features
    - Add API support for EMR Studio, a new notebook-first IDE for data scientists and data engineers with single sign-on, Jupyter notebooks, automated infrastructure provisioning, and job diagnosis.

## __Amazon Forecast Service__
  - ### Features
    - Releasing the set of PredictorBacktestExportJob APIs which allow customers to export backtest values and item-level metrics data from Predictor training.

## __Amazon Timestream Query__
  - ### Features
    - Amazon Timestream now supports "QueryStatus" in Query API which has information about cumulative bytes scanned, metered, as well as progress percentage for the query.

## __Amazon Translate__
  - ### Features
    - This update adds new operations to create and manage parallel data in Amazon Translate. Parallel data is a resource that you can use to run Active Custom Translation jobs.

## __Auto Scaling__
  - ### Features
    - Documentation updates and corrections for Amazon EC2 Auto Scaling API Reference and SDKs.

## __CodeArtifact__
  - ### Features
    - Add support for the NuGet package format.

## __Managed Streaming for Kafka__
  - ### Features
    - Adding MAINTENANCE and REBOOTING_BROKER to Cluster states.

# __2.15.33__ __2020-11-20__
## __AWS App Mesh__
  - ### Features
    - This release makes tag value a required attribute of the tag's key-value pair.

## __AWS CloudHSM V2__
  - ### Features
    - Added managed backup retention, a feature that enables customers to retain backups for a configurable period after which CloudHSM service will automatically delete them.

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

## __AWS Service Catalog App Registry__
  - ### Features
    - AWS Service Catalog AppRegistry Documentation update

## __AWS Single Sign-on__
  - ### Features
    - Added support for retrieving SSO credentials: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html.

## __Amazon Chime__
  - ### Features
    - The Amazon Chime SDK for messaging provides the building blocks needed to build chat and other real-time collaboration features.

## __Amazon CodeGuru Reviewer__
  - ### Features
    - This release supports tagging repository association resources in Amazon CodeGuru Reviewer.

## __Amazon Cognito Identity__
  - ### Features
    - Added SDK pagination support for ListIdentityPools

## __Amazon Connect Service__
  - ### Features
    - This release adds a set of Amazon Connect APIs to programmatically control instance creation, modification, description and deletion.

## __Amazon Macie 2__
  - ### Features
    - The Amazon Macie API now provides S3 bucket metadata that indicates whether any one-time or recurring classification jobs are configured to analyze data in a bucket.

## __Amazon Simple Storage Service__
  - ### Features
    - Add new documentation regarding automatically generated Content-MD5 headers when using the SDK or CLI.

## __Managed Streaming for Kafka__
  - ### Features
    - This release adds support for PER TOPIC PER PARTITION monitoring on AWS MSK clusters.

# __2.15.32__ __2020-11-19__
## __AWS Cost Explorer Service__
  - ### Features
    - Additional metadata that may be applicable to the recommendation.

## __AWS Directory Service__
  - ### Features
    - Adding multi-region replication feature for AWS Managed Microsoft AD

## __AWS Elemental MediaLive__
  - ### Features
    - The AWS Elemental MediaLive APIs and SDKs now support the ability to see the software update status on Link devices

## __AWS Glue__
  - ### Features
    - Adding support for Glue Schema Registry. The AWS Glue Schema Registry is a new feature that allows you to centrally discover, control, and evolve data stream schemas.

## __AWS Lambda__
  - ### Features
    - Added the starting position and starting position timestamp to ESM Configuration. Now customers will be able to view these fields for their ESM.

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

## __Amazon CloudWatch Events__
  - ### Features
    - EventBridge now supports Resource-based policy authorization on event buses. This enables cross-account PutEvents API calls, creating cross-account rules, and simplifies permission management.

## __Amazon EventBridge__
  - ### Features
    - EventBridge now supports Resource-based policy authorization on event buses. This enables cross-account PutEvents API calls, creating cross-account rules, and simplifies permission management.

## __Amazon Kinesis Analytics__
  - ### Features
    - Amazon Kinesis Data Analytics now supports building and running streaming applications using Apache Flink 1.11 and provides a way to access the Apache Flink dashboard for supported Flink versions.

## __Amazon Lex Model Building Service__
  - ### Features
    - Amazon Lex supports managing input and output contexts as well as default values for slots.

## __Amazon Lex Runtime Service__
  - ### Features
    - Amazon Lex now supports the ability to view and manage active contexts associated with a user session.

## __Amazon Redshift__
  - ### Features
    - Amazon Redshift support for returning ClusterNamespaceArn in describeClusters

## __Auto Scaling__
  - ### Features
    - You can now create Auto Scaling groups with multiple launch templates using a mixed instances policy, making it easy to deploy an AMI with an architecture that is different from the rest of the group.

# __2.15.31__ __2020-11-18__
## __AWS Backup__
  - ### Features
    - AWS Backup now supports cross-account backup, enabling AWS customers to securely copy their backups across their AWS accounts within their AWS organizations.

## __AWS CloudFormation__
  - ### Features
    - This release adds ChangeSets support for Nested Stacks. ChangeSets offer a preview of how proposed changes to a stack might impact existing resources or create new ones.

## __AWS CodeBuild__
  - ### Features
    - AWS CodeBuild - Adding Status field for Report Group

## __AWS Outposts__
  - ### Features
    - Mark the Name parameter in CreateOutpost as required.

## __AWS S3 Control__
  - ### Features
    - AWS S3 Storage Lens provides visibility into your storage usage and activity trends at the organization or account level, with aggregations by Region, storage class, bucket, and prefix.

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

## __Amazon ElastiCache__
  - ### Features
    - Adding Memcached 1.6 to parameter family

## __Amazon Elastic Compute Cloud__
  - ### Features
    - EC2 Fleet adds support of DeleteFleets API for instant type fleets. Now you can delete an instant type fleet and terminate all associated instances with a single API call.

# __2.15.30__ __2020-11-17__
## __AWS Network Firewall__
  - ### Features
    - (New Service) AWS Network Firewall is a managed network layer firewall service that makes it easy to secure your virtual private cloud (VPC) networks and block malicious traffic.

## __Amazon Chime__
  - ### Features
    - This release adds CRUD APIs for Amazon Chime SipMediaApplications and SipRules. It also adds the API for creating outbound PSTN calls for Amazon Chime meetings.

## __Amazon Connect Service__
  - ### Features
    - This release adds support for user hierarchy group and user hierarchy structure. For details, see the Release Notes in the Amazon Connect Administrator Guide.

## __Amazon Macie 2__
  - ### Features
    - The Amazon Macie API now has a lastRunErrorStatus property to indicate if account- or bucket-level errors occurred during the run of a one-time classification job or the latest run of a recurring job.

## __Amazon Relational Database Service__
  - ### Features
    - Support copy-db-snapshot in the one region on cross clusters and local cluster for RDSonVmware. Add target-custom-availability-zone parameter to specify where a snapshot should be copied.

## __Firewall Management Service__
  - ### Features
    - Added Firewall Manager policy support for AWS Network Firewall resources.

# __2.15.29__ __2020-11-16__
## __AWS CodePipeline__
  - ### Features
    - We show details about inbound executions and id of action executions in GetPipelineState API. We also add ConflictException to StartPipelineExecution, RetryStageExecution, StopPipelineExecution APIs.

## __AWS Database Migration Service__
  - ### Features
    - Adding MoveReplicationTask feature to move replication tasks between instances

## __AWS IoT Secure Tunneling__
  - ### Features
    - Support using multiple data streams per tunnel using the Secure Tunneling multiplexing feature.

## __AWS IoT SiteWise__
  - ### Features
    - This release supports Unicode characters for string operations in formulae computes in SiteWise. For more information, search for SiteWise in Amazon What's new or refer the SiteWise documentation.

## __AWS Service Catalog__
  - ### Features
    - Support import of CloudFormation stacks into Service Catalog provisioned products.

## __Amazon QuickSight__
  - ### Features
    - Adding new parameters for dashboard persistence

## __Amazon SageMaker Service__
  - ### Features
    - This feature enables customers to encrypt their Amazon SageMaker Studio storage volumes with customer master keys (CMKs) managed by them in AWS Key Management Service (KMS).

## __Amazon Simple Notification Service__
  - ### Features
    - Documentation updates for Amazon SNS.

## __Synthetics__
  - ### Features
    - AWS Synthetics now supports Environment Variables to assign runtime parameters in the canary scripts.

# __2.15.28__ __2020-11-13__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __AWS Shield__
  - ### Features
    - This release adds APIs for two new features: 1) Allow customers to bundle resources into protection groups and treat as a single unit. 2) Provide per-account event summaries to all AWS customers.

## __Amazon Textract__
  - ### Features
    - AWS Textract now allows customers to specify their own KMS key to be used for asynchronous jobs output results, AWS Textract now also recognizes handwritten text from English documents.

## __Elastic Load Balancing__
  - ### Features
    - Adds dualstack support for Network Load Balancers (TCP/TLS only), an attribute for WAF fail open for Application Load Balancers, and an attribute for connection draining for Network Load Balancers.

# __2.15.27__ __2020-11-12__
## __AWS IoT__
  - ### Features
    - This release adds a batchMode parameter to the IotEvents, IotAnalytics, and Firehose actions which allows customers to send an array of messages to the corresponding services

## __AWS RoboMaker__
  - ### Features
    - This release introduces Robomaker Worldforge TagsOnCreate which allows customers to tag worlds as they are being generated by providing the tags while configuring a world generation job.

## __AWS Service Catalog App Registry__
  - ### Features
    - AWS Service Catalog AppRegistry provides a repository of your applications, their resources, and the application metadata that you use within your enterprise.

## __Amazon Lex Model Building Service__
  - ### Features
    - Lex now supports es-ES, it-IT, fr-FR and fr-CA locales

## __Amazon Lightsail__
  - ### Features
    - This release adds support for Amazon Lightsail container services. You can now create a Lightsail container service, and deploy Docker images to it.

## __Amazon Personalize Runtime__
  - ### Features
    - Adds support to use dynamic filters with Personalize.

## __Amazon Polly__
  - ### Features
    - Amazon Polly adds new Australian English female voice - Olivia. Olivia is available as Neural voice only.

# __2.15.26__ __2020-11-11__
## __AWS Amplify__
  - ### Features
    - Whereas previously custom headers were set via the app's buildspec, custom headers can now be set directly on the Amplify app for both ci/cd and manual deploy apps.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for Automated ABR encoding and improved the reliability of embedded captions in accelerated outputs.

## __AWS Glue DataBrew__
  - ### Features
    - This is the initial SDK release for AWS Glue DataBrew. DataBrew is a visual data preparation tool that enables users to clean and normalize data without writing any code.

## __AWS Service Catalog__
  - ### Features
    - Adding support to remove a Provisioned Product launch role via UpdateProvisionedProductProperties

## __Amazon Forecast Service__
  - ### Features
    - Providing support of custom quantiles in CreatePredictor API.

## __Amazon QuickSight__
  - ### Features
    - QuickSight now supports Column-level security and connecting to Oracle data source.

## __Netty NIO HTTP Client__
  - ### Features
    - Upgrade Netty libraries to `4.1.53.Final`, and `netty-tcnative-boringssl-static` to `2.0.34.Final`.

  - ### Bugfixes
    - Fix a bug where the Netty HTTP client can leak memory when a response stream is cancelled prematurely but the upstream publisher continues to invoke onNext for some time before stopping. Fixes [#2051](https://github.com/aws/aws-sdk-java-v2/issues/2051).

# __2.15.25__ __2020-11-10__
## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fix default client error to have spaces between words.
        - Contributed by: [@frosforever](https://github.com/frosforever)
    - Replaced class loading from Thread.currentThread().getContextClassLoader() to ClassLoaderHelper in ProfileCredentialsUtils and WebIdentityCredentialsUtils, since it was causing Class not found error.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for Gateway Load Balancer VPC endpoints and VPC endpoint services

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - Add SessionId as a filter for DescribeSessions API

## __Auto Scaling__
  - ### Features
    - Documentation updates and corrections for Amazon EC2 Auto Scaling API Reference and SDKs.

## __Elastic Load Balancing__
  - ### Features
    - Added support for Gateway Load Balancers, which make it easy to deploy, scale, and run third-party virtual networking appliances.

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

[@frosforever](https://github.com/frosforever)
# __2.15.24__ __2020-11-09__
## __AWS DataSync__
  - ### Features
    - DataSync now enables customers to adjust the network bandwidth used by a running AWS DataSync task.

## __AWS IoT Analytics__
  - ### Features
    - AWS IoT Analytics now supports Late Data Notifications for datasets, dataset content creation using previous version IDs, and includes the LastMessageArrivalTime attribute for channels and datastores.

## __AWS Storage Gateway__
  - ### Features
    - Added bandwidth rate limit schedule for Tape and Volume Gateways

## __Amazon DynamoDB__
  - ### Features
    - This release adds supports for exporting Amazon DynamoDB table data to Amazon S3 to perform analytics at any scale.

## __Amazon EC2 Container Service__
  - ### Features
    - This release provides native support for specifying Amazon FSx for Windows File Server file systems as volumes in your Amazon ECS task definitions.

## __Amazon Elasticsearch Service__
  - ### Features
    - Adding support for package versioning in Amazon Elasticsearch Service

## __Amazon FSx__
  - ### Features
    - This release adds support for creating DNS aliases for Amazon FSx for Windows File Server, and using AWS Backup to automate scheduled, policy-driven backup plans for Amazon FSx file systems.

## __Amazon Macie 2__
  - ### Features
    - Sensitive data findings in Amazon Macie now include enhanced location data for Apache Avro object containers and Apache Parquet files.

## __Amazon Simple Storage Service__
  - ### Features
    - S3 Intelligent-Tiering adds support for Archive and Deep Archive Access tiers; S3 Replication adds replication metrics and failure notifications, brings feature parity for delete marker replication

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - add a new filter to allow customer to filter automation executions by using resource-group which used for execute automation

# __2.15.23__ __2020-11-06__
## __AWS Elemental MediaLive__
  - ### Features
    - Support for SCTE35 ad markers in OnCuePoint style in RTMP outputs.

## __AWS IoT SiteWise__
  - ### Features
    - Remove the CreatePresignedPortalUrl API

## __Amazon Data Lifecycle Manager__
  - ### Features
    - Amazon Data Lifecycle Manager now supports the creation and retention of EBS-backed Amazon Machine Images

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Network card support with four new attributes: NetworkCardIndex, NetworkPerformance, DefaultNetworkCardIndex, and MaximumNetworkInterfaces, added to the DescribeInstanceTypes API.

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

# __2.15.22__ __2020-11-05__
## __AWS App Mesh__
  - ### Features
    - This release adds circuit breaking capabilities to your mesh with connection pooling and outlier detection support.

## __AWS Lambda__
  - ### Features
    - Support Amazon MQ as an Event Source.

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

## __AWSKendraFrontendService__
  - ### Features
    - Amazon Kendra now supports providing user context in your query requests, Tokens can be JSON or JWT format. This release also introduces support for Confluence cloud datasources.

## __Amazon CloudWatch Events__
  - ### Features
    - With this release, customers can now reprocess past events by storing the events published on event bus in an encrypted archive.

## __Amazon DynamoDB__
  - ### Features
    - This release adds a new ReplicaStatus INACCESSIBLE_ENCRYPTION_CREDENTIALS for the Table description, indicating when a key used to encrypt a regional replica table is not accessible.

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

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service now provides the ability to define a custom endpoint for your domain and link an SSL certificate from ACM, making it easier to refer to Kibana and the domain endpoint.

## __Amazon EventBridge__
  - ### Features
    - With this release, customers can now reprocess past events by storing the events published on event bus in an encrypted archive.

## __Amazon Fraud Detector__
  - ### Features
    - Added support for deleting resources like Variables, ExternalModels, Outcomes, Models, ModelVersions, Labels, EventTypes and EntityTypes. Updated DeleteEvent operation to catch missing exceptions.

## __Amazon Relational Database Service__
  - ### Features
    - Supports a new parameter to set the max allocated storage in gigabytes for the CreateDBInstanceReadReplica API.

# __2.15.21__ __2020-11-04__
## __AWS IoT__
  - ### Features
    - Updated API documentation and added paginator for AWS Iot Registry ListThingPrincipals API.

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

## __AWS Service Catalog__
  - ### Features
    - Service Catalog API ListPortfolioAccess can now support a maximum PageSize of 100.

## __AWS X-Ray__
  - ### Features
    - Releasing new APIs GetInsightSummaries, GetInsightEvents, GetInsight, GetInsightImpactGraph and updating GetTimeSeriesServiceStatistics API for AWS X-Ray Insights feature

## __AWSMarketplace Metering__
  - ### Features
    - Adding Vendor Tagging Support in MeterUsage and BatchMeterUsage API.

## __Amazon CloudWatch__
  - ### Features
    - Documentation updates for monitoring

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Added support for Client Connect Handler for AWS Client VPN. Fleet supports launching replacement instances in response to Capacity Rebalance recommendation.

## __Amazon Elasticsearch Service__
  - ### Features
    - Amazon Elasticsearch Service now supports native SAML authentication that seamlessly integrates with the customers' existing SAML 2.0 Identity Provider (IdP).

## __Amazon Transcribe Streaming Service__
  - ### Features
    - With this release, Amazon Transcribe now supports real-time transcription from audio sources in Italian (it-IT) and German(de-DE).

## __AmazonMQ__
  - ### Features
    - Amazon MQ introduces support for RabbitMQ, a popular message-broker with native support for AMQP 0.9.1. You can now create fully-managed RabbitMQ brokers in the cloud.

## __Auto Scaling__
  - ### Features
    - Capacity Rebalance helps you manage and maintain workload availability during Spot interruptions by proactively augmenting your Auto Scaling group with a new instance before interrupting an old one.

# __2.15.20__ __2020-11-02__
## __AWS DynamoDB Enhanced Client__
  - ### Bugfixes
    - Publisher streams returned by async resources in the DynamoDB Enhanced Client now correctly handle mapping errors when they are encountered in the stream by calling onError on the subscriber and then implicitly cancelling the subscription. Previously the stream would just permanently hang and never complete.

## __AWS SDK for Java v2__
  - ### Features
    - Added code generation validation that customer-visible identifiers are idiomatic (do not contain underscores). Services with underscores in their models can use rename customizations to fix these issues, or apply the 'underscoresInNameBehavior = ALLOW' customization.
    - Upgrade `org.apache.httpcomponents:httpclient` version to `4.5.13`

  - ### Bugfixes
    - Fixing race condition in EventStreamAsyncResponseTransformer.  Field eventsToDeliver is a LinkedList, i.e., not thread-safe.  Accesses to field eventsToDeliver are protected by synchronization on itself, but not in 1 location.
    - The mapped publisher returned by SdkPublisher.map will now handle exceptions thrown by the mapping function by calling onError on its subscriber and then cancelling the subscription rather than throwing it back to the publishing process when it attempts to publish data.

## __AWS SSO OIDC__
  - ### Deprecations
    - Renamed/deprecated 'error_description' fields in exceptions in favor of 'errorDescription'.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release adds support for the following features: 1. P4d instances based on NVIDIA A100 GPUs. 2. NetworkCardIndex attribute to support multiple network cards.

# __2.15.19__ __2020-10-30__
## __AWS Database Migration Service__
  - ### Features
    - Adding DocDbSettings to support DocumentDB as a source.

## __AWS Elemental MediaLive__
  - ### Features
    - Support for HLS discontinuity tags in the child manifests. Support for incomplete segment behavior in the media output. Support for automatic input failover condition settings.

## __AWS SDK for Java v2__
  - ### Bugfixes
    - Fixing FilteringSubscriber and LimitingSubscriber to complete when subscribing criteria is completed.

## __Amazon ElastiCache__
  - ### Features
    - Documentation updates for AWS ElastiCache

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API adds an eqExactMatch operator for filtering findings. With this operator you can increase the precision of your finding filters and suppression rules.

## __Amazon Simple Notification Service__
  - ### Features
    - Documentation updates for Amazon SNS

## __Braket__
  - ### Features
    - This release supports tagging for Amazon Braket quantum-task resources. It also supports tag-based access control for quantum-task APIs.

## __EC2 Image Builder__
  - ### Features
    - This feature increases the number of accounts that can be added to the Launch permissions within an Image Builder Distribution configuration.

# __2.15.18__ __2020-10-29__
## __AWS Marketplace Commerce Analytics__
  - ### Features
    - Documentation updates for marketplacecommerceanalytics to specify four data sets which are deprecated.

## __AWS Storage Gateway__
  - ### Features
    - Adding support for access based enumeration on SMB file shares, file share visibility on SMB file shares, and file upload notifications for all file shares

## __Amazon API Gateway__
  - ### Features
    - Support disabling the default execute-api endpoint for REST APIs.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - Support for Appliance mode on Transit Gateway that simplifies deployment of stateful network appliances. Added support for AWS Client VPN Self-Service Portal.

## __Amazon Simple Email Service__
  - ### Features
    - This release enables customers to manage their own contact lists and end-user subscription preferences.

## __CodeArtifact__
  - ### Features
    - Add support for tagging of CodeArtifact domain and repository resources.

## __Elastic Load Balancing__
  - ### Features
    - Application Load Balancer (ALB) now supports the gRPC protocol-version. With this release, customers can use ALB to route and load balance gRPC traffic between gRPC enabled clients and microservices.

# __2.15.17__ __2020-10-28__
## __AWS IoT__
  - ### Features
    - This release adds support for GG-Managed Job Namespace

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

  - ### Bugfixes
    - Fixed an issue where marshalling of a modeled object was not honoring the has* method on a list/map.
    - Fixed an issue where the toString/equals/hashCode on a modeled object were not honoring the has* methods for lists and maps.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - AWS Nitro Enclaves general availability. Added support to RunInstances for creating enclave-enabled EC2 instances. New APIs to associate an ACM certificate with an IAM role, for enclave consumption.

## __Amazon WorkMail__
  - ### Features
    - Documentation update for Amazon WorkMail

# __2.15.16__ __2020-10-27__
## __AWS Glue__
  - ### Features
    - AWS Glue machine learning transforms now support encryption-at-rest for labels and trained models.

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

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

## __AWSKendraFrontendService__
  - ### Features
    - Amazon Kendra now supports indexing data from Confluence Server.

## __Amazon Neptune__
  - ### Features
    - This feature enables custom endpoints for Amazon Neptune clusters. Custom endpoints simplify connection management when clusters contain instances with different capacities and configuration settings.

## __Amazon SageMaker Service__
  - ### Features
    - This release enables customers to bring custom images for use with SageMaker Studio notebooks.

# __2.15.14__ __2020-10-23__
## __AWS MediaTailor__
  - ### Features
    - MediaTailor now supports ad marker passthrough for HLS. Use AdMarkerPassthrough to pass EXT-X-CUE-IN, EXT-X-CUE-OUT, and EXT-X-SPLICEPOINT-SCTE35 from origin manifests into personalized manifests.

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API includes miscellaneous updates and improvements to the documentation.

## __Amazon QuickSight__
  - ### Features
    - Support description on columns.

# __2.15.13__ __2020-10-22__
## __AWS SDK for Java v2__
  - ### Features
    - Updated service endpoint metadata.

## __AWS Service Catalog__
  - ### Features
    - Documentation updates for servicecatalog

## __Access Analyzer__
  - ### Features
    - API Documentation updates for IAM Access Analyzer.

## __Amazon Appflow__
  - ### Features
    - Salesforce connector creation with customer provided client id and client secret, incremental pull configuration, salesforce upsert write operations and execution ID when on-demand flows are executed.

## __Amazon Simple Notification Service__
  - ### Features
    - SNS now supports a new class of topics: FIFO (First-In-First-Out). FIFO topics provide strictly-ordered, deduplicated, filterable, encryptable, many-to-many messaging at scale.

# __2.15.12__ __2020-10-21__
## __AWS Global Accelerator__
  - ### Features
    - This release adds support for specifying port overrides on AWS Global Accelerator endpoint groups.

## __AWS Glue__
  - ### Features
    - AWS Glue crawlers now support incremental crawls for the Amazon Simple Storage Service (Amazon S3) data source.

## __AWS Organizations__
  - ### Features
    - AWS Organizations renamed the 'master account' to 'management account'.

## __AWSKendraFrontendService__
  - ### Features
    - This release adds custom data sources: a new data source type that gives you full control of the documents added, modified or deleted during a data source sync while providing run history metrics.

## __Amazon CloudFront__
  - ### Features
    - CloudFront adds support for managing the public keys for signed URLs and signed cookies directly in CloudFront (it no longer requires the AWS root account).

## __Amazon Elastic Compute Cloud__
  - ### Features
    - instance-storage-info nvmeSupport added to DescribeInstanceTypes API

# __2.15.11__ __2020-10-20__
## __AWS AppSync__
  - ### Features
    - Documentation updates to AppSync to correct several typos.

## __AWS Batch__
  - ### Features
    - Adding evaluateOnExit to job retry strategies.

## __AWS Elastic Beanstalk__
  - ### Features
    - EnvironmentStatus enum update to include Aborting, LinkingFrom and LinkingTo

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

  - ### Bugfixes
    - Fixed an issue where requestBody and asyncRequestBody were not visible in ExecutionInterceptor.afterMarshalling.

## __Amazon DynamoDB Enhanced Client__
  - ### Bugfixes
    - Fix for handling special characters in attribute names with WRITE_IF_NOT_EXISTS update behavior

## __Amazon S3__
  - ### Features
    - Moved the logic for calculating the Content-MD5 checksums from s3 to sdk-core. As always, make sure to use a version of 'sdk-core' greater than or equal to your version of 's3'. If you use an old version of 'sdk-core' and a new version of 's3', you will receive errors that Content-MD5 is required.

  - ### Bugfixes
    - Fixed an issue where metrics were not being collected for Amazon S3 (or other XML services)

# __2.15.10__ __2020-10-19__
## __AWS Backup__
  - ### Features
    - Documentation updates for Cryo

## __AWS Service Catalog__
  - ### Features
    - An Admin can now update the launch role associated with a Provisioned Product. Admins and End Users can now view the launch role associated with a Provisioned Product.

## __Amazon CloudFront__
  - ### Features
    - Amazon CloudFront adds support for Origin Shield.

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

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This Patch Manager release now supports Common Vulnerabilities and Exposure (CVE) Ids for missing packages via the DescribeInstancePatches API.

## __HTTP Client SPI__
  - ### Features
    - Calling the SdkHttpFullRequest uri() builder method, query parameters of the provided URI will be kept.
      This can be useful in case you want to provide an already fully formed URI like a callback URI.

# __2.15.9__ __2020-10-16__
## __AWS Elemental MediaLive__
  - ### Features
    - The AWS Elemental MediaLive APIs and SDKs now support the ability to transfer the ownership of MediaLive Link devices across AWS accounts.

## __AWS Organizations__
  - ### Features
    - Documentation updates for AWS Organizations.

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

# __2.15.8__ __2020-10-15__
## __AWS Budgets__
  - ### Features
    - This release introduces AWS Budgets Actions, allowing you to define an explicit response(or set of responses) to take when your budget exceeds it's action threshold.

## __AWS Cost Explorer Service__
  - ### Features
    - This release improves email validation for subscriptions on the SDK endpoints.

## __AWS Database Migration Service__
  - ### Features
    - When creating Endpoints, Replication Instances, and Replication Tasks, the feature provides you the option to specify friendly name to the resources.

## __AWS Glue__
  - ### Features
    - API Documentation updates for Glue Get-Plan API

## __AWS Ground Station__
  - ### Features
    - Adds error message attribute to DescribeContact DataflowDetails

## __AWS IoT__
  - ### Features
    - Add new variable, lastStatusChangeDate, to DescribeDomainConfiguration API

## __AWS Lambda Maven Archetype__
  - ### Bugfixes
    - Fixed an issue where archetype generation failed with latest maven-archetype-plugin. See [#1981](https://github.com/aws/aws-sdk-java-v2/issues/1981)

## __AWS SDK for Java v2__
  - ### Features
    - Add support for plus (+) character in profile names
    - Updated service endpoint metadata.

## __AWS Transfer Family__
  - ### Features
    - Add support to associate VPC Security Groups at server creation.

## __AWS X-Ray__
  - ### Features
    - Enhancing CreateGroup, UpdateGroup, GetGroup and GetGroups APIs to support configuring X-Ray Insights Notifications. Adding TraceLimit information into X-Ray BatchGetTraces API response.

## __Access Analyzer__
  - ### Features
    - This release adds support for the ApplyArchiveRule api in IAM Access Analyzer. The ApplyArchiveRule api allows users to apply an archive rule retroactively to existing findings in an analyzer.

## __Amazon Macie 2__
  - ### Features
    - This release of the Amazon Macie API adds support for pausing and resuming classification jobs. Also, sensitive data findings now include location data for up to 15 occurrences of sensitive data.

## __Amazon Rekognition__
  - ### Features
    - This SDK Release introduces new API (DetectProtectiveEquipment) for Amazon Rekognition. This release also adds ServiceQuotaExceeded exception to Amazon Rekognition IndexFaces API.

## __Amazon Relational Database Service__
  - ### Features
    - Return tags for all resources in the output of DescribeDBInstances, DescribeDBSnapshots, DescribeDBClusters, and DescribeDBClusterSnapshots API operations.

## __Amazon Simple Systems Manager (SSM)__
  - ### Features
    - This Patch Manager release now supports searching for available packages from Amazon Linux and Amazon Linux 2 via the DescribeAvailablePatches API.

## __Amazon WorkMail__
  - ### Features
    - Add CreateOrganization and DeleteOrganization API operations.

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

# __2.15.7__ __2020-10-09__
## __AWS Amplify__
  - ### Features
    - Performance mode optimizes for faster hosting performance by keeping content cached at the edge for a longer interval - enabling can make code changes can take up to 10 minutes to roll out.

## __AWS Elemental MediaLive__
  - ### Features
    - WAV audio output. Extracting ancillary captions in MP4 file inputs. Priority on channels feeding a multiplex (higher priority channels will tend to have higher video quality).

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

## __AWS Service Catalog__
  - ### Features
    - This new API takes either a ProvisonedProductId or a ProvisionedProductName, along with a list of 1 or more output keys and responds with the (key,value) pairs of those outputs.

## __Amazon Elastic Kubernetes Service__
  - ### Features
    - This release introduces a new Amazon EKS error code: "ClusterUnreachable"

## __Amazon Import/Export Snowball__
  - ### Features
    - We added new APIs to allow customers to better manage their device shipping. You can check if your shipping label expired, generate a new label, and tell us that you received or shipped your job.

# __2.15.6__ __2020-10-08__
## __AWS Cost Explorer Service__
  - ### Features
    - You can now create hierarchical cost categories by choosing "Cost Category" as a dimension. You can also track the status of your cost category updates to your cost and usage information.

## __Amazon CloudWatch Events__
  - ### Features
    - Amazon EventBridge (formerly called CloudWatch Events) adds support for target Dead-letter Queues and custom retry policies.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - AWS EC2 RevokeSecurityGroupIngress and RevokeSecurityGroupEgress APIs will return IpPermissions which do not match with any existing IpPermissions for security groups in default VPC and EC2-Classic.

## __Amazon EventBridge__
  - ### Features
    - Amazon EventBridge adds support for target Dead Letter Queues (DLQs) and custom retry policies.

## __Amazon Rekognition__
  - ### Features
    - This release provides location information for the manifest validation files.

## __Amazon Relational Database Service__
  - ### Features
    - Supports a new parameter to set the max allocated storage in gigabytes for restore database instance from S3 and restore database instance to a point in time APIs.

## __Amazon SageMaker Service__
  - ### Features
    - This release enables Sagemaker customers to convert Tensorflow and PyTorch models to CoreML (ML Model) format.

## __Amazon Simple Notification Service__
  - ### Features
    - Documentation updates for SNS.

# __2.15.5__ __2020-10-07__
## __AWS Compute Optimizer__
  - ### Features
    - This release enables AWS Compute Optimizer to analyze EC2 instance-level EBS read and write operations, and throughput when generating recommendations for your EC2 instances and Auto Scaling groups.

## __AWS Cost Explorer Service__
  - ### Features
    - Enables Rightsizing Recommendations to analyze and present EC2 instance-level EBS metrics when generating recommendations. Returns AccessDeniedException if the account is not opted into Rightsizing

## __AWS Elemental MediaPackage__
  - ### Features
    - AWS Elemental MediaPackage provides access logs that capture detailed information about requests sent to a customer's MediaPackage channel.

## __Amazon ElastiCache__
  - ### Features
    - This release introduces User and UserGroup to allow customers to have access control list of the Redis resources for AWS ElastiCache. This release also adds support for Outposts for AWS ElastiCache.

# __2.15.4__ __2020-10-06__
## __AWS Database Migration Service__
  - ### Features
    - Added new S3 endpoint settings to allow partitioning CDC data by date for S3 as target. Exposed some Extra Connection Attributes as endpoint settings for relational databases as target.

## __AWS Marketplace Catalog Service__
  - ### Features
    - AWS Marketplace Catalog now supports FailureCode for change workflows to help differentiate client errors and server faults.

## __Amazon Elastic Compute Cloud__
  - ### Features
    - This release supports returning additional information about local gateway virtual interfaces, and virtual interface groups.

## __Amazon Kinesis Analytics__
  - ### Features
    - Amazon Kinesis Analytics now supports StopApplication with 'force' option

# __2.15.3__ __2020-10-05__
## __AWS DynamoDB Enhanced Client__
  - ### Features
    - Added support for attribute level custom update behaviors such as 'write if not exists'.

## __AWS Elemental MediaConvert__
  - ### Features
    - AWS Elemental MediaConvert SDK has added support for AVC-I and VC3 encoding in the MXF OP1a container, Nielsen non-linear watermarking, and InSync FrameFormer frame rate conversion.

## __AWS Glue__
  - ### Features
    - AWS Glue crawlers now support Amazon DocumentDB (with MongoDB compatibility) and MongoDB collections. You can choose to crawl the entire data set or only a small sample to reduce crawl time.

## __Amazon DynamoDB__
  - ### Features
    - This release adds a new ReplicaStatus REGION DISABLED for the Table description. This state indicates that the AWS Region for the replica is inaccessible because the AWS Region is disabled.

## __Amazon DynamoDB Streams__
  - ### Features
    - Documentation updates for streams.dynamodb

## __Amazon SageMaker Service__
  - ### Features
    - This release adds support for launching Amazon SageMaker Studio in your VPC. Use AppNetworkAccessType in CreateDomain API to disable access to public internet and restrict the network traffic to VPC.

# __2.15.2__ __2020-10-02__
## __AWS Batch__
  - ### Features
    - Support tagging for Batch resources (compute environment, job queue, job definition and job) and tag based access control on Batch APIs

## __AWS Cloud Map__
  - ### Features
    - Added support for optional parameters for DiscoverInstances API in AWS Cloud Map

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

## __Amazon Personalize Events__
  - ### Features
    - Adds new APIs to write item and user records to Datasets.

## __Amazon Relational Database Service__
  - ### Features
    - Adds the NCHAR Character Set ID parameter to the CreateDbInstance API for RDS Oracle.

## __Amazon Simple Storage Service__
  - ### Features
    - Amazon S3 Object Ownership is a new S3 feature that enables bucket owners to automatically assume ownership of objects that are uploaded to their buckets by other AWS Accounts.

## __Apache HTTP Client__
  - ### Bugfixes
    - Fixed an issue in Apache HTTP client where a request with path parameter as a single slash threw invalid host name error.

## __Elastic Load Balancing__
  - ### Features
    - This release adds support for tagging listeners, rules, and target groups on creation. This release also supported tagging operations through tagging api's for listeners and rules.

# __2.15.1__ __2020-10-01__
## __AWS AppSync__
  - ### Features
    - Exposes the wafWebAclArn field on GraphQL api records. The wafWebAclArn field contains the amazon resource name of a WAF Web ACL if the AWS AppSync API is associated with one.

## __AWS Glue__
  - ### Features
    - Adding additional optional map parameter to get-plan api

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

## __AWS WAFV2__
  - ### Features
    - AWS WAF is now available for AWS AppSync GraphQL APIs. AWS WAF protects against malicious attacks with AWS Managed Rules or your own custom rules. For more information see the AWS WAF Developer Guide.

## __Amazon Elastic MapReduce__
  - ### Features
    - Documentation updates for elasticmapreduce

## __Amazon QuickSight__
  - ### Features
    - QuickSight now supports connecting to AWS Timestream data source

## __Managed Streaming for Kafka__
  - ### Features
    - Added support for Enabling Zookeeper Encryption in Transit for AWS MSK.

# __2.15.0__ __2020-09-30__
## __AWS DataSync__
  - ### Features
    - This release enables customers to create s3 location for S3 bucket's located on an AWS Outpost.

## __AWS Direct Connect__
  - ### Features
    - Documentation updates for AWS Direct Connect.

## __AWS IoT__
  - ### Features
    - AWS IoT Rules Engine adds Timestream action. The Timestream rule action lets you stream time-series data from IoT sensors and applications to Amazon Timestream databases for time series analysis.

## __AWS MediaConnect__
  - ### Features
    - MediaConnect now supports reservations to provide a discounted rate for a specific outbound bandwidth over a period of time.

## __AWS S3 Control__
  - ### Features
    - Amazon S3 on Outposts expands object storage to on-premises AWS Outposts environments, enabling you to store and retrieve objects using S3 APIs and features.

## __AWS SDK for Java v2__
  - ### Features
    - This release introduces Waiters for the AWS SDK for Java v2! Waiters make it easier for customers to wait for a resource to transition into a desired state. It comes handy when customers are interacting with operations that are eventually consistent on the service side. For more information on Waiters, head on over to the [AWS Developer Blog](https://aws.amazon.com/blogs/developer/category/developer-tools/aws-sdk-for-java/) and check out the [Developer Guide](http://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/welcome.html).
    - Updated service endpoint metadata.

## __AWS SecurityHub__
  - ### Features
    - Added several new resource details objects. Added additional details for CloudFront distributions, IAM roles, and IAM access keys. Added a new ResourceRole attribute for resources.

## __Amazon Elastic MapReduce__
  - ### Features
    - Amazon EMR customers can now use EC2 placement group to influence the placement of master nodes in a high-availability (HA) cluster across distinct underlying hardware to improve cluster availability.

## __Amazon Pinpoint__
  - ### Features
    - Amazon Pinpoint - Features - Customers can start a journey based on an event being triggered by an endpoint or user.

## __Amazon S3 on Outposts__
  - ### Features
    - Amazon S3 on Outposts expands object storage to on-premises AWS Outposts environments, enabling you to store and retrieve objects using S3 APIs and features.

## __Amazon Simple Storage Service__
  - ### Features
    - Amazon S3 on Outposts expands object storage to on-premises AWS Outposts environments, enabling you to store and retrieve objects using S3 APIs and features.

## __Application Auto Scaling__
  - ### Features
    - This release extends Auto Scaling support for cluster storage of Managed Streaming for Kafka. Auto Scaling monitors and automatically expands storage capacity when a critical usage threshold is met.

## __EC2 Image Builder__
  - ### Features
    - EC2 Image Builder adds support for copying AMIs created by Image Builder to accounts specific to each Region.
