<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>AWS Developer Tools Blog</title>
	<atom:link href="https://aws.amazon.com/blogs/developer/feed/" rel="self" type="application/rss+xml"/>
	<link>https://aws.amazon.com/blogs/developer/</link>
	<description/>
	<lastBuildDate>Wed, 10 Jun 2026 18:35:58 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>AWS CLI v1 maintenance mode: announcing changes to dependency updates</title>
		<link>https://aws.amazon.com/blogs/developer/aws-cli-v1-maintenance-mode-announcing-changes-to-dependency-updates/</link>
		
		<dc:creator><![CDATA[Kenneth Daily]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 18:31:56 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<guid isPermaLink="false">c03b2070b65a625131a0e0abfe182ce9626480a5</guid>

					<description>Learn how AWS CLI v1 maintenance mode will bundle botocore and s3transfer dependencies starting July 15, 2026, and what this means for your workflows.</description>
										<content:encoded>&lt;p&gt;When version 1 of the AWS Command Line Interface (&lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CLI v1&lt;/a&gt;) enters maintenance mode on July 15, 2026, the way its botocore and s3transfer dependencies are bundled will change. This post explains these changes and provides steps to minimize impacts on your workflows and applications. For more information about AWS CLI v1 maintenance mode, refer to the blog post &lt;a href="https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/" target="_blank" rel="noopener noreferrer"&gt;CLI v1 Maintenance Mode Announcement&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Background&lt;/h2&gt; 
&lt;p&gt;The AWS CLI v1 is built on top of two foundational Python libraries:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;botocore&lt;/strong&gt; is the low-level library that provides AWS service definitions, request signing, response parsing, and retry logic. When AWS launches a new service or adds new API operations to an existing service, those changes are delivered through botocore updates.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;s3transfer&lt;/strong&gt; is the library that manages Amazon S3 file transfers, including multipart uploads, parallel downloads, and transfer configuration. High-level S3 commands in the AWS CLI rely on s3transfer, such as &lt;code&gt;aws s3 cp&lt;/code&gt; and &lt;code&gt;aws s3 sync&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;What’s happening?&lt;/h2&gt; 
&lt;p&gt;Currently, each version of the AWS CLI v1 depends on specific versions of botocore and s3transfer. These dependencies are installed as separate packages. This means that upgrading the AWS CLI v1 also brings in a newer version of these packages. Starting with maintenance mode, botocore and s3transfer will be vendored (bundled and packaged directly) into the AWS CLI v1 codebase. The AWS CLI v1 will no longer rely on the standalone packages. This represents a significant shift in how dependencies are managed within the AWS CLI v1.&lt;/p&gt; 
&lt;p&gt;If you rely on automatic dependency updates when upgrading the AWS CLI v1, this behavior will change. The AWS CLI v1 will include its own internal copies of botocore and s3transfer. Updates to these internal copies will only occur when AWS releases a new version of CLI v1. Installing or upgrading the standalone botocore or s3transfer packages will have no effect on the versions used by the AWS CLI v1.&lt;/p&gt; 
&lt;p&gt;botocore and s3transfer will continue to be developed and released as separate packages, because they are also dependencies of the &lt;a href="https://aws.amazon.com/sdk-for-python/" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Python&lt;/a&gt; (boto3). However, those standalone package updates will not affect the AWS CLI v1—the CLI will only use its own bundled copies.&lt;/p&gt; 
&lt;h3&gt;How you may be affected&lt;/h3&gt; 
&lt;p&gt;Upgrading the AWS CLI v1 will no longer upgrade the standalone botocore and s3transfer packages. The AWS CLI v1 will use only its own internal copies, and the standalone packages will remain at whatever version is independently installed.&lt;/p&gt; 
&lt;p&gt;If your environment has both the AWS CLI v1 and boto3 installed, they will each use their own separate copies of botocore and s3transfer. Updating either the AWS CLI or boto3 will not affect the other’s dependencies. Additionally, because the AWS CLI v1 will bundle its own copies of botocore and s3transfer alongside the standalone packages used by boto3, environments with both installed will contain two copies of these libraries.&lt;/p&gt; 
&lt;p&gt;Updates to the standalone botocore and s3transfer packages will continue as before, since they are also dependencies of boto3. However, those updates will not reach the AWS CLI v1 unless a new AWS CLI v1 version is released with updated internal copies. As described in the maintenance mode announcement, new AWS CLI v1 versions will only be released to address critical bug fixes and security issues.&lt;/p&gt; 
&lt;h2&gt;Recommended actions&lt;/h2&gt; 
&lt;p&gt;To stay updated with the latest AWS services and features, we recommend that you migrate to AWS CLI v2. To learn more about transitioning to AWS CLI v2, refer to the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener noreferrer"&gt;Migration guide for the AWS CLI version 2&lt;/a&gt;. Additionally, verify if your workflows rely on botocore or s3transfer brought into your environment via the AWS CLI v1. If you have other applications in the same environment that consume them, you may need to explicitly pin their dependency versions. Be sure to validate your existing scripts and automation with the new maintenance mode releases. Last, monitor the &lt;a href="https://github.com/aws/aws-cli/blob/develop/CHANGELOG.rst" target="_blank" rel="noopener noreferrer"&gt;AWS CLI changelog&lt;/a&gt; to stay informed about new AWS CLI v1 versions and vendored dependency updates.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;As the AWS CLI v1 enters maintenance mode on July 15, 2026, the botocore and s3transfer dependencies will be vendored, which may affect your workflows and scripts. While the CLI v1 will continue to receive critical updates, we encourage you to migrate to AWS CLI v2 for the latest features and improvements.&lt;/p&gt; 
&lt;h2&gt;Feedback&lt;/h2&gt; 
&lt;p&gt;If you need migration assistance or have feedback, reach out to your usual AWS support contacts. You can also open an &lt;a href="https://github.com/aws/aws-cli/issues" target="_blank" rel="noopener noreferrer"&gt;issue on GitHub&lt;/a&gt;. Thank you for using the AWS CLI!&lt;/p&gt;</content:encoded>
					
		
		
			</item>
		<item>
		<title>Introducing Open-Source Skills for AWS SDK Best Practices</title>
		<link>https://aws.amazon.com/blogs/developer/introducing-open-source-skills-for-aws-sdk-best-practices/</link>
					
		
		<dc:creator><![CDATA[David Yaffe]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 18:54:26 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[aws-sdk-js-v3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">e7383f588e1c097bd2985385d6e129809a3ce7a4</guid>

					<description>We released a set of AWS SDK Skills as part of the open-source Agent Toolkit for AWS. These are AI skills that teach coding agents how to follow AWS SDK best practices. The project is available on GitHub under the Apache-2.0 license. The problem AI coding agents know the general shape of AWS SDK usage, […]</description>
										<content:encoded>&lt;p&gt;We released a set of &lt;a href="https://github.com/aws/agent-toolkit-for-aws/tree/main/skills/core-skills"&gt;AWS SDK Skills&lt;/a&gt; as part of the open-source &lt;a href="https://github.com/aws/agent-toolkit-for-aws/tree/main"&gt;Agent Toolkit for AWS&lt;/a&gt;. These are AI skills that teach coding agents how to follow AWS SDK best practices. The project is available on GitHub under the Apache-2.0 license.&lt;/p&gt; 
&lt;h2&gt;The problem&lt;/h2&gt; 
&lt;p&gt;AI coding agents know the general shape of AWS SDK usage, but they get the details wrong. They generate incorrect API names, use incorrect parameter types, and miss SDK-specific patterns like paginators, waiters, and high-level APIs such as the transfer manager for Amazon Simple Storage Service (Amazon S3). These errors are especially common for newer SDKs like the &lt;a href="https://docs.aws.amazon.com/sdk-for-swift/"&gt;AWS SDK for Swift&lt;/a&gt;, where agents generate code that looks plausible but fails to compile.&lt;/p&gt; 
&lt;p&gt;As developers increasingly rely on AI agents to write AWS SDK code, we need to make sure those agents produce code that compiles, follows best practices, and uses each SDK the way it was intended to be used.&lt;/p&gt; 
&lt;h2&gt;What’s in a skill&lt;/h2&gt; 
&lt;p&gt;Skills are modular packages that give AI coding agents specialized SDK knowledge. Each skill is authored by the SDK team that owns the language, so it reflects the things agents consistently get wrong for that specific SDK. A skill includes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;SKILL.md&lt;/code&gt; — core instructions with SDK-specific patterns and concrete examples&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;references/&lt;/code&gt; — on-demand documentation for deeper topics, loaded only when needed&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;scripts/&lt;/code&gt; — automation for build, test, and validation workflows&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Skills are agent-agnostic. They work with any coding agent that supports the &lt;a href="https://github.com/agentskills/agentskills"&gt;open skills format&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Common mistakes skills help prevent&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Code that doesn’t compile.&lt;/strong&gt; This is the most common failure mode for newer SDKs where the agent’s training data is thin or out of date. The &lt;a href="https://docs.aws.amazon.com/sdk-for-swift/"&gt;AWS SDK for Swift&lt;/a&gt; uses Swift concurrency throughout. Operations are async-throwing, and so are the convenience client constructors. Agents frequently miss this and produce code that looks reasonable but doesn’t build:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="language-swift"&gt;// What agents tend to write. Does not compile.
let client = S3Client()
let response = client.listBuckets(input: ListBucketsInput())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Both lines are wrong: &lt;code&gt;S3Client()&lt;/code&gt; is &lt;code&gt;async throws&lt;/code&gt;, and so is &lt;code&gt;listBuckets&lt;/code&gt;. With the Swift skill installed, the agent writes the modern Swift concurrency form:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="language-swift"&gt;let config = try await S3Client.S3ClientConfig(region: "us-west-2")
let client = S3Client(config: config)
let response = try await client.listBuckets(input: ListBucketsInput())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The first version sends the developer back to the docs to figure out why a plausible-looking line won’t build. The second one runs.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Code that runs but performs poorly or costs more.&lt;/strong&gt; Agents often skip SDK features that exist precisely to make AWS calls efficient: paginators for &lt;code&gt;ListObjects&lt;/code&gt; and similar APIs, waiters for resource-state polling, and the SDK’s high-level file methods like &lt;code&gt;upload_file&lt;/code&gt; / &lt;code&gt;download_file&lt;/code&gt; for large transfers. A handwritten loop that calls &lt;code&gt;ListObjects&lt;/code&gt; without pagination silently drops results past the first page, polling code without waiters burns API calls and risks throttling, and manual file I/O for S3 transfers gives up multipart uploads and parallelism. The code compiles and often appears to work in small tests, but breaks once you’re dealing with real data volumes. With a skill installed, the agent reaches for the right SDK feature for the job: paginators for list operations, waiters for state polling, and the high-level transfer methods for files.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Code that runs but has subtle bugs.&lt;/strong&gt; Manually marshalling DynamoDB types like &lt;code&gt;{"S": "value"}&lt;/code&gt; is easy to get slightly wrong in ways that fail only on certain inputs. Catching a generic &lt;code&gt;Exception&lt;/code&gt; instead of typed exceptions like &lt;code&gt;ConditionalCheckFailedException&lt;/code&gt; makes retry logic swallow real failures. With a skill installed, the agent reaches for the document client (which handles the conversion correctly) and uses typed exceptions tied to the actual operations it’s calling.&lt;/p&gt; 
&lt;h2&gt;Measuring the impact&lt;/h2&gt; 
&lt;p&gt;We evaluate each skill against a benchmark of real SDK tasks (Amazon S3 operations, Amazon DynamoDB queries, client configuration, presigned URL generation, credential management) and grade the generated code on whether it compiles, passes lint, and actually does what the task asked for (judged by an LLM). Every task runs twice: once with no skill installed, and once with the relevant skill loaded.&lt;/p&gt; 
&lt;p&gt;Across our test suite, code generated with a skill installed consistently passed more checks than code generated without one.&lt;/p&gt; 
&lt;h2&gt;Available skills&lt;/h2&gt; 
&lt;p&gt;The following table summarizes the skills available at launch:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Skill&lt;/th&gt; 
   &lt;th&gt;SDK&lt;/th&gt; 
   &lt;th&gt;What it covers&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href="https://github.com/aws/agent-toolkit-for-aws/tree/main/skills/core-skills/aws-sdk-swift-usage"&gt;&lt;code&gt;aws-sdk-swift-usage&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href="https://docs.aws.amazon.com/sdk-for-swift/"&gt;AWS SDK for Swift&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Async patterns, struct-based config types, client initialization&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href="https://github.com/aws/agent-toolkit-for-aws/tree/main/skills/core-skills/aws-sdk-js-v3-usage"&gt;&lt;code&gt;aws-sdk-js-v3-usage&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href="https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/"&gt;AWS SDK for JavaScript v3&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Package structure, client styles, middleware, runtime validation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href="https://github.com/aws/agent-toolkit-for-aws/tree/main/skills/core-skills/aws-sdk-python-usage"&gt;&lt;code&gt;aws-sdk-python-usage&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href="https://docs.aws.amazon.com/boto3/latest/"&gt;Boto3 / botocore&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Client vs. resource interfaces, paginators, waiters, error handling&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Get started&lt;/h2&gt; 
&lt;p&gt;You’ll need a coding agent that supports the open skills format. To install a skill from the &lt;a href="https://github.com/aws/agent-toolkit-for-aws"&gt;Agent Toolkit for AWS&lt;/a&gt;, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="language-bash"&gt;npx skills add aws/agent-toolkit-for-aws/skills --skill &amp;lt;skill&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Replace &lt;code&gt;&amp;lt;skill&amp;gt;&lt;/code&gt; with the one you want:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;aws-sdk-swift-usage&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;aws-sdk-js-v3-usage&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;aws-sdk-python-usage&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Or pass &lt;code&gt;--skill&lt;/code&gt; multiple times to install more than one.&lt;/p&gt; 
&lt;p&gt;If your favorite SDK is missing or you’ve seen agents make mistakes that aren’t covered yet, open an issue or submit a skill. Visit the &lt;a href="https://github.com/aws/agent-toolkit-for-aws"&gt;repository on GitHub&lt;/a&gt; to try it out.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Announcing the General Availability of the AWS IoT Device SDK for Swift</title>
		<link>https://aws.amazon.com/blogs/developer/announcing-the-general-availability-of-the-aws-iot-device-sdk-for-swift/</link>
					
		
		<dc:creator><![CDATA[Vera Xia]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 23:15:34 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS IoT Core]]></category>
		<category><![CDATA[AWS SDK for Swift]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Intermediate (200)]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Swift]]></category>
		<guid isPermaLink="false">aa07005998a1ae49f611f0fae186d0265355ad6b</guid>

					<description>We are excited to announce the General Availability (GA) of the AWS IoT Device SDK for Swift. This release gives Swift developers a production-ready SDK with stable APIs and integrated service clients to connect applications to AWS IoT Core. What’s New The GA release now provides easy-to-configure service clients for three essential AWS IoT Core […]</description>
										<content:encoded>&lt;p&gt;We are excited to announce the General Availability (GA) of the &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift" target="_blank" rel="noopener noreferrer"&gt;AWS IoT Device SDK for Swift&lt;/a&gt;. This release gives Swift developers a production-ready SDK with stable APIs and integrated service clients to connect applications to &lt;a href="https://aws.amazon.com/iot-core/" target="_blank" rel="noopener noreferrer"&gt;AWS IoT Core&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;What’s New&lt;/h2&gt; 
&lt;p&gt;The GA release now provides easy-to-configure service clients for three essential AWS IoT Core services:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html" target="_blank" rel="noopener noreferrer"&gt;AWS IoT Device Shadow&lt;/a&gt;: Synchronize and share data between devices, apps, and other cloud services.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html" target="_blank" rel="noopener noreferrer"&gt;AWS IoT Jobs&lt;/a&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html" target="_blank" rel="noopener noreferrer"&gt;:&lt;/a&gt; Manage remote operations that can run on devices connected to AWS IoT Core.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html" target="_blank" rel="noopener noreferrer"&gt;Device provisioning&lt;/a&gt;: Automatically create the certificates and policies needed for secure communication, eliminating manual certificate management.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The SDK supports macOS, iOS, tvOS, and Linux, with X.509 certificate-based authentication and TLS 1.3 encryption on iOS and tvOS. For a detailed overview of platform and security capabilities, see &lt;a href="https://aws.amazon.com/blogs/developer/introducing-the-aws-iot-device-sdk-for-swift-developer-preview/" target="_blank" rel="noopenear noopener noreferrer"&gt;Introducing the AWS IoT Device SDK for Swift (Developer Preview)&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;The SDK provides &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/tree/main/Samples/ServiceClientSamples" target="_blank" rel="noopener noreferrer"&gt;service client samples&lt;/a&gt; (Device Shadow, Jobs, and Device provisioning) on the GitHub website. The following walkthrough demonstrates how to set up a Shadow client and retrieve a shadow state.&lt;/p&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;p&gt;Before you start with the service client, set up the required AWS IoT resources: For more information, see &lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html" target="_blank" rel="noopener noreferrer"&gt;What is AWS IoT?&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html" target="_blank" rel="noopener noreferrer"&gt;Create AWS IoT resources&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;After you complete these steps, you will have three items required for client configuration:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Your IoT endpoint&lt;/li&gt; 
 &lt;li&gt;Your X.509 certificate file&lt;/li&gt; 
 &lt;li&gt;Your associated private key file&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Use AWS IoT Shadow client&lt;/h3&gt; 
&lt;h4&gt;Step 1: Add the SDK dependency&lt;/h4&gt; 
&lt;p&gt;The IoT Shadow client is a product within the &lt;code&gt;aws-iot-device-sdk-swift&lt;/code&gt; package. Add the package as a dependency and reference the Shadow client in your target’s &lt;code&gt;Package.swift&lt;/code&gt; file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-swift"&gt;let package = Package(
    name: "MyApp",
    dependencies: [
        .package(
            url: "https://github.com/aws/aws-iot-device-sdk-swift.git", 
            from: "1.0.0"
        ),
    ],
    targets: [
        .executableTarget(
            name: "MyApp",
            dependencies: [
                .product(name: "IotShadowClient", package: "aws-iot-device-sdk-swift"),
            ]
        )
    ]
)&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Step 2: Create an MQTT 5 client&lt;/h4&gt; 
&lt;p&gt;Before you create a Shadow client, create an MQTT 5 client. This example uses the endpoint and certificate files from the Prerequisites section.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-swift"&gt;// Create an Mqtt5ClientBuilder configured using a certificate and private key
let clientBuilder = try Mqtt5ClientBuilder.mtlsFromPath(
         endpoint: self.endpoint, 
         certPath: self.cert, 
         keyPath: self.key)

// Create the MQTT5 client using the Mqtt5ClientBuilder and start a connection session
let client = try builder.build()        
client.start()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more information about the certificates, see &lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html"&gt;X.509 client certificates&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Step 3: Create the Shadow client&lt;/h4&gt; 
&lt;p&gt;After you start the MQTT 5 client, configure the client options and create the Shadow client. These options to cap the client’s subscription usage and reserve capacity for other parts of your IoT application.&lt;/p&gt; 
&lt;p&gt;Configure the following options based on your application’s subscription needs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;&lt;strong&gt;maxRequestResponseSubscription&lt;/strong&gt;&lt;/code&gt;: Maximum number of concurrent subscriptions that request-response client uses. Each request usually uses 1-2 subscriptions until completion.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&lt;strong&gt;maxStreamingSubscription&lt;/strong&gt;&lt;/code&gt;: Maximum number of concurrent streaming operation subscriptions that the client will allow. Set based on the number of streaming operations you plan to use simultaneously.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&lt;strong&gt;operationTimeout&lt;/strong&gt;&lt;/code&gt;: Request timeout in seconds.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following example creates a Shadow client with values that work well for applications that use a single shadow with limited streaming operations. Adjust these values based on your application’s needs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-swift"&gt;// Set up options for the MqttRequestResponseClient
let options = MqttRequestResponseClientOptions(
        maxRequestResponseSubscription: 3,
        maxStreamingSubscription: 2,
        operationTimeout: 5)
 
// Create a Shadow client using the MQTT5 client and the options created above
let shadowClient = try IotShadowClient(mqttClient: client, options: options)&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Step 4: Perform Shadow Operations&lt;/h4&gt; 
&lt;p&gt;With the Shadow client ready, you can perform operations such as retrieving, updating, or deleting a shadow state. The following example retrieves a named shadow state:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-swift"&gt;let request: GetShadowRequest = GetShadowRequest(thingName: inputThingName)
do {
       let response = try await shadowClient.getShadow(request: request)
} catch {
       // Log errors
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more information, see the &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/tree/main/Samples/ServiceClientSamples/ShadowSample"&gt;Shadow sample&lt;/a&gt; on the GitHub website. Additional service client samples are also available on GitHub:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/tree/main/Samples/ServiceClientSamples/JobsSample" target="_blank" rel="noopener noreferrer"&gt;JobsSandbox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/blob/main/Samples/ServiceClientSamples/Provisioning/BasicProvisioningSample" target="_blank" rel="noopener noreferrer"&gt;Basic Fleet Provisioning&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/blob/main/Samples/ServiceClientSamples/Provisioning/CsrProvisioningSample" target="_blank" rel="noopener noreferrer"&gt;CSR-based Fleet Provisioning&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Known Limitations&lt;/h2&gt; 
&lt;p&gt;The SDK has the following known limitations:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;TLS 1.3 on macOS&lt;/strong&gt;: While TLS 1.3 is not currently supported on macOS, we are actively developing support and will add it in a future release. This limitation does not affect iOS, tvOS, or Linux platforms.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;HTTP Proxy Support&lt;/strong&gt;: HTTP proxy support is available on macOS and Linux only; it is not currently supported on iOS and tvOS.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For updates on these limitations, see &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/discussions" target="_blank" rel="noopener noreferrer"&gt;GitHub Discussions.&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we showed you how to get started with the AWS IoT Device SDK for Swift from adding the SDK dependency to performing shadow operations. The SDK also includes clients for Jobs and Device Provisioning. Use the Jobs client to manage remote device operations or the Device Provisioning client to automate certificate creation at scale.&lt;/p&gt; 
&lt;p&gt;For more information, see &lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html" target="_blank" rel="noopener noreferrer"&gt;Getting started with AWS IoT Core tutorials&lt;/a&gt; and connect your first device to AWS IoT Core.&lt;/p&gt; 
&lt;p&gt;Let us know how you’re using the SDK in the comments. You can also:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Share ideas and ask questions in &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/discussions" target="_blank" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Report issues through &lt;a href="https://github.com/aws/aws-iot-device-sdk-swift/issues" target="_blank" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>AWS SDK for .NET V3 end-of-support announcement</title>
		<link>https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-end-of-support-announcement/</link>
					
		
		<dc:creator><![CDATA[Muhammad Othman]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 19:14:51 +0000</pubDate>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for .NET]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<guid isPermaLink="false">7174ddefd2aec3ab1ccc5ab7121041f2a3be702c</guid>

					<description>As previously announced, version 3 of the AWS SDK for .NET entered maintenance mode on March 1, 2026. In alignment with our SDKs and Tools Maintenance Policy, AWS SDK for .NET V3 has now reached end-of-support as of June 1, 2026.&amp;nbsp; Starting June 1, 2026, there&amp;nbsp;are no plans for further updates or releases for V3, including security fixes. […]</description>
										<content:encoded>&lt;p&gt;&lt;span data-contrast="auto"&gt;As &lt;/span&gt;&lt;a href="https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/"&gt;&lt;span data-contrast="none"&gt;previously announced&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;, version 3 of the &lt;/span&gt;&lt;a href="https://aws.amazon.com/sdk-for-net/"&gt;&lt;span data-contrast="none"&gt;AWS SDK for .NET&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; entered maintenance mode on March 1, 2026. In alignment with our &lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html"&gt;&lt;span data-contrast="none"&gt;SDKs and Tools Maintenance Policy&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;, &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;AWS SDK for .NET V3 has now reached end-of-support as of June 1, 2026&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;Starting June 1, 2026, there&amp;nbsp;are no plans for further updates or releases for V3, including security fixes. Previously published releases should continue to be available via &lt;/span&gt;&lt;a href="https://www.nuget.org/packages/AWSSDK.Core"&gt;&lt;span data-contrast="none"&gt;NuGet&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; and the source code will remain on &lt;/span&gt;&lt;a href="https://github.com/aws/aws-sdk-net"&gt;&lt;span data-contrast="none"&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;h2&gt;What this means for you&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;If you are still using AWS SDK for .NET V3, your existing applications should continue to function. However, you should be aware of the following:&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No new service support&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: V3 will not receive updates for new AWS services or new features for existing services.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No security patches&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: V3 will no longer receive security fixes. If a vulnerability is discovered, it will only be addressed in V4.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No bug fixes&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: No further bug fixes will be released for V3.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Migrating to V4&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;We strongly encourage all customers still on V3 to migrate to &lt;/span&gt;&lt;a href="https://aws.amazon.com/blogs/developer/general-availability-of-aws-sdk-for-net-v4-0/"&gt;&lt;span data-contrast="none"&gt;AWS SDK for .NET V4&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; as soon as possible. V4 includes performance&amp;nbsp;enhancements,&amp;nbsp;bug fixes,&amp;nbsp;and continued support for AWS services&amp;nbsp;and regions.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;To help with your migration:&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Review the&amp;nbsp;&lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html"&gt;&lt;span data-contrast="none"&gt;Migration Guide&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;to understand the breaking changes.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Update and test your applications&amp;nbsp;with V4 in a development environment&amp;nbsp;before updating production.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;If you encounter issues during migration, open an issue on our&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/aws/aws-sdk-net"&gt;&lt;span data-contrast="none"&gt;GitHub repository&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;AWS SDK for .NET V3 has reached end-of-support. We strongly recommend migrating to V4 to continue receiving security updates, bug fixes, and support for AWS services.&amp;nbsp;&lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html"&gt;&lt;span data-contrast="none"&gt;Migration documentation&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;is available to guide you through the update process.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;For any questions or issues that arise while updating to the V4 SDK, please utilize the GitHub repository’s&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/aws/aws-sdk-net/discussions"&gt;&lt;span data-contrast="none"&gt;discussion forums&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;&amp;nbsp;or open GitHub&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/aws/aws-sdk-net/issues"&gt;&lt;span data-contrast="none"&gt;issues&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;to reach out to us. If you find dependencies that are preventing you from updating to V4, please let us know to see if we can help.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>AWS Tools for PowerShell V4 end-of- support announcement</title>
		<link>https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-end-of-support-announcement/</link>
					
		
		<dc:creator><![CDATA[Muhammad Othman]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 19:14:48 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Tools for PowerShell]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">bf16db5be93ba7800574ff9c64e5f2e4f2701f0f</guid>

					<description>As previously&amp;nbsp;announced, version 4 of the AWS Tools for PowerShell entered maintenance mode on March 1, 2026.&amp;nbsp;In accordance with&amp;nbsp;our SDKs and Tools Maintenance Policy, AWS Tools for PowerShell V4 has now reached end-of-support as of June 1, 2026.&amp;nbsp; Starting June 1, 2026, there&amp;nbsp;are no plans for further updates or releases for V4, including security fixes. Previously published releases should continue […]</description>
										<content:encoded>&lt;p&gt;&lt;span data-contrast="auto"&gt;As &lt;/span&gt;&lt;a href="https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/"&gt;&lt;span data-contrast="none"&gt;previously&amp;nbsp;announced&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;, version 4 of the &lt;/span&gt;&lt;a href="https://aws.amazon.com/powershell/"&gt;&lt;span data-contrast="none"&gt;AWS Tools for PowerShell&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; entered maintenance mode on March 1, 2026.&amp;nbsp;In accordance with&amp;nbsp;our &lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html"&gt;&lt;span data-contrast="none"&gt;SDKs and Tools Maintenance Policy&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;, &lt;/span&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;AWS Tools for PowerShell V4 has now reached end-of-support as of June 1, 2026&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;Starting June 1, 2026, there&amp;nbsp;are no plans for further updates or releases for V4, including security fixes. Previously published releases should continue to be available&amp;nbsp;via the &lt;/span&gt;&lt;a href="https://www.powershellgallery.com/"&gt;&lt;span data-contrast="none"&gt;PowerShell Gallery&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; and the source code will remain on &lt;/span&gt;&lt;a href="https://github.com/aws/aws-tools-for-powershell"&gt;&lt;span data-contrast="none"&gt;GitHub&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;What this means for you&lt;/span&gt;&lt;/b&gt;&lt;span data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;If you are still using AWS Tools for PowerShell V4, your existing scripts and automation should continue to function. However, you should be aware of the following:&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No new service support&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: V4 will not receive cmdlets for new AWS services or new features for existing services.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No security patches&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: V4 will no longer receive security fixes. If a vulnerability is discovered, it will only be addressed in V5.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="7" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;No bug fixes&lt;/span&gt;&lt;/b&gt;&lt;span data-contrast="auto"&gt;: No further bug fixes will be released for V4.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Migrating to V5&lt;/span&gt;&lt;/b&gt;&lt;span data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;We strongly encourage all customers still on V4 to migrate to &lt;/span&gt;&lt;a href="https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v5-now-generally-available/"&gt;&lt;span data-contrast="none"&gt;AWS Tools for PowerShell V5&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; as soon as possible. V5 includes performance enhancements, bug fixes, and continued support for AWS services and regions.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;To help with your migration:&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Review the &lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html"&gt;&lt;span data-contrast="none"&gt;Migration Guide&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; to understand the breaking changes. &lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;Update and test your scripts with V5 in a development environment before updating production. &lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;span data-contrast="auto"&gt;If you&amp;nbsp;encounter&amp;nbsp;issues during migration, open an issue on&amp;nbsp;our&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/aws/aws-tools-for-powershell"&gt;&lt;span data-contrast="none"&gt;GitHub repository&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;b&gt;&lt;span data-contrast="auto"&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;span data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;AWS Tools for PowerShell V4 has reached end-of-support. We strongly recommend migrating to V5 to continue receiving security updates, bug fixes, and support for AWS services.&amp;nbsp;&lt;/span&gt;&lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html"&gt;&lt;span data-contrast="none"&gt;Migration documentation&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; is available to guide you through the update process.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; 
&lt;p&gt;&lt;span data-contrast="auto"&gt;For any questions or issues that arise while updating to the V5, please utilize the GitHub repository’s &lt;/span&gt;&lt;a href="https://github.com/aws/aws-tools-for-powershell/discussions"&gt;&lt;span data-contrast="none"&gt;discussion forums&lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt; or open GitHub &lt;/span&gt;&lt;a href="https://github.com/aws/aws-tools-for-powershell/issues"&gt;&lt;span data-contrast="none"&gt;issues &lt;/span&gt;&lt;/a&gt;&lt;span data-contrast="auto"&gt;to reach out to us. If you find&amp;nbsp;dependencies that are preventing you from updating to V4, please let us know to see if we can help.&lt;/span&gt;&lt;span data-ccp-props="{}"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Introducing multipart download support for AWS Tools for PowerShell v5</title>
		<link>https://aws.amazon.com/blogs/developer/introducing-multipart-download-support-for-aws-tools-for-powershell-v5/</link>
					
		
		<dc:creator><![CDATA[Sanket Tangade]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 19:04:35 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Tools for PowerShell]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">5426cd0555633d49a8b28a097b105a9b62dd5efd</guid>

					<description>The new multipart download support in AWS Tools for PowerShell v5&amp;nbsp;improves the performance of downloading large objects from Amazon Simple Storage Service (Amazon S3) compared to the single-stream downloads. The Read-S3Object and Copy-S3Object cmdlets now deliver faster download speeds through an opt-in switch parameter -UseMultipartDownload&amp;nbsp;for multipart downloads, reducing the need for complex code to manage […]</description>
										<content:encoded>&lt;p&gt;The new multipart download support in &lt;a href="https://docs.aws.amazon.com/powershell/latest/userguide/" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell v5&lt;/a&gt;&amp;nbsp;improves the performance of downloading large objects from &lt;a href="https://aws.amazon.com/s3/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt; compared to the single-stream downloads. The &lt;code&gt;Read-S3Object&lt;/code&gt; and &lt;code&gt;Copy-S3Object&lt;/code&gt; cmdlets now deliver faster download speeds through an opt-in switch parameter &lt;code&gt;-UseMultipartDownload&lt;/code&gt;&amp;nbsp;for multipart downloads, reducing the need for complex code to manage concurrent connections, handle retries, and coordinate multiple download streams. It uses the&lt;a href="https://docs.aws.amazon.com/sdk-for-net/" target="_blank" rel="noopener noreferrer"&gt; AWS SDK for .NET v4&lt;/a&gt; S3 Transfer Manager under the hood to execute the downloads.&lt;/p&gt; 
&lt;p&gt;In this post, we’ll show you how to configure and use these new multipart download capabilities, including downloading single objects and directories, choosing between download strategies, customizing parallelism settings, and migrating your existing download methods to take advantage of these performance improvements.&lt;/p&gt; 
&lt;h2&gt;Parallel download using part numbers and byte-ranges&lt;/h2&gt; 
&lt;p&gt;For download operations, &lt;code&gt;Read-S3Object&lt;/code&gt; and &lt;code&gt;Copy-S3Object&lt;/code&gt; now support both &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance-guidelines.html" target="_blank" rel="noopener noreferrer"&gt;part number and byte-range&lt;/a&gt; fetches. Part number fetches download the object in parts, using the part number that Amazon S3 assigned to each object part during upload. Byte-range fetches download the object with byte ranges and work on objects, regardless of whether they were originally uploaded using &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html" target="_blank" rel="noopener noreferrer"&gt;multipart upload &lt;/a&gt;or not. The transfer manager splits your &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html" target="_blank" rel="noopener noreferrer"&gt;GetObject&amp;nbsp;&lt;/a&gt;request into multiple smaller requests, each of which retrieves a specific portion of the object. The transfer manager executes your requests through concurrent connections to Amazon S3.&lt;/p&gt; 
&lt;h2&gt;Choosing between part number and byte-range strategies&lt;/h2&gt; 
&lt;p&gt;Choose between part number and byte-range downloads based on your object’s structure. Part number downloads (the default) work best for objects uploaded with standard multipart upload part sizes. If the object is a non-multipart object, choose byte-range downloads.&amp;nbsp;Range downloads facilitate greater parallelization when objects have large parts and work with S3 objects regardless of the upload method that was used.&lt;/p&gt; 
&lt;p&gt;Keep in mind that smaller range sizes result in more S3 requests. Each API call incurs a &lt;a href="https://aws.amazon.com/s3/pricing/" target="_blank" rel="noopener noreferrer"&gt;request cost&lt;/a&gt;&amp;nbsp;beyond the data transfer itself, so balance parallelism benefits against the number of requests for your use case.&lt;/p&gt; 
&lt;p&gt;Now that you understand the download strategies, let’s get started.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;To get started with multipart downloads in AWS Tools for PowerShell, follow these steps:&lt;/p&gt; 
&lt;h3&gt;Update your module&lt;/h3&gt; 
&lt;p&gt;Update AWS Tools modules to latest version. Available from version &lt;a href="https://www.powershellgallery.com/packages/AWS.Tools.S3/5.0.208" target="_blank" rel="noopener noreferrer"&gt;5.0.208&lt;/a&gt; and later.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt; # Modular (recommended)&lt;/strong&gt;
PS&amp;gt; Update-Module AWS.Tools.S3

&lt;strong&gt;# Or monolithic&lt;/strong&gt;
PS&amp;gt; Update-Module AWSPowerShell.NetCore

&lt;strong&gt;# Or Windows PowerShell monolithic&lt;/strong&gt;
PS&amp;gt; Update-Module AWSPowerShell&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Download an object to file&lt;/h3&gt; 
&lt;p&gt;To download an object from an Amazon S3 bucket to a local file with multipart support, add the &lt;code&gt;-UseMultipartDownload&lt;/code&gt; switch to your &lt;code&gt;Read-S3Object&lt;/code&gt; command. You must provide the source bucket, the S3 object key, and the destination file path.&lt;/p&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt;# Download large file with multipart support (Part number strategy)&lt;/strong&gt;
PS&amp;gt; $response = Read-S3Object&amp;nbsp;-BucketName&amp;nbsp;amzn-s3-demo-bucket&amp;nbsp;-Key&amp;nbsp;"data/large-dataset.zip"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-File&amp;nbsp;"C:\downloads\large-dataset.zip"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload
	
$response.ContentRange
$response.ETag
$response.ChecksumType
# And other 33 response object parameters.
&lt;/code&gt;&lt;code class="lang-powershell"&gt;
&lt;strong&gt;# Download using byte-range strategy (works with any S3 object)&lt;/strong&gt;
PS&amp;gt; Read-S3Object&amp;nbsp;-BucketName&amp;nbsp;amzn-s3-demo-bucket&amp;nbsp;-Key&amp;nbsp;"data/any-object.dat"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-File&amp;nbsp;"C:\downloads\any-object.dat"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-MultipartDownloadType&amp;nbsp;RANGE `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-PartSize&amp;nbsp;16MB&amp;nbsp;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;You can customize the following options:&lt;/p&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt;# Custom concurrent connections (default is 10) (Linux based example)&lt;/strong&gt;
PS&amp;gt; Read-S3Object -BucketName amzn-s3-demo-bucket -Key "data/large-file.bin" `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-File "/home/user/downloads/large-file.bin" `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-MultipartDownloadType RANGE `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-PartSize 64MB `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-ConcurrentServiceRequest 20&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Experiment with these values to find the best configuration for your use case. Factors like object size and available network bandwidth will influence which settings work best.&lt;/p&gt; 
&lt;h3&gt;Download a directory&lt;/h3&gt; 
&lt;p&gt;To download multiple objects from an S3 bucket prefix to a local directory, use the &lt;code&gt;-KeyPrefix&lt;/code&gt; and &lt;code&gt;-Folder&lt;/code&gt; parameters with &lt;code&gt;-UseMultipartDownload&lt;/code&gt;. The cmdlet automatically applies multipart download to each individual object in the directory.&lt;/p&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt;# Download entire directory with multipart support for large files&lt;/strong&gt;
PS&amp;gt; Read-S3Object&amp;nbsp;-BucketName&amp;nbsp;amzn-s3-demo-bucket&amp;nbsp;-KeyPrefix&amp;nbsp;"data/"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-Folder&amp;nbsp;"C:\downloads\data"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload&amp;nbsp;`
&amp;nbsp; &amp;nbsp; -ConcurrentServiceRequest 10 `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-DownloadFilesConcurrently&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The &lt;code&gt;-DownloadFilesConcurrently&lt;/code&gt; parameter facilitates file-level parallelism, downloading multiple files at the same time. When combined with &lt;code&gt;-UseMultipartDownload&lt;/code&gt;, each individual file also benefits from part-level parallelism, providing high throughput for directory downloads containing many large files.&lt;/p&gt; 
&lt;h3&gt;Using Copy-S3Object&lt;/h3&gt; 
&lt;p&gt;The same multipart download parameters are available on &lt;code&gt;Copy-S3Object&lt;/code&gt; for S3-to-local download operations.&lt;/p&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;PS&amp;gt; $response = Copy-S3Object&amp;nbsp;-BucketName&amp;nbsp;-Key&amp;nbsp;"data/large-file.bin"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-LocalFile&amp;nbsp;"C:\downloads\large-file.bin"&amp;nbsp;`
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload&amp;nbsp;`
&amp;nbsp; &amp;nbsp; -MultipartDownloadType&amp;nbsp;RANGE `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-PartSize&amp;nbsp;16MB
$response.ContentRange
$response.ETag
$response.ChecksumType
# And other 33 response object parameters.&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Note: The multipart download parameters only apply to S3-to-local download operations in &lt;code&gt;Copy-S3Object&lt;/code&gt;. They are not available for S3-to-S3 copy operations.&lt;/p&gt; 
&lt;h2&gt;New parameters at a glance&lt;/h2&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Parameter&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Description&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;1&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-UseMultipartDownload&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Opt-in switch for multipart parallel download&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;2&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-MultipartDownloadType&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;PART&lt;/code&gt; (default) or &lt;code&gt;RANGE&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;3&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-PartSize&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Part size for RANGE mode (e.g., &lt;code&gt;8MB&lt;/code&gt;, &lt;code&gt;64MB&lt;/code&gt;, &lt;code&gt;1GB&lt;/code&gt;). Default is 8 MB&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;4&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-ConcurrentServiceRequest&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Maximum number of parallel HTTP connections. Default is 10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;5&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-DownloadFilesConcurrently&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;File-level parallelism for directory downloads&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;6&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;-FailurePolicy&lt;/code&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;code&gt;AbortOnFailure&lt;/code&gt; (default) or &lt;code&gt;ContinueOnFailure&lt;/code&gt; for directory downloads&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Migration path&lt;/h2&gt; 
&lt;p&gt;The new &lt;code&gt;-UseMultipartDownload&lt;/code&gt; parameter comes with both multipart performance as well as access to S3 response metadata. Here’s how to migrate your existing code:&lt;/p&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt;# Existing code (still works but returns legacy response object System.IO.FileInfo) &lt;/strong&gt;
PS&amp;gt; Read-S3Object -BucketName amzn-s3-demo-bucket -Key "data/large-dataset.zip" -File "C:\downloads\large-dataset.zip" &lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h4&gt;For directory downloads:&lt;/h4&gt; 
&lt;div&gt; 
 &lt;pre&gt;&lt;code class="lang-powershell"&gt;&lt;strong&gt;#&amp;nbsp;Existing code (still works but returns legacy response object System.IO.DirectoryInfo) &lt;/strong&gt;
PS&amp;gt; Read-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix "data/"&amp;nbsp;-Folder "C:\downloads\data"

&lt;strong&gt;#&amp;nbsp;Enhanced&amp;nbsp;version with multipart support (returns S3 response metadata) &lt;/strong&gt;
PS&amp;gt; Read-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix "data/" `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-Folder "C:\downloads\data" `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-UseMultipartDownload `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-ConcurrentServiceRequest 10 `
&amp;nbsp;&amp;nbsp; &amp;nbsp;-DownloadFilesConcurrently&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;The multipart download support in AWS Tools for PowerShell provides performance improvements for downloading large objects from Amazon S3. By using parallel byte-range or part-number fetches, you can reduce transfer times. This feature is fully opt-in and available in all three module variants: &lt;a href="https://www.powershellgallery.com/packages/AWS.Tools.S3/5.0.208" target="_blank" rel="noopener noreferrer"&gt;AWS.Tools.S3&lt;/a&gt;, &lt;a href="https://www.powershellgallery.com/packages/AWSPowerShell.NetCore/5.0.208" target="_blank" rel="noopener noreferrer"&gt;AWSPowerShell.NetCore&lt;/a&gt;, and &lt;a href="https://www.powershellgallery.com/packages/AWSPowerShell/5.0.208" target="_blank" rel="noopener noreferrer"&gt;AWSPowerShell&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;: Try implementing multipart downloads in your scripts and measure the performance improvements for your specific use cases.&lt;/p&gt; 
&lt;p&gt;To learn more about AWS Tools for PowerShell, visit the AWS Tools for PowerShell &lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/pstools-welcome.html" target="_blank" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. For questions or feedback about this feature, visit the &lt;a href="https://github.com/aws/aws-tools-for-powershell/issues" target="_blank" rel="noopener noreferrer"&gt;GitHub issues&lt;/a&gt; page. For more details on the underlying multipart download engine, see the AWS SDK for .NET &lt;a href="https://aws.amazon.com/blogs/developer/introducing-multipart-download-support-for-aws-sdk-for-net-transfer-manager/" target="_blank" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Announcing updated retry behavior for AWS SDKs and Tools</title>
		<link>https://aws.amazon.com/blogs/developer/announcing-updated-retry-behavior-for-aws-sdks-and-tools/</link>
					
		
		<dc:creator><![CDATA[Matthew Miller]]></dc:creator>
		<pubDate>Wed, 20 May 2026 18:42:23 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[SDK]]></category>
		<guid isPermaLink="false">12091d0c727209f33732c07f9f062b7e20001b99</guid>

					<description>When your application calls an AWS service and the request fails with a retryable error, the AWS SDK retries it automatically. The retry behavior controls how long the SDK waits between attempts and when it gives up. Most of this happens in the background, but it directly affects how your application experiences errors and latency. […]</description>
										<content:encoded>&lt;p&gt;When your application calls an AWS service and the request fails with a retryable error, the AWS SDK retries it automatically. The retry behavior controls how long the SDK waits between attempts and when it gives up. Most of this happens in the background, but it directly affects how your application experiences errors and latency.&lt;/p&gt; 
&lt;p&gt;Until today, retry defaults varied across SDKs. Some waited too long before retrying transient errors, and others would keep retrying instead of failing fast, even during sustained outages. The updated behavior addresses both issues with consistent defaults across all AWS SDKs.&lt;/p&gt; 
&lt;p&gt;You can opt in to the updated behavior starting today across AWS SDKs, the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/" target="_blank" rel="noopener noreferrer"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt;, and &lt;a href="https://docs.aws.amazon.com/powershell/latest/userguide/" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell&lt;/a&gt;. These changes will become the default in November 2026.&lt;/p&gt; 
&lt;p&gt;This post covers what changed, how to tell if you’re affected, how to opt in, and how to revert.&lt;/p&gt; 
&lt;h2&gt;What changed&lt;/h2&gt; 
&lt;p&gt;This update changes how &lt;code&gt;standard&lt;/code&gt; and &lt;code&gt;adaptive&lt;/code&gt; (a rate-limiting mode built on &lt;code&gt;standard&lt;/code&gt;) retry modes handle failed requests. It also makes standard the default for SDKs that had previously defaulted to &lt;code&gt;legacy&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Most SDKs use the &lt;code&gt;standard&lt;/code&gt; retry mode by default. It includes a retry quota, exponential backoff with jitter, and a standard set of retryable errors. Some older SDKs still default to &lt;code&gt;legacy&lt;/code&gt; mode, which lacks a retry quota and behaves inconsistently across SDKs. For a full comparison, see &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html" target="_blank" rel="noopener noreferrer"&gt;Retry behavior&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Retry quota updates&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;standard&lt;/code&gt; mode has always included a retry quota: a token bucket that tracks how many retries your client is making. When failures are persistent, the budget depletes and the SDK stops retrying. At scale, this helps outages resolve faster (&lt;a href="https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/" target="_blank" rel="noopener noreferrer"&gt;retry traffic from many clients can delay recovery&lt;/a&gt;) and reduces your client-side latency by failing fast instead of waiting through retries that are unlikely to succeed.&lt;/p&gt; 
&lt;p&gt;If you were using &lt;code&gt;legacy&lt;/code&gt; mode, this is new to you. &lt;code&gt;legacy&lt;/code&gt; mode had no standardized retry quota, so the SDK would keep retrying up to the max attempt count regardless of how many requests were failing.&lt;/p&gt; 
&lt;p&gt;In the updated &lt;code&gt;standard&lt;/code&gt; mode, each transient error retry costs 14 tokens (up from 5 in the previous version of &lt;code&gt;standard&lt;/code&gt; mode). Retries after throttling responses cost 5 tokens. The higher cost for transient errors means the quota engages sooner during sustained outages, letting the service recover faster. For a deeper look at how the retry quota works, see &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#retry-quota-token-bucket" target="_blank" rel="noopener noreferrer"&gt;Retry quota (token bucket)&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Faster retries for transient errors&lt;/h3&gt; 
&lt;p&gt;The first retry after a transient error is now much faster, about 25 ms on average for a brief HTTP 503 response, down from hundreds of milliseconds or more.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;standard&lt;/code&gt; mode now uses different backoff delays depending on the type of error:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Transient errors&lt;/strong&gt; (connection resets, DNS failures, HTTP 500/502/503/504): &lt;strong&gt;50 ms&lt;/strong&gt; base delay. These errors are typically short-lived, making them good candidates for immediate retry.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Throttling errors&lt;/strong&gt; (where the service asks you to slow down): &lt;strong&gt;1,000 ms&lt;/strong&gt; base delay. A longer delay gives the service time to recover capacity.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Previously, each SDK applied the same base delay regardless of error type, but that delay varied across SDKs, from 10 ms to 1,000 ms.&lt;/p&gt; 
&lt;h3&gt;Amazon DynamoDB tuning&lt;/h3&gt; 
&lt;p&gt;&lt;a href="https://aws.amazon.com/dynamodb/" target="_blank" rel="noopener noreferrer"&gt;Amazon DynamoDB&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html" target="_blank" rel="noopener noreferrer"&gt;Amazon DynamoDB Streams&lt;/a&gt; use a shorter base backoff delay (25 ms instead of 50 ms) to match their low-latency profile. These clients default to 4 max attempts. The additional attempt keeps the last retry’s maximum backoff comparable to other services. Previous defaults varied by SDK (up to 10 max attempts in some SDKs). For details, see &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#dynamodb" target="_blank" rel="noopener noreferrer"&gt;DynamoDB&lt;/a&gt; in the retry behavior documentation.&lt;/p&gt; 
&lt;h3&gt;Long-polling operations&lt;/h3&gt; 
&lt;p&gt;Long-polling operations (such as the &lt;a href="https://aws.amazon.com/sqs/" target="_blank" rel="noopener noreferrer"&gt;Amazon SQS&lt;/a&gt; &lt;code&gt;ReceiveMessage&lt;/code&gt; operation) now apply a backoff delay before returning an error when the retry quota is depleted. Without this, a depleted quota returns the error immediately, which can cause polling loops to tighten, spiking CPU usage on the client and generating additional load on the service. For details, see &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#long-polling-operations" target="_blank" rel="noopener noreferrer"&gt;Long-polling operations&lt;/a&gt;&amp;nbsp;documentation.&lt;/p&gt; 
&lt;h2&gt;Does this impact me?&lt;/h2&gt; 
&lt;p&gt;This update changes behavior within &lt;code&gt;standard&lt;/code&gt; and &lt;code&gt;adaptive&lt;/code&gt; retry modes. Whether you’re affected depends on your current configuration:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;No explicit retry configuration at all?&lt;/strong&gt; You will see all the changes after you opt in (or after the default rollout in November 2026). For SDKs that currently default to &lt;code&gt;legacy&lt;/code&gt; mode (Java, Python, Ruby, PHP, C++, and the AWS CLI), this also switches the default to &lt;code&gt;standard&lt;/code&gt;, which adds a retry quota.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Explicitly set retry mode to &lt;code&gt;standard&lt;/code&gt; or &lt;code&gt;adaptive&lt;/code&gt;?&lt;/strong&gt; You will see the new backoff timing, retry quota costs, and DynamoDB defaults. Your mode choice doesn’t change, but how these modes behave does.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Explicitly set &lt;code&gt;max_attempts&lt;/code&gt; or backoff settings?&lt;/strong&gt; Those specific values stay as you configured them. Other settings you didn’t override (such as retry quota costs and DynamoDB defaults) will still update to the new defaults.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Explicitly set retry mode to &lt;code&gt;legacy&lt;/code&gt;?&lt;/strong&gt; No changes. &lt;code&gt;legacy&lt;/code&gt; mode is unchanged.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Haven’t set &lt;code&gt;AWS_NEW_RETRIES_2026=true&lt;/code&gt;?&lt;/strong&gt; No changes until the default rollout in November 2026.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;How to opt in&lt;/h2&gt; 
&lt;p&gt;Set the following environment variable:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;export AWS_NEW_RETRIES_2026=true&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;The flag works across all AWS SDKs that have released support. See SDK availability and GitHub issues below for which SDKs support the flag today.&lt;/p&gt; 
&lt;p&gt;We recommend testing on a non-production workload first.&lt;/p&gt; 
&lt;h2&gt;Where you might notice a difference&lt;/h2&gt; 
&lt;p&gt;For most workloads, the update is invisible or an improvement. Transient errors recover faster and you don’t need to change any code.&lt;/p&gt; 
&lt;p&gt;A few things to watch for:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Max attempts may have decreased.&lt;/strong&gt; Some SDKs previously defaulted to more than 3 max attempts. If your workload relied on a high retry count to eventually succeed, you may see more errors surfaced to your application. You can override &lt;code&gt;max_attempts&lt;/code&gt; to restore your previous value.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Some SDKs gain a retry quota for the first time.&lt;/strong&gt; SDKs that previously defaulted to &lt;code&gt;legacy&lt;/code&gt; mode had no standardized retry quota. The SDK will retry up to the max attempt count regardless of how many requests were failing. With &lt;code&gt;standard&lt;/code&gt; mode, the SDK tracks a 500-token budget and stops retrying during sustained failures. Your application sees errors sooner during prolonged outages, but it also frees up threads and connections instead of waiting on retries that are unlikely to succeed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;The retry quota activates sooner for transient errors.&lt;/strong&gt; The higher transient retry cost means the quota depletes at a lower failure rate during sustained transient failures, such as a wave of 500 responses.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For SDK-specific before and after values, see your SDK’s GitHub tracking issue in the table below.&lt;/p&gt; 
&lt;h2&gt;How to revert&lt;/h2&gt; 
&lt;p&gt;Remove or unset the opt-in environment variable:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;unset AWS_NEW_RETRIES_2026&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;After the default rollout in November 2026, the opt-in flag is ignored. To revert at that point, override individual settings such as &lt;code&gt;max_attempts&lt;/code&gt; or backoff configuration. See your SDK’s GitHub tracking issue for revert instructions specific to your SDK.&lt;/p&gt; 
&lt;p&gt;For SDKs that support &lt;code&gt;legacy&lt;/code&gt; mode (Java, Python, Ruby, PHP, C++, and the AWS CLI), you can also restore the previous behavior in a single setting:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;export AWS_RETRY_MODE=legacy&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;SDK availability and GitHub issues&lt;/h2&gt; 
&lt;p&gt;Eight SDKs support the opt-in flag today. Six more are coming in the following weeks.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style="padding: 10px;border: 1px solid #dddddd"&gt;SDK&lt;/th&gt; 
   &lt;th style="padding: 10px;border: 1px solid #dddddd"&gt;Opt-in available&lt;/th&gt; 
   &lt;th style="padding: 10px;border: 1px solid #dddddd"&gt;GitHub tracking issue&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Java 2.x&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-java-v2/discussions/6984" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Python (boto3)&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/boto/boto3/discussions/4789" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;.NET&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-net/issues/4411" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;PowerShell&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-tools-for-powershell/issues/418" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;JavaScript 3.x&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-js-v3/issues/8037" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;PHP&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-php/discussions/3285" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Kotlin&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-kotlin/discussions/1885" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Rust&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Available&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/awslabs/aws-sdk-rust/discussions/1431" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Swift&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Coming soon&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/awslabs/aws-sdk-swift/discussions/2166" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Ruby&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Coming soon&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-ruby/discussions/3390" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Go 2.x&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Coming soon&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-go-v2/issues/3416" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;C++&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Coming soon&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-sdk-cpp/issues/3832" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS CLI&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Coming soon&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/aws/aws-cli/discussions/10329" target="_blank" rel="noopener noreferrer"&gt;Tracking issue&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Each tracking issue includes: minimum SDK version, before-and-after defaults, code examples, and a feedback section.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;This update brings consistent, faster retry defaults across all AWS SDKs. You can opt in today by setting &lt;code&gt;AWS_NEW_RETRIES_2026=true&lt;/code&gt; and revert at any time if you need to. We encourage you to try it on a non-production workload first, then roll it out to production before the defaults change in November 2026. If you don’t opt in before then, the new behavior will apply automatically.&lt;/p&gt; 
&lt;h2&gt;Give us feedback&lt;/h2&gt; 
&lt;p&gt;If you run into unexpected behavior, or if the changes work well for you, comment on your SDK’s GitHub tracking issue. Your feedback during the opt-in window helps us make the default rollout better for everyone.&lt;/p&gt; 
&lt;h2&gt;Learn more&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html" target="_blank" rel="noopener noreferrer"&gt;Retry behavior&lt;/a&gt;: retry mode selection, settings, and configuration precedence.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#how-retries-work" target="_blank" rel="noopener noreferrer"&gt;How retries work&lt;/a&gt;: backoff formula, error classification, retry quota mechanics, and service-specific behavior.&lt;/li&gt; 
&lt;/ul&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Announcing AWS SDK for Swift’s Transfer Manager for Amazon S3</title>
		<link>https://aws.amazon.com/blogs/developer/announcing-the-general-availability-of-amazon-s3-transfer-manager-for-swift/</link>
					
		
		<dc:creator><![CDATA[Chan Yoo]]></dc:creator>
		<pubDate>Mon, 04 May 2026 21:45:13 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for Swift]]></category>
		<guid isPermaLink="false">60b07ce31dbdd4fc890eeed6dde935123b5fbc31</guid>

					<description>We are pleased to announce the general availability of the Amazon S3 Transfer Manager&amp;nbsp;for Swift – a high level file and directory transfer utility for the Amazon Simple Storage Service (Amazon S3) built with the AWS SDK for Swift. Using Transfer Manager’s simple API, you can perform accelerated uploads of local files and directories to […]</description>
										<content:encoded>&lt;p&gt;We are pleased to announce the general availability of the &lt;a href="https://github.com/aws/aws-sdk-swift-s3-transfer-manager" target="_blank" rel="noopener noreferrer"&gt;Amazon S3 Transfer Manager&amp;nbsp;for Swift&lt;/a&gt; – a high level file and directory transfer utility for the &lt;a href="https://aws.amazon.com/pm/serv-s3/?trk=7f874f1e-8322-484a-89b5-535f065224e5&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAjwtcHPBhADEiwAWo3sJiuD0on7HnBb9cuPtyQ0JC_42ZKgrFIiCPLWGLCixzzN0EF6Tk1ckBoC7IAQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!798517304589!e!!g!!amazon%20s3!23606217092!193598648053&amp;amp;gad_campaignid=23606217092&amp;amp;gbraid=0AAAAADjHtp-YvUjJ33JaSogVqtxYdejlB&amp;amp;gclid=CjwKCAjwtcHPBhADEiwAWo3sJiuD0on7HnBb9cuPtyQ0JC_42ZKgrFIiCPLWGLCixzzN0EF6Tk1ckBoC7IAQAvD_BwE"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt; built with the &lt;a href="https://github.com/awslabs/aws-sdk-swift" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Swift&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Using Transfer Manager’s simple API, you can perform accelerated uploads of local files and directories to Amazon S3 and accelerated downloads of objects and buckets&amp;nbsp;from Amazon S3 and benefit from enhanced throughput and reliability, which is achieved through concurrent transfers of a set of small parts from a single object. The Transfer Manager is built on top of the &lt;a href="https://github.com/awslabs/aws-sdk-swift" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Swift&lt;/a&gt; and leverages Amazon S3 multipart upload and byte-range / part-number fetches for parallel transfers. You can also track the progress of transfers in real-time as well.&lt;/p&gt; 
&lt;h2&gt;Parallel upload via multipart upload&lt;/h2&gt; 
&lt;p&gt;For the upload operation, the Transfer Manager uses the Amazon S3 &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html" target="_blank" rel="noopener noreferrer"&gt;multipart upload API&lt;/a&gt;; it sends multiple &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html" target="_blank" rel="noopener noreferrer"&gt;UploadPart&lt;/a&gt;&amp;nbsp; requests concurrently behind the scenes to achieve high performance.&lt;/p&gt; 
&lt;h2&gt;Parallel download via byte-ranges or part numbers&lt;/h2&gt; 
&lt;p&gt;For the download operation, the Transfer Manager utilizes &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/range-get-olap.html" target="_blank" rel="noopener noreferrer"&gt;byte-range fetches&lt;/a&gt;&amp;nbsp;or part number fetches. Byte range fetches download the object with byte ranges and works on all objects, regardless of whether it was originally uploaded&amp;nbsp;using &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html" target="_blank" rel="noopener noreferrer"&gt;multipart upload&lt;/a&gt; or not. Part number fetches download the object in parts, using the part number assigned to each object part during upload. The transfer manager splits one &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html" target="_blank" rel="noopener noreferrer"&gt;GetObject&lt;/a&gt; request to multiple smaller requests, each of which retrieves a specific portion of the object. Those requests are also executed through concurrent connections to Amazon S3.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;To get started with Amazon S3 Transfer Manager for Swift, complete the following steps:&lt;/p&gt; 
&lt;h3&gt;Add the dependency to your Xcode project&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open your project in Xcode and click on your &lt;code&gt;.xcodeproj&lt;/code&gt; file, located at the top of the file navigator on the left pane.&lt;/li&gt; 
 &lt;li&gt;Click the project name that appears on the left pane of the &lt;code&gt;.xcodeproj&lt;/code&gt; file window.&lt;/li&gt; 
 &lt;li&gt;Click on &lt;code&gt;Package Dependencies&lt;/code&gt; tab, and click &lt;code&gt;+&lt;/code&gt; button.&lt;/li&gt; 
 &lt;li&gt;In &lt;code&gt;Search or Enter Package URL&lt;/code&gt; search bar, enter &lt;code&gt;git@github.com:aws/aws-sdk-swift-s3-transfer-manager.git&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Wait for package to load, and once it’s loaded, choose the target you want to add the &lt;code&gt;S3TransferManager&lt;/code&gt; module to.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Add the dependency to your Swift package&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Add the below to your package definition:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;dependencies: [
&amp;nbsp; &amp;nbsp; .package(
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url: "https://github.com/aws/aws-sdk-swift-s3-transfer-manager.git",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from: "&amp;lt;VERSION_STRING&amp;gt;"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
],&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;ol start="2"&gt; 
 &lt;li&gt;Add an&amp;nbsp;&lt;code&gt;S3TransferManager&lt;/code&gt; module dependency to the target that needs it. For example:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-code"&gt;targets: [
&amp;nbsp; &amp;nbsp; .target(
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name: "YourTargetThatUsesS3TM",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dependencies: [
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.product(
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name: "S3TransferManager",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;package: "aws-sdk-swift-s3-transfer-manager"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
]&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Initialize the S3 Transfer Manager&lt;/h3&gt; 
&lt;p&gt;You can initialize an S3TM instance with all-default settings by simply doing this:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-javascript"&gt;// Creates and uses default S3TM config &amp;amp; S3 client.
let s3tm = try await S3TransferManager()&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Or you can pass a configuration object to the initializer to customize S3TM, like this:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-javascript"&gt;// Create the custom S3 client config that you want S3TM to use.
let customS3ClientConfig = try S3Client.S3ClientConfig(
&amp;nbsp; &amp;nbsp; region: "us-west-2",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;. . . custom S3 client configurations . . .
)

// Create the custom S3TM config with the S3 client config initialized above.
let s3tmConfig = try await S3TransferManagerConfig(
&amp;nbsp; &amp;nbsp; s3ClientConfig: customS3ClientConfig,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;targetPartSizeBytes: 10 * 1024 * 1024, // 10MB part size.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;multipartUploadThresholdBytes: 100 * 1024 * 1024, // 100MB threshold.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;multipartDownloadType: .part
)

// Finally, create the S3TM using the custom S3TM config.
let s3tm = S3TransferManager(config: s3tmConfig)&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;For more information about what each configuration does, please refer to &lt;a href="https://github.com/aws/aws-sdk-swift-s3-transfer-manager/blob/main/Sources/S3TransferManager/S3TransferManagerConfig.swift" target="_blank" rel="noopener noreferrer"&gt;the documentation comments on S3TransferManagerConfig&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Upload an object&lt;/h3&gt; 
&lt;p&gt;To upload a file to Amazon S3, you need to provide the input struct &lt;code&gt;UploadObjectInput&lt;/code&gt;, which contains a subset of &lt;code&gt;PutObjectInput&lt;/code&gt; struct properties and an array of transfer listeners. You must provide the destination bucket, the S3 object key to use, and the object body.&lt;/p&gt; 
&lt;p&gt;When object being uploaded is bigger than the threshold configured by &lt;code&gt;multipartUploadThresholdBytes&lt;/code&gt; (16MB default), S3TM breaks them down into parts, each with the part size configured by &lt;code&gt;targetPartSizeBytes&lt;/code&gt; (8MB default), and uploads them concurrently using S3’s &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-process" target="_blank" rel="noopener noreferrer"&gt;multipart upload feature&lt;/a&gt;.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-javascript"&gt;// Construct UploadObjectInput.
let uploadObjectInput = UploadObjectInput(
&amp;nbsp;&amp;nbsp; &amp;nbsp;body: ByteStream.stream(
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;FileStream(fileHandle: try FileHandle(forReadingFrom: URL(string: "file-to-upload.txt")!))
&amp;nbsp;&amp;nbsp; &amp;nbsp;),
&amp;nbsp;&amp;nbsp; &amp;nbsp;bucket: "destination-bucket",
&amp;nbsp;&amp;nbsp; &amp;nbsp;key: "some-key"
)

// Call .uploadObject and save the returned task.
let uploadObjectTask = try s3tm.uploadObject(input: uploadObjectInput)
let uploadObjectOutput = try await uploadObjectTask.value&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Download an object&lt;/h3&gt; 
&lt;p&gt;To download an object from Amazon S3, you need to provide the input struct &lt;code&gt;DownloadObjectInput&lt;/code&gt;, which contains the download destination, a subset of &lt;code&gt;GetObjectInput&lt;/code&gt; struct properties, and an array of transfer listeners. The download destination is an instance of &lt;a href="https://developer.apple.com/documentation/foundation/outputstream" target="_blank" rel="noopener noreferrer"&gt;Swift’s Foundation.OutputStream&lt;/a&gt;. You must provide the download destination, the source bucket, and the S3 object key of the object to download.&lt;/p&gt; 
&lt;p&gt;When object being downloaded is bigger than the size of a single part configured by &lt;code&gt;targetPartSizeBytes&lt;/code&gt; &amp;nbsp;(8MB default), S3TM downloads the object in parts concurrently using either part numbers or byte ranges as configured by &lt;code&gt;multipartDownloadType&lt;/code&gt; (&lt;code&gt;.part&lt;/code&gt; default).&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-javascript"&gt;// Construct DownloadObjectInput.
let downloadObjectInput = DownloadObjectInput(
&amp;nbsp;&amp;nbsp; &amp;nbsp;outputStream: OutputStream(toFileAtPath: "destination-file.txt", append: true)!,
&amp;nbsp;&amp;nbsp; &amp;nbsp;bucket: "source-bucket",
&amp;nbsp;&amp;nbsp; &amp;nbsp;key: "s3-object.txt"
)

// Call .downloadObject and save the returned task.
let downloadObjectTask = try s3tm.downloadObject(input: downloadObjectInput)
let downloadObjectOutput = try await downloadObjectTask.value&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;&amp;nbsp;Conclusion&lt;/h2&gt; 
&lt;p&gt;To learn more about how to use the Amazon S3 Transfer Manager for Swift including how to upload a directory, download a bucket, and track transfer progress, visit our &lt;a href="https://github.com/aws/aws-sdk-swift-s3-transfer-manager" target="_blank" rel="noopener noreferrer"&gt;README.md&lt;/a&gt;&amp;nbsp;on GitHub. Try out the new Transfer Manager today and let us know what you think via the &lt;a href="https://github.com/aws/aws-sdk-swift-s3-transfer-manager/issues" target="_blank" rel="noopener noreferrer"&gt;GitHub issues page&lt;/a&gt;!&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Create minimal reproductions for AWS SDK JavaScript v3 with create-aws-sdk-repro</title>
		<link>https://aws.amazon.com/blogs/developer/create-minimal-reproductions-for-aws-sdk-javascript-v3-with-create-aws-sdk-repro/</link>
					
		
		<dc:creator><![CDATA[John Lwin]]></dc:creator>
		<pubDate>Thu, 23 Apr 2026 18:37:18 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for JavaScript in Node.js]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">e4c05217967ff09941b388bf552d781d74350cad</guid>

					<description>We’re excited to announce create-aws-sdk-repro, an open source tool that generates ready-to-run AWS SDK for JavaScript v3 projects. You answer a few prompts, pick a service, an operation, environment, and the tool generates a project with everything wired up. With AWS credentials configured, it’s ready to run. In this post, we walk through how the […]</description>
										<content:encoded>&lt;p&gt;We’re excited to announce &lt;a href="https://github.com/awslabs/create-aws-sdk-repro" target="_blank" rel="noopener noreferrer"&gt;create-aws-sdk-repro&lt;/a&gt;, an open source tool that generates ready-to-run &lt;a href="https://aws.amazon.com/sdk-for-javascript/" target="_blank" rel="noopener"&gt;AWS SDK for JavaScript&lt;/a&gt; v3 projects.&lt;/p&gt; 
&lt;p&gt;You answer a few prompts, pick a service, an operation, environment, and the tool generates a project with everything wired up. With AWS credentials configured, it’s ready to run. In this post, we walk through how the tool works, what it generates, and how to use it.&lt;/p&gt; 
&lt;h2&gt;Use cases&lt;/h2&gt; 
&lt;h3&gt;Getting started with a new service&lt;/h3&gt; 
&lt;p&gt;Instead of piecing together documentation and examples, generate a working project for any AWS service in seconds. The correct imports, credential handling, and error handling are already in place.&lt;/p&gt; 
&lt;h3&gt;Testing SDK behavior&lt;/h3&gt; 
&lt;p&gt;Quickly spin up isolated projects to test specific SDK operations without affecting your main codebase.&lt;/p&gt; 
&lt;h3&gt;Troubleshooting SDK issues&lt;/h3&gt; 
&lt;p&gt;If you run into an SDK issue, generate a minimal repro with your service and operation, run it, and share the output in your GitHub issue. A clean project without framework dependencies makes it easier to isolate the problem and get to a resolution faster.&lt;/p&gt; 
&lt;h2&gt;Walkthrough&lt;/h2&gt; 
&lt;p&gt;In this walkthrough, you will generate a Node.js project that calls the Amazon S3 ListBuckets operation in the us-west-2 AWS Region. Each step shows which option to select so you can follow along.&lt;/p&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Install Node.js version 20 or later. See &lt;a href="https://nodejs.org/en/download" target="_blank" rel="noopener noreferrer"&gt;Node.js downloads&lt;/a&gt; for instructions.&lt;/li&gt; 
 &lt;li&gt;For Node.js projects, configure AWS credentials by running aws configure. For more information, see Configuring the &lt;a href="https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for JavaScript&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;For Browser and React Native projects, set up an Amazon Cognito identity pools. The tool generates a &lt;code&gt;COGNITO_SETUP.md&lt;/code&gt; guide with step-by-step instructions. For more information, see &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito identity pools&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Step 1: Run the CLI&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;$ npm create @aws-sdk/repro&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Step 2: Select your environment&lt;/h5&gt; 
&lt;p&gt;The CLI prompts for the JavaScript environment:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;? Select JavaScript environment: › - Use arrow-keys. Return to submit.
❯   Node.js
    Browser
    React Native&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Node.js uses the default &lt;a href="https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html" target="_blank" rel="noopener noreferrer"&gt;AWS credentials chain&lt;/a&gt;. Browser generates a Vite-based project with &lt;a href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener noreferrer"&gt;Amazon Cognito&lt;/a&gt; identity pools for browser-safe credentials. React Native creates a full native project with required polyfills.&lt;/p&gt; 
&lt;h5&gt;Step 3: Enter a project name&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;? Enter project name: aws-sdk-repro-a1b2c3d4&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The tool suggests a default name with the prefix &lt;code&gt;aws-sdk-repro-&lt;/code&gt; followed by a random identifier for uniqueness. You can enter a custom name. The name must be non-empty and cannot contain the characters &lt;code&gt;/ \ : * ? " &amp;lt; &amp;gt; |&lt;/code&gt;&amp;nbsp;or path traversal sequences (&lt;code&gt;..&lt;/code&gt;). For React Native projects, the name is further sanitized to alphanumeric characters only. For this walkthrough, press Enter to use the default.&lt;/p&gt; 
&lt;h5&gt;Step 4: Select an AWS service&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;? Select or search for AWS service: s3&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The tool provides autocomplete across &lt;code&gt;@aws-sdk/client-*&lt;/code&gt;&amp;nbsp;packages and matches anywhere in the client name. For example, typing ‘s3’ or ‘dynamo’ filters the list to matching packages. It also suggests corrections for typos. For a full list of supported services, see the &lt;a href="https://github.com/aws/aws-sdk-js-v3/tree/main/clients" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for JavaScript v3 client packages&lt;/a&gt;.&lt;/p&gt; 
&lt;h5&gt;Step 5: Wait for operation discovery&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;Fetching available operations for S3...
  Installing @aws-sdk/client-s3...
  Found 107 operations
  Client: S3Client&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The tool temporarily installs the SDK package in a temporary directory and scans it for available command classes (e.g., ListBucketsCommand, PutObjectCommand).&lt;/p&gt; 
&lt;h5&gt;Step 6: Select an operation&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;? Select or search for operation (kebab-case): list-buckets&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Step 7: Select a Region&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;? Select or enter AWS region: us-west-2 - US West (Oregon)&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Regions across commercial, GovCloud, and China partitions are available with autocomplete. GovCloud and China Regions require separate AWS accounts with specific access. For more information, see &lt;a href="https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html" target="_blank" rel="noopener noreferrer"&gt;Managing AWS Regions&lt;/a&gt;.&lt;/p&gt; 
&lt;h5&gt;Step 8: Review the generated project&lt;/h5&gt; 
&lt;p&gt;The tool creates a project directory with the following files:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-js"&gt;// &lt;em&gt;index.js&lt;/em&gt;
import { S3Client, ListBucketsCommand } from '@aws-sdk/client-s3';

try {
  const client = new S3Client({ region: 'us-west-2' });
  const input = {}; // Add your input parameters here
  const command = new ListBucketsCommand(input);
  const response = await client.send(command);
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class="lang-json"&gt;// &lt;em&gt;package.json&lt;/em&gt;
{
  "name": "aws-sdk-repro-a1b2c3d4",
  "version": "1.0.0",
  "type": "module",
  "dependencies": {
    "@aws-sdk/client-s3": "latest"
  },
  "scripts": {
    "start": "node index.js"
  }
}&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The generated code imports the correct client class (&lt;code&gt;S3Client&lt;/code&gt;) and command (&lt;code&gt;ListBucketsCommand&lt;/code&gt;) directly from the SDK package. It uses the default credentials chain, so it works with &lt;code&gt;aws configure&lt;/code&gt; or environment variables. Error handling is included, and the input object is empty and ready for you to add request parameters.&lt;/p&gt; 
&lt;h5&gt;Step 9: Run the generated project&lt;/h5&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;cd aws-sdk-repro-a1b2c3d4
npm install
npm start&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For operations like &lt;code&gt;ListBuckets&lt;/code&gt;, &lt;code&gt;DescribeInstances&lt;/code&gt;, or &lt;code&gt;ListTables&lt;/code&gt;, the empty input object works without additional parameters. For operations that require parameters, add them to the input object in &lt;code&gt;index.js&lt;/code&gt;. IDE autocomplete will show available fields since the types are already imported.&lt;/p&gt; 
&lt;p&gt;The walkthrough above shows a Node.js project. For Browser, the tool generates an &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;index.js&lt;/code&gt; with Cognito credentials, a Vite config, and a &lt;code&gt;COGNITO_SETUP.md&lt;/code&gt; guide. For React Native, it scaffolds a full native project with &lt;code&gt;App.js&lt;/code&gt;, required polyfills, and Cognito setup. Both include step-by-step instructions for configuring a Cognito identity pools.&lt;/p&gt; 
&lt;h2&gt;Clean up&lt;/h2&gt; 
&lt;p&gt;The generated projects are standalone directories on your local machine. To clean up:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-bash"&gt;rm -rf aws-sdk-repro-a1b2c3d4&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you created a Cognito identity pools for Browser or React Native testing, delete the Cognito identity pools and any associated IAM roles that are no longer needed. There are no ongoing AWS costs from the tool itself. Standard API pricing applies only when you run the generated project and make API calls.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;create-aws-sdk-repro automates the setup for creating a minimal SDK project. Pick a service, operation, Region, and environment (Node.js, Browser, or React Native) – the tool handles the rest: correct client imports, credentials configuration, error handling, and a project that runs immediately. It works across Node.js, Browser (with Amazon Cognito), and React Native, covering the most common environments where developers use the AWS SDK for JavaScript v3.&lt;/p&gt; 
&lt;p&gt; Whether you’re getting started with a new AWS service, testing SDK behavior in isolation, or troubleshooting an issue, the tool gives you a clean project without the setup overhead. Less time on configuration, more time on the actual work.&lt;/p&gt; 
&lt;p&gt;For more on the AWS SDK for JavaScript v3, see our &lt;a href="https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/"&gt;Developer Guide&lt;/a&gt; and the &lt;a href="https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/"&gt;API Reference&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you’re working with browser credentials, the &lt;a href="https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html"&gt;Amazon Cognito identity pools documentation&lt;/a&gt; covers setup in detail.&lt;/p&gt; 
&lt;p&gt;Your feedback is greatly appreciated. You can engage with the AWS SDK for JavaScript team directly by opening a discussion or issue on our &lt;a href="https://github.com/awslabs/create-aws-sdk-repro" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt; 
&lt;h2&gt;About the authors&lt;/h2&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Smithy Java client framework is now generally available</title>
		<link>https://aws.amazon.com/blogs/developer/smithy-java-client-framework-is-now-generally-available/</link>
					
		
		<dc:creator><![CDATA[Manuel Sugawara]]></dc:creator>
		<pubDate>Mon, 06 Apr 2026 17:41:04 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[smithy]]></category>
		<guid isPermaLink="false">e3088a36806335b9ee66f405fb7d47ecdfe10dbc</guid>

					<description>Smithy Java client code generation is now generally available. You can use it to build type-safe, protocol-agnostic Java clients directly from Smithy models. With Smithy Java, serialization, protocol handling, and request/response lifecycles are all generated automatically from your model. This removes the need to write or maintain any of this code by hand. In this […]</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://github.com/smithy-lang/smithy-java" target="_blank" rel="noopener"&gt;Smithy Java&lt;/a&gt; client code generation is now generally available. You can use it to build type-safe, protocol-agnostic Java clients directly from Smithy models. With Smithy Java, serialization, protocol handling, and request/response lifecycles are all generated automatically from your model. This removes the need to write or maintain any of this code by hand.&lt;/p&gt; 
&lt;p&gt;In this post, you will learn what Smithy Java client generation is, how it works, what makes it different, and how you can use it. Modern service development is built on strong contracts and automation. &lt;a href="https://smithy.io/" target="_blank" rel="noopener"&gt;Smithy&lt;/a&gt; provides a model-driven approach to defining services and generating code from those definitions. It produces clients, services, and documentation from a single source of truth that stays aligned with your API as it evolves. Smithy Java client code generation enforces protocol correctness and removes serialization boilerplate, so you can focus on building features instead of hand-writing requests and responses.&lt;/p&gt; 
&lt;h2&gt;How it works&lt;/h2&gt; 
&lt;p&gt;At a high level, Smithy Java client code generation transforms Smithy models into strongly typed Java clients.&lt;/p&gt; 
&lt;h3&gt;Model-driven development&lt;/h3&gt; 
&lt;p&gt;At the core of the workflow is modeling services using Smithy. You define services, operations, and data shapes in a declarative format that captures API structure, constraints, and protocol bindings. These models act as the canonical definition of the API surface. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-smithy"&gt;namespace com.example

use aws.api#service
use smithy.protocols#rpcv2Cbor

@title("Coffee Shop Service")
@rpcv2Cbor
@service(sdkId: "CoffeeShop")
service CoffeeShop {
&amp;nbsp;&amp;nbsp;&amp;nbsp; version: "2024-08-23"
&amp;nbsp;&amp;nbsp;&amp;nbsp; operations: [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMenu
&amp;nbsp;&amp;nbsp;&amp;nbsp; ]
}

@readonly
operation GetMenu {
&amp;nbsp;&amp;nbsp;&amp;nbsp; output := {
        items: CoffeeItems
    }
} 
...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Smithy Java consumes the models and produces Java client code. The generated output includes typed operations, serializers, deserializers, and protocol handling.&lt;/p&gt; 
&lt;p&gt;For more information about writing Smithy models, see &lt;a href="https://smithy.io/2.0/quickstart.html" target="_blank" rel="noopener"&gt;Smithy’s quick start documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Generated clients&lt;/h3&gt; 
&lt;p&gt;The generated clients support a range of features that are typical for client-service communication, including request/response handling, serialization, protocol negotiation, retries, error mapping, and custom interceptors. You only need to define them in the model, and Smithy Java writes the code for you.&lt;/p&gt; 
&lt;p&gt;The following is an example of a generated Java client:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-java"&gt;var client = CoffeeShopClient.builder()
&amp;nbsp;&amp;nbsp;&amp;nbsp; .endpointProvider(EndpointResolver.staticEndpoint("http://localhost:8888"))
&amp;nbsp;&amp;nbsp;&amp;nbsp; .build();

var menu = client.getMenu();&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can regenerate clients after API changes to the model, keeping them up to date without writing any manual code.&lt;/p&gt; 
&lt;p&gt;For more information about how to start generating Java clients from Smithy models, see our &lt;a href="https://smithy.io/2.0/languages/java/quickstart.html" target="_blank" rel="noopener"&gt;quick start guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Key capabilities&lt;/h2&gt; 
&lt;h3&gt;Protocol flexibility&lt;/h3&gt; 
&lt;p&gt;Smithy Java generated clients are protocol-agnostic. The framework includes built-in support for HTTP transport, AWS protocols (including &lt;a href="https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html" target="_blank" rel="noopener"&gt;AWS JSON 1.0&lt;/a&gt;/&lt;a href="https://smithy.io/2.0/aws/protocols/aws-json-1_1-protocol.html" target="_blank" rel="noopener"&gt;1.1&lt;/a&gt;, &lt;a href="https://smithy.io/2.0/aws/protocols/aws-restjson1-protocol.html" target="_blank" rel="noopener"&gt;restJson1&lt;/a&gt;, &lt;a href="https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html" target="_blank" rel="noopener"&gt;restXml&lt;/a&gt; and &lt;a href="https://smithy.io/2.0/aws/protocols/aws-query-protocol.html" target="_blank" rel="noopener"&gt;Query&lt;/a&gt;), and &lt;a href="https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html" target="_blank" rel="noopener"&gt;Smithy RPCv2 CBOR&lt;/a&gt;. You can swap protocols at runtime without rebuilding the client, enabling gradual protocol migrations and multi-protocol support with no code changes.&lt;/p&gt; 
&lt;h3&gt;Dynamic client&lt;/h3&gt; 
&lt;p&gt;Not every use case requires code generation at build time. Smithy Java includes a dynamic client that loads Smithy models at runtime and can interact with any service API without a codegen step. This is particularly useful for building tools, service aggregators, or systems that must interact with unknown services at build time, all while keeping the deployment footprint small.&lt;/p&gt; 
&lt;p&gt;The following is an example of calling the Coffee Shop service using the DynamicClient :&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-java"&gt;var model = Model.assembler().addImport("model.smithy").assemble().unwrap();
var serviceId = ShapeId.from("com.example#CoffeeShop");
var client = DynamicClient.builder().model(model).serviceId(serviceId).build();
var result = client.call("GetMenu");&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Shape code generation independent of services&lt;/h3&gt; 
&lt;p&gt;Smithy Java can generate type-safe Java classes from Smithy shapes without any service context. This extends Smithy’s model-first approach beyond service calls into the data and logic layers of your system, enabling code reuse and consistency across projects that share common types.&lt;/p&gt; 
&lt;h3&gt;Built on Java virtual threads&lt;/h3&gt; 
&lt;p&gt;Smithy Java is built from the ground up around &lt;a href="https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html" target="_blank" rel="noopener"&gt;Java 21’s virtual threads&lt;/a&gt;. Instead of exposing complex async APIs with callbacks or reactive streams, it provides a blocking-style interface that is straightforward to read, write, and debug, without sacrificing performance. Users can concentrate on their business logic while letting Smithy Java and the JVM handle task scheduling, synchronization, and structured error handling.&lt;/p&gt; 
&lt;p&gt;The following example demonstrates using &lt;a href="https://aws.amazon.com/transcribe/" target="_blank" rel="noopener"&gt;Amazon Transcribe&lt;/a&gt; with Smithy’s Java event streams blocking API. To send an event, Smithy clients use a &lt;code&gt;EventStreamWriter&amp;lt;T&amp;gt;&lt;/code&gt; with a &lt;code&gt;write(T event)&lt;/code&gt; method, and to receive an event the client uses &lt;code&gt;EventStreamReader&lt;/code&gt; with a &lt;code&gt;T read()&lt;/code&gt; method. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-java"&gt;// Create an Amazon Transcribe client
var client = TranscribeClient.builder().build();
var audioStream = EventStream.&amp;lt;AudioStream&amp;gt;newWriter();

// Create a stream transcription request
var request = StartStreamTranscriptionInput.builder().audioStream(audioStream).build();

// Create a VT to send the audio that we want to transcribe
Thread.startVirtualThread(() -&amp;gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; try (var audioStreamWriter = audioStream.asWriter()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var chunk : iterableAudioChunks()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var event = AudioEvent.builder().audioChunk(chunk).build()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; audioStreamWriter.write(AudioStream.builder().audioEvent(event).build());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
});

// Send the request to Amazon Transcribe
var response = client.startStreamTranscription(request);

// Create a VT to read the transcription from the audio.
Thread.startVirtualThread(() -&amp;gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; // The reader
&amp;nbsp;&amp;nbsp;&amp;nbsp; try (var results = response.getTranscriptResultStream().asReader()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The reader implements Iterable
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var event : results) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (event) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case TranscriptResultStream.TranscriptEventMember transcript -&amp;gt; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var transcriptText = getTranscript(transcript);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (transcriptText != null) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; appendAudioTranscript(transcriptText);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default -&amp;gt; throw new IllegalStateException("Unexpected event " + event);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
});&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, I explained what Smithy Java client generation is and how it works. With this general availability release, Smithy Java’s public APIs are now stable; we commit to backwards compatibility, making it ready for use in production systems. To get started with Smithy Java client code generation, use our &lt;a href="https://smithy.io/2.0/languages/java/quickstart.html" target="_blank" rel="noopener"&gt;quick start guide&lt;/a&gt; and &lt;a href="https://smithy.io/2.0/languages/java/index.html" target="_blank" rel="noopener"&gt;documentation&lt;/a&gt;. If you want to send us feedback, ask a question, or discuss, you can reach us through &lt;a href="https://github.com/smithy-lang/smithy-java/issues" target="_blank" rel="noopener"&gt;GitHub issues&lt;/a&gt; and &lt;a href="https://github.com/smithy-lang/smithy-java/discussions" target="_blank" rel="noopener"&gt;GitHub discussions&lt;/a&gt;.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the author&lt;/h2&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Smithy Kotlin client code generation now generally available</title>
		<link>https://aws.amazon.com/blogs/developer/smithy-kotlin-client-code-generation-now-generally-available/</link>
					
		
		<dc:creator><![CDATA[Omar Perez]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 15:24:42 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Kotlin]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[smithy]]></category>
		<guid isPermaLink="false">ed10045367cdd2883286784b20e72a07634d9aa8</guid>

					<description>Smithy Kotlin&amp;nbsp;client code generation is now generally available. With Smithy Kotlin, you can keep client libraries in sync with evolving service APIs. By using client code generation, you can reduce repetitive work and instead, automatically create type-safe Kotlin clients from your service models. In this post, you will learn what Smithy Kotlin client generation is, how it works, and how you can use it.</description>
										<content:encoded>&lt;p&gt;&lt;a href="https://github.com/smithy-lang/smithy-kotlin" target="_blank" rel="noopener noreferrer"&gt;Smithy Kotlin&lt;/a&gt;&amp;nbsp;client code generation is now generally available. With Smithy Kotlin, you can keep client libraries in sync with evolving service APIs. By using client code generation, you can reduce repetitive work and instead, automatically create type-safe Kotlin clients from your service models. In this post, you will learn what Smithy Kotlin client generation is, how it works, and how you can use it.&lt;/p&gt; 
&lt;p&gt;Modern service development increasingly relies on strong contracts, automation, and consistency. &lt;a href="https://smithy.io/" target="_blank" rel="noopener noreferrer"&gt;Smithy&lt;/a&gt;&amp;nbsp;provides a model-driven approach to defining services and enables code generation from those definitions, helping you to produce reliable clients from a single source of truth.&lt;/p&gt; 
&lt;h2&gt;How it works&lt;/h2&gt; 
&lt;p&gt;At a high level, Smithy Kotlin client code generation transforms Smithy service models into strongly typed Kotlin clients. This process bridges the gap between API design and implementation, producing code that handles serialization, protocol details, and request/response lifecycles automatically.&lt;/p&gt; 
&lt;h3&gt;Model-driven development&lt;/h3&gt; 
&lt;p&gt;At the core of the workflow is modeling services using Smithy. You can define services, operations, and data shapes in a declarative format that captures structure, constraints, and protocol bindings. These models specify the canonical definition of the API surface. For example:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-php"&gt;namespace com.example

use aws.api#service
use smithy.protocols#rpcv2Cbor

@title("Coffee Shop Service")
@rpcv2Cbor
@service(sdkId: "CoffeeShop")
service CoffeeShop {
&amp;nbsp;&amp;nbsp; &amp;nbsp;version: "2024-08-23"
&amp;nbsp;&amp;nbsp; &amp;nbsp;operations: [
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GetMenu
&amp;nbsp;&amp;nbsp; &amp;nbsp;]
}

@http(method: "GET", uri: "/menu")
@readonly
operation GetMenu {
&amp;nbsp;&amp;nbsp; &amp;nbsp;output := {
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;items: CoffeeItems
&amp;nbsp;&amp;nbsp; &amp;nbsp;}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;Smithy Kotlin consumes the models and produces Kotlin client code. The generated output includes typed operations, serializers, and deserializers, maintaining alignment between the model and client implementation.&lt;/p&gt; 
&lt;p&gt;For more information about writing Smithy models, see &lt;a href="https://smithy.io/2.0/quickstart.html" target="_blank" rel="noopener noreferrer"&gt;Smithy’s quick start documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Clients&lt;/h3&gt; 
&lt;p&gt;The generated clients support a range of features typical for service communication, including request/response handling, serialization, protocols, and error mapping. You only need to define them in the model and Smithy Kotlin writes the code for you. Because Smithy Kotlin targets Kotlin and generated clients run on the Java Virtual Machine (JVM), they integrate naturally with existing language tools. You can incorporate them into modern build systems, use concurrency features, and combine them with established libraries and frameworks already used in Kotlin. An example of a generated Kotlin client:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-php"&gt;CoffeeShopClient {
 &amp;nbsp; &amp;nbsp;endpointProvider = CoffeeShopEndpointProvider {
 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;endpointUrl = Url.parse("http://localhost:8888")
 &amp;nbsp; &amp;nbsp;}
}.use { client -&amp;gt;
&amp;nbsp; &amp;nbsp; val menu =&amp;nbsp;client.getMenu()
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;For more information about how to start generating Kotlin clients from Smithy models, see the&amp;nbsp;&lt;a href="https://smithy.io/2.0/languages/kotlin/client/generating-clients.html" target="_blank" rel="noopener noreferrer"&gt;client generation guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;What does general availability mean?&lt;/h2&gt; 
&lt;p&gt;Smithy Kotlin has been in development and available in developer preview for a few years. This milestone reflects production readiness, stability, and broader confidence in adopting the generated clients as part of standard development workflows.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this blog post, we covered what Smithy Kotlin client generation is, how it works, and how you can use it. To get started with Smithy Kotlin client code generation see the&amp;nbsp;&lt;a href="https://github.com/smithy-lang/smithy-examples/tree/main/smithy-kotlin-examples/quickstart-kotlin" target="_blank" rel="noopener noreferrer"&gt;quick start example&lt;/a&gt; and &lt;a href="https://smithy.io/2.0/languages/kotlin/index.html" target="_blank" rel="noopener noreferrer"&gt;documentation page&lt;/a&gt;. If you’d like to share feedback, ask a question, or discuss, you can reach us&lt;a href="https://github.com/smithy-lang/smithy-kotlin/issues" target="_blank" rel="noopener noreferrer"&gt;&amp;nbsp;through GitHub issues&lt;/a&gt;&amp;nbsp;and &lt;a href="https://github.com/smithy-lang/smithy-kotlin/discussions" target="_blank" rel="noopener noreferrer"&gt;GitHub discussions&lt;/a&gt;.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the author&lt;/h2&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Upgrading AWS CLI From v1 to v2 Using the Migration Tool</title>
		<link>https://aws.amazon.com/blogs/developer/upgrading-aws-cli-from-v1-to-v2-using-the-migration-tool/</link>
					
		
		<dc:creator><![CDATA[Ahmed Moustafa]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 22:53:53 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Command Line Interface]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">d6b77276aae18d8b3f6d5f96afe597563841bdbb</guid>

					<description>Upgrading from AWS Command Line Interface (AWS CLI) v1 to AWS CLI v2 brings valuable improvements, but requires attention to several changes that may affect your existing workflows, such as failing commands, or misconfiguration. The AWS CLI v1-to-v2 Migration Tool helps you identify and resolve issues before upgrading, making transition easier. It analyzes bash scripts […]</description>
										<content:encoded>&lt;p&gt;Upgrading from &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html" target="_blank" rel="noopener"&gt;AWS Command Line Interface (AWS CLI) v1 &lt;/a&gt;to &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" target="_blank" rel="noopener"&gt;AWS CLI v2&lt;/a&gt; brings valuable improvements, but requires attention to several changes that may affect your existing workflows, such as failing commands, or misconfiguration.&lt;/p&gt; 
&lt;p&gt;The AWS CLI v1-to-v2 Migration Tool helps you identify and resolve issues before upgrading, making transition easier. It analyzes bash scripts containing AWS CLI v1 commands where behavior differs in AWS CLI v2. The tool will either suggest a change to a command or guide you to resolve a potential risk. It can also automatically create an updated version of the script with implemented changes. Where applicable, the migration tool will change the commands in a way that preserves AWS CLI version 1 behavior.&lt;/p&gt; 
&lt;p&gt;The AWS CLI v1-to-v2 Migration Tool is a standalone tool compatible with &lt;i&gt;any&lt;/i&gt;&amp;nbsp;version of AWS CLI v1, and does not require executing AWS CLI commands.&amp;nbsp;Compared to Upgrade Debug Mode, an alternative solution built into AWS CLI version &lt;code&gt;1.44.0&lt;/code&gt; or later, the Migration Tool offers broader compatibility and works independently of your CLI installation. For a thorough comparison between the Upgrade Debug Mode and the AWS CLI v1-to-v2 Migration Tool see &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-choosing-migration-tool" target="_blank" rel="noopener"&gt;Choosing Between Upgrade Debug Mode and AWS CLI v1-to-v2 Migration Tool&lt;/a&gt;&lt;b&gt; &lt;/b&gt;in our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;Migration guide for the AWS CLI version 2&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In this post, we’ll walk you through using&amp;nbsp;AWS CLI v1-to-v2 Migration Tool to identify potential breaking changes, resolve compatibility issues, and safely transition your scripts to v2.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;Before you begin, you’ll need Python version 3.9 or later, and pip installed on your machine. See the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html#migration-tool-prerequisites" target="_blank" rel="noopener"&gt;Prerequisites&lt;/a&gt; in &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html" target="_blank" rel="noopener"&gt;Using AWS CLI v1-to-v2 Migration Tool to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt;&amp;nbsp;for instructions to install these prerequisites.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;You’ll start by installing the AWS CLI v1-to-v2 Migration Tool. Then, you’ll use this tool to analyze bash scripts for AWS CLI v1 commands that may need to be updated before upgrading to AWS CLI v2.&amp;nbsp;Then, you’ll review the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;AWS CLI v2 breaking changes list&lt;/a&gt;&amp;nbsp;in the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;Migration guide for the AWS CLI version 2&lt;/a&gt;&amp;nbsp;to manually verify whether your workflows may be broken by upgrading, and safely upgrade to AWS CLI v2.&lt;/p&gt; 
&lt;h3&gt;Step 1: Install the&amp;nbsp;AWS CLI v1-to-v2 Migration Tool&lt;/h3&gt; 
&lt;p&gt;See &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html#migration-tool-installation" target="_blank" rel="noopener"&gt;Installation&lt;/a&gt; in &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html" target="_blank" rel="noopener"&gt;Using AWS CLI v1-to-v2 Migration Tool to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt; for instructions to install the AWS CLI v1-to-v2 Migration Tool.&lt;/p&gt; 
&lt;h3&gt;Step 2: Lint a bash script using interactive mode&lt;/h3&gt; 
&lt;p&gt;Next, you’ll run the migration tool in interactive mode. Interactive mode walks you through each flagged command one at a time. For each detection, it will suggest a change to make the command have the same behavior in AWS CLI v2.&lt;/p&gt; 
&lt;p&gt;For this blog post, we’ll use&amp;nbsp;the following example bash script, which uses AWS CLI v1 to upload an AWS CloudFormation template to Amazon Simple Storage Service (Amazon S3), copy the template to a backup Amazon S3 bucket, and create a CloudFormation stack from the template.&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;#!/bin/bash
set -e

TEMPLATE="$1"
BUCKET="$2"
BACKUP="$3"
STACK_NAME="$4"

if [ -z "$TEMPLATE" ] || [ -z "$BUCKET" ] || [ -z "$BACKUP" ] || [ -z "$STACK_NAME" ]; then
&amp;nbsp;&amp;nbsp; &amp;nbsp;echo "Usage: $0&amp;nbsp;&amp;lt;template-file&amp;gt; &amp;lt;bucket&amp;gt; &amp;lt;backup-bucket&amp;gt; &amp;lt;stack-name&amp;gt;"
&amp;nbsp;&amp;nbsp; &amp;nbsp;exit 1
fi

TMPKEY="cloudformation/$(basename "$TEMPLATE")"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_KEY="cloudformation/$TIMESTAMP-$(basename "$TEMPLATE")"

# Upload template
aws s3 cp $TEMPLATE s3://$BUCKET/$TMPKEY

# Copy template to backup bucket
aws s3 cp s3://$BUCKET/$TMPKEY&amp;nbsp;s3://$BACKUP/$BACKUP_KEY

# Create a stack from the template
aws cloudformation create-stack \
&amp;nbsp;&amp;nbsp;--stack-name "$STACK_NAME"&amp;nbsp;\
&amp;nbsp;&amp;nbsp;--template-body "https://s3.amazonaws.com/$BUCKET/$TMPKEY"

echo "Stack creation initiated. Stack ID: $(
&amp;nbsp;&amp;nbsp;aws cloudformation describe-stacks \
&amp;nbsp;&amp;nbsp; &amp;nbsp;--stack-name "$STACK_NAME" \
&amp;nbsp;&amp;nbsp; &amp;nbsp;--query 'Stacks[0].StackId' \
&amp;nbsp;&amp;nbsp; &amp;nbsp;--output text \
&amp;nbsp; &amp;nbsp; --cli-input-json file://describe_stacks_input.json
)"&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;You will use the command below to use the migration tool to analyze the bash script &lt;code&gt;upload_s3_files.sh&lt;/code&gt;, suggest fixes, and write the modified script to the path &lt;code&gt;upload_s3_files_v2.sh&lt;/code&gt; in interactive mode. For the sake of demonstration, this blog post does not include every finding that gets detected in the example script:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;$ migrate-aws-cli --script upload_s3_files.sh&amp;nbsp;--output upload_s3_files_v2.sh \
&amp;nbsp;&amp;nbsp;--interactive
&amp;nbsp;&amp;nbsp;
19 19│ aws s3 cp $TEMPLATE s3://$BUCKET/$TMPKEY
20 20│ 
21 21│ # Copy template to backup bucket
22 &amp;nbsp; │-aws s3 cp s3://$BUCKET/$TMPKEY s3://$BACKUP/$BACKUP_KEY
&amp;nbsp;&amp;nbsp; 22│+aws s3 cp s3://$BUCKET/$TMPKEY s3://$BACKUP/$BACKUP_KEY --copy-props none
23 23│ 
24 24│ # Create a stack from the template
25 25│ aws cloudformation create-stack \

script.sh:22 [s3-copy] In AWS CLI v2, object properties will be copied from the 
source in multipart copies between S3 buckets. If a copy is or becomes multipart 
after upgrading to AWS CLI v2, extra API calls will be made. See 
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-s3-copy-metadata." rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-s3-copy-metadata.&lt;/a&gt;

Apply this fix? [y] yes, [n] no, [a] accept all of type, [r] reject all of type, 
[u] update all, [s] save and exit, [q] quit:&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;In the preceding finding, the associated breaking change is &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-s3-copy-metadata" target="_blank" rel="noopener"&gt;Improved Amazon S3 handling of file properties and tags for multipart copies&lt;/a&gt;. The suggested fix, given in a form similar to a Git diff, is to add the &lt;code&gt;--copy-props none&lt;/code&gt;&amp;nbsp;flag to the command. Adding the suggested flag will preserve AWS CLI v1 behavior in AWS CLI v2.&lt;/p&gt; 
&lt;p&gt;The following output snippet shows another finding:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;16 16│ BACKUP_KEY="cloudformation/$TIMESTAMP-$(basename "$TEMPLATE")"
17 17│ 
18 18│ # Upload template
19 &amp;nbsp; │-aws s3 cp $TEMPLATE s3://$BUCKET/$TMPKEY
&amp;nbsp;&amp;nbsp; 19│+aws s3 cp $TEMPLATE s3://$BUCKET/$TMPKEY&amp;nbsp;--cli-binary-format raw-in-base64-out
20 20│ 
21 21│ # Copy template to backup bucket
22 22│ aws s3 cp "s3://$BUCKET/$TMPKEY" "s3://$BACKUP/$BACKUP_KEY"

examples/upload_s3_files.sh:19 [binary-params-base64] In AWS CLI v2, an input 
parameter typed as binary large object (BLOB) expects the input to be base64-encoded. 
If using a BLOB-type input parameter, retain v1 behavior after upgrading to AWS CLI 
v2&amp;nbsp;by adding `--cli-binary-format raw-in-base64-out`. See 
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam." rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam.&lt;/a&gt;

Apply this fix? [y] yes, [n] no, [a] accept all of type, [r] reject all of type, 
[u] update all, [s] save and exit, [q] quit:&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;In the preceding detection, the associated breaking change is that&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam" target="_blank" rel="noopener"&gt;Binary parameters are passed as base64-encoded strings by default&lt;/a&gt;. The suggested fix, is to add the &lt;code&gt;--cli-binary-format raw-in-base64-out&lt;/code&gt;&amp;nbsp;flag to the command. Adding the suggested flag will preserve AWS CLI v1 behavior in AWS CLI v2.&lt;/p&gt; 
&lt;p&gt;Note that in this particular case, we are not using a binary-type parameter in the &lt;code&gt;aws s3 cp&lt;/code&gt;&amp;nbsp;command.&amp;nbsp;This highlights a core behavior of the migration tool: by design, it errs on the side of caution when detecting potential issues, flagging changes that might be breaking even when uncertain, provided the suggested fix won’t alter the code’s behavior.&lt;/p&gt; 
&lt;p&gt;The following output snippet shows another finding:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;27 27│ &amp;nbsp;--template-body "https://s3.amazonaws.com/$BUCKET/$TEMPLATE_KEY" --cli-binary-format raw-in-base64-out --no-cli-pager
28 28│
29 29│echo "Stack creation initiated. Stack ID: $(
30 30│ &amp;nbsp;aws cloudformation describe-stacks \
31 31│ &amp;nbsp; &amp;nbsp;--stack-name "$STACK_NAME" \
32 32│ &amp;nbsp; &amp;nbsp;--query 'Stacks[0].StackId' \
33 33│ &amp;nbsp; &amp;nbsp;--output text \
34 34│ &amp;nbsp; &amp;nbsp;--cli-input-json file://describe_stacks_input.json --cli-binary-format raw-in-base64-out --no-cli-pager
35 35│)"

examples/upload_s3_files.sh:30 [MANUAL REVIEW REQUIRED] [cli-input-json] In AWS CLI 
v2, specifying pagination parameters via `--cli-input-json` turns off automatic 
pagination. If pagination-related parameters are present in the input JSON specified 
with `--cli-input-json`, remove the pagination parameters from the input JSON to 
retain v1 behavior. See 
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-skeleton-paging." rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-skeleton-paging.&lt;/a&gt;

[n] next, [s] save, [q] quit:&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;In the preceding detection, the detected breaking change is&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-skeleton-paging" target="_blank" rel="noopener"&gt;AWS CLI version 2 is more consistent with paging parameters&lt;/a&gt;.&amp;nbsp;The migration tool cannot automatically modify the script in this case, so the detection is flagged with&amp;nbsp;&lt;code&gt;[MANUAL REVIEW REQUIRED]&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;For detections that require manual fixes, such as the example, you’ll enter &lt;code&gt;n&lt;/code&gt; and manually address the finding after the migration tool finishes executing.&lt;/p&gt; 
&lt;p&gt;After all detections are displayed, a summary is printed, including the number of issues found and the path to the modified script:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;Found 10 issue(s). 9 fixed. 1 require(s) manual review.
Changes written to: upload_s3_files_v2.sh&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;To resolve the detections that were flagged for manual review, follow the guidance in the suggested actions.&lt;/p&gt; 
&lt;h3&gt;Step 3: Upgrade to AWS CLI v2&lt;/h3&gt; 
&lt;p&gt;Customers are responsible for safely migrating their scripts; using the migration tool does not guarantee that all commands will have the same behavior in AWS CLI v2.&amp;nbsp;To complete a manual review, reference the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;breaking changes list&lt;/a&gt;&amp;nbsp;in the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;AWS CLI v2 Migration Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;After going through and applying any required changes identified in the previous steps, you are now ready to upgrade to AWS CLI v2 following the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" target="_blank" rel="noopener"&gt;installation guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Step 4: Uninstall migration tool if no longer needed&lt;/h3&gt; 
&lt;p&gt;After migration, you can uninstall the migration tool and remove original scripts if no longer needed.&lt;/p&gt; 
&lt;h2&gt;Important Considerations&lt;/h2&gt; 
&lt;p&gt;The AWS CLI v1-to-v2 Migration Tool uses static analysis to identify most compatibility considerations in your scripts. However, some scenarios—such as parameters stored in variables or determined at runtime—fall outside the tool’s detection scope and require manual review.&lt;/p&gt; 
&lt;p&gt;For more details on the limitations of the AWS CLI v1-to-v2 Migration Tool, see&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html#migration-tool-limitations" target="_blank" rel="noopener"&gt;Limitations&lt;/a&gt; in &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html" target="_blank" rel="noopener"&gt;Using AWS CLI v1-to-v2 Migration Tool to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;We strongly recommend customers understand our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;breaking changes list&lt;/a&gt; published in our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;AWS CLI v2 Migration Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this blog post, we showed you how to get started with the new AWS CLI v1-to-v2 Migration Tool to assist your upgrade from AWS CLI v1 to AWS CLI v2. To learn more, visit &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-migration-tool.html" target="_blank" rel="noopener"&gt;Using AWS CLI v1-to-v2 Migration Tool to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt;. We would love your feedback!&amp;nbsp;You can also open a discussion or issue on &lt;a href="https://github.com/aws/aws-cli/issues/new?template=migration-tool.yml" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;. Thank you for using the AWS CLI!&lt;/p&gt; 
&lt;p&gt;Have you encountered challenges migrating from AWS CLI v1 to AWS CLI v2? Share your experience in the comments below.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Transfer Manager Directory Support for AWS SDK for Ruby</title>
		<link>https://aws.amazon.com/blogs/developer/transfer-manager-directory-support-for-aws-sdk-for-ruby/</link>
					
		
		<dc:creator><![CDATA[Juli Tera]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 14:39:01 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for Ruby]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Programing Language]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[aws-sdk-ruby]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[S3]]></category>
		<guid isPermaLink="false">3104e1d9e1abaf185fccd247465d4f339610df22</guid>

					<description>In this post, we show you how to upload and download directories using Transfer Manager, customize transfer with filtering options and handle results effectively.</description>
										<content:encoded>&lt;p&gt;Managing bulk file transfer to &lt;a href="https://aws.amazon.com/s3/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt; can be complex when transferring directories containing multiple files and subdirectories. &lt;a href="https://aws.amazon.com/sdk-for-ruby/" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Ruby&lt;/a&gt; Transfer Manager (&lt;code&gt;aws-sdk-s3&lt;/code&gt; version 1.215) now supports directory upload and download. This feature can help streamline bulk transfers by providing multipart handling and parallelism options.&lt;/p&gt; 
&lt;p&gt;Previously, uploading directories to Amazon S3 required manual iteration and handling. You also had to manage multipart uploads for large files and implement parallelism for performance. With directory support in Transfer Manager, you can handle this with a single method call that automates the process. In this post, we show you how to upload and download directories using Transfer Manager, customize transfer with filtering options and handle results effectively.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;This support requires &lt;code&gt;aws-sdk-s3&lt;/code&gt; version&amp;nbsp;1.215 or higher. Add &lt;code&gt;aws-sdk-s3&lt;/code&gt;&amp;nbsp;to your Gemfile:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;gem 'aws-sdk-s3', '&amp;gt;= 1.215'&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Initialize the Transfer Manager&lt;/h3&gt; 
&lt;p&gt;To initialize a Transfer Manager with a default S3 client:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;require 'aws-sdk-s3' 
tm = Aws::S3::TransferManager.new&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or you could create a custom S3 client to pass to the Transfer Manager.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;client = Aws::S3::Client.new(region: 'us-east-1')
tm = Aws::S3::TransferManager.new(client: client)&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Upload a directory&lt;/h3&gt; 
&lt;p&gt;Upload a local directory to an S3 bucket by providing a source path and bucket name:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;tm.upload_directory('/path/to/directory', bucket: 'my-bucket')&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;By default, only files in the specified directory are uploaded. To include subdirectories, set&amp;nbsp;&lt;code&gt;recursive: true&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;tm.upload_directory('/path/to/directory', bucket: 'my-bucket', recursive: true)&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Download a directory&lt;/h3&gt; 
&lt;p&gt;Download objects from an S3 bucket to a local directory by providing a destination path and bucket name:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;tm.download_directory('/local/path', bucket: 'my-bucket')&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To download only objects with a specific prefix, set &lt;code&gt;s3_prefix&lt;/code&gt;. The full object key is preserved in the local path. For example, given &lt;code&gt;s3_prefix: 'photos/'&lt;/code&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Object key: &lt;code&gt;photos/vacation/beach.jpg&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Resolved local path: &lt;code&gt;/local/path/photos/vacation/beach.jpg&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;tm.download_directory('/local/path', bucket: 'my-bucket', s3_prefix: 'photos/2026/')&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Filtering contents&lt;/h3&gt; 
&lt;p&gt;You can also filter transfers by using &lt;code&gt;filter_callback&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;# Upload only .txt files 
filter = proc { |_path, name| name.end_with?('.txt') } 
tm.upload_directory('/path/to/directory', bucket: 'my-bucket', filter_callback: filter) 

# Download only .jpg files 
filter = proc { |obj| obj.key.end_with?('.jpg') } 
tm.download_directory('/local/path', bucket: 'my-bucket', filter_callback: filter)&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Handling results&lt;/h3&gt; 
&lt;p&gt;On success, both operations return a hash containing completed and failed transfer details:&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;result = tm.upload_directory('/path/to/directory', bucket: 'my-bucket') 
# =&amp;gt; { completed_uploads: 7, failed_uploads: 0 }&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;By default, an error raises an exception, which stops the transfer but does not clean up completed transfers. You can set &lt;code&gt;ignore_failure: true&lt;/code&gt;&amp;nbsp;to continue transferring remaining files and see what errors occurred in the results hash.&lt;/p&gt; 
&lt;pre&gt;&lt;code class="lang-ruby"&gt;result = tm.upload_directory(
  '/path/to/directory', 
  bucket: 'my-bucket', 
  ignore_failure: true
)
# =&amp;gt; { completed_uploads: 5, failed_uploads: 2, errors: [...] }&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;Directory upload and download support in the AWS SDK for Ruby Transfer Manager can help streamline bulk S3 transfers with built-in parallelism and multipart handling.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Key takeaways:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Use &lt;a href="https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/TransferManager.html#upload_directory-instance_method" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;upload_directory&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/TransferManager.html#download_directory-instance_method" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;download_directory&lt;/code&gt;&lt;/a&gt; for bulk transfers with a single method call&lt;/li&gt; 
 &lt;li&gt;Customize behavior with options like &lt;code&gt;recursive&lt;/code&gt;, &lt;code&gt;s3_prefix&lt;/code&gt;, and &lt;code&gt;filter_callback&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Handle errors gracefully with &lt;code&gt;ignore_failure&lt;/code&gt; and inspect results for details&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These are only a few of the available options. See the &lt;a href="https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/TransferManager.html" target="_blank" rel="noopener noreferrer"&gt;API documentation&lt;/a&gt; for a full list.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Next steps:&lt;/strong&gt;&amp;nbsp;Try implementing directory transfers in your applications and explore other Transfer Manager features like &lt;a href="https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/TransferManager.html#upload_file-instance_method" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;upload_file&lt;/code&gt;&lt;/a&gt; and&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/TransferManager.html#download_file-instance_method" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;download_file&lt;/code&gt;&lt;/a&gt; for single-object transfers.&lt;/p&gt; 
&lt;p&gt;Share your questions, comments, and issues with us on &lt;a href="https://github.com/aws/aws-sdk-ruby" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2&gt;About the author&lt;/h2&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Upgrade AWS CLI from v1 to v2 using upgrade debug mode</title>
		<link>https://aws.amazon.com/blogs/developer/upgrade-aws-cli-from-v1-to-v2-using-upgrade-debug-mode/</link>
					
		
		<dc:creator><![CDATA[Ahmed Moustafa]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 15:00:04 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<guid isPermaLink="false">7cf8b669e184d3d596423c097dd22d90e68427ef</guid>

					<description>Upgrading from 
&lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html"&gt;AWS Command Line Interface (AWS CLI) v1&lt;/a&gt; to 
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"&gt;AWS CLI v2&lt;/a&gt; can be challenging and time-consuming due to changes introduced in AWS CLI v2 that can potentially break your existing workflows. If you don’t properly address breaking changes in your scripts or workflows, then executing these workflows after upgrading to AWS CLI v2 may result in unintended consequences, such as failing commands or misconfiguring resources in your AWS account.</description>
										<content:encoded>&lt;p&gt;Upgrading from &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html" target="_blank" rel="noopener"&gt;AWS Command Line Interface (AWS CLI) v1&lt;/a&gt; to &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" target="_blank" rel="noopener"&gt;AWS CLI v2&lt;/a&gt; can be challenging and time-consuming due to changes introduced in AWS CLI v2 that can potentially break your existing workflows. If you don’t properly address breaking changes in your scripts or workflows, then executing these workflows after upgrading to AWS CLI v2 may result in unintended consequences, such as failing commands or misconfiguring resources in your AWS account.&lt;/p&gt; 
&lt;p&gt;AWS CLI v1’s upgrade debug mode helps you identify and resolve these issues before upgrading, for a safer and seamless transition. This mode detects usage of features in AWS CLI v1 that have been updated with breaking changes in AWS CLI v2, and outputs a warning for each detection.&lt;/p&gt; 
&lt;p&gt;In this post, we’ll walk you through using AWS CLI v1’s upgrade debug mode to identify potential breaking changes, resolve compatibility issues, and safely transition your workflows to v2.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;You’ll start by verifying you have the correct version of AWS CLI v1 to use upgrade debug mode, then you’ll use this mode to test commands in AWS CLI v1 for usage of features that were updated with breaking changes in AWS CLI v2. Then, you’ll review the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;AWS CLI v2 breaking changes list&lt;/a&gt; in the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;Migration guide for the AWS CLI version 2&lt;/a&gt; to manually verify whether your workflows may be broken by upgrading. Finally, you’ll follow guidance to mitigate breaking your workflows and safely upgrade to AWS CLI v2.&lt;/p&gt; 
&lt;h3&gt;AWS CLI v1&lt;/h3&gt; 
&lt;p&gt;The following steps walk you through using upgrade debug mode to identify potential breaking changes in your existing AWS CLI v1 usage, resolve compatibility issues, and safely transition to AWS CLI v2.&lt;/p&gt; 
&lt;h4&gt;Step 1: Verify you are using AWS CLI v1 version 1.44.0 or higher.&lt;/h4&gt; 
&lt;p&gt;We released the upgrade debug mode feature to the AWS CLI in version 1.44.0.&lt;/p&gt; 
&lt;p&gt;Using AWS CLI v1, run &lt;code&gt;aws --version&lt;/code&gt;, and verify that the AWS CLI version is 1.44.0 or higher.&lt;/p&gt; 
&lt;p&gt;If the version is older than 1.44.0, see our &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-install.html" target="_blank" rel="noopener"&gt;Developer Guide&lt;/a&gt; for instructions to update to a later version.&lt;/p&gt; 
&lt;h4&gt;Step 2: Test your AWS CLI v1 usage with AWS CLI upgrade debug mode&lt;/h4&gt; 
&lt;p&gt;Set the &lt;code&gt;AWS_CLI_UPGRADE_DEBUG_MODE&lt;/code&gt; environment variable to &lt;code&gt;true&lt;/code&gt; to detect usage of features broken in AWS CLI v2. Alternatively, you can enable this functionality at the command-level using the &lt;code&gt;--v2-debug&lt;/code&gt; command line option. If you are upgrading the AWS CLI in existing scripts or workflows to use v2, we recommend testing each AWS CLI command used with this functionality enabled before upgrading them to use AWS CLI v2.&lt;/p&gt; 
&lt;p&gt;We recommend performing this step in the same environment that you will upgrade to use AWS CLI v2, since the execution environment determines whether commands will experience breaking changes.&lt;/p&gt; 
&lt;p&gt;For example, suppose you have a script that executes the AWS CLI command below:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;aws secretsmanager update-secret --secret-id SECRET-NAME \
  --secret-binary file://BINARY-SECRET.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Execute the command with the &lt;code&gt;AWS_CLI_UPGRADE_DEBUG_MODE&lt;/code&gt; set to true—or with the &lt;code&gt;--v2-debug&lt;/code&gt; flag—and check the output for the text “AWS CLI v2 UPGRADE WARNING”. Example output with the environment variable configured is shown below:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ aws secretsmanager update-secret --secret-id SECRET-NAME \
  --secret-binary file://BINARY-SECRET.json

AWS CLI v2 UPGRADE WARNING: When specifying a blob-type parameter, AWS CLI v2 will 
assume the parameter value is base64-encoded. This is different from v1 behavior, 
where the AWS CLI will automatically encode the value to base64. To retain v1 
behavior in AWS CLI v2, set the `cli_binary_format` configuration variable to 
`raw-in-base64-out`. See 
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam." rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam.&lt;/a&gt;

{
    "ARN": "ARN",
    "Name": "SECRET-NAME",
    "VersionId": "VERSION-ID"
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Step 3: Use the warnings to prepare for AWS CLI v2&lt;/h4&gt; 
&lt;p&gt;If breaking changes were detected in step 2, the warnings provide guidance for preparing for the AWS CLI v2 upgrade. Some breaking changes can be mitigated prior to upgrading to AWS CLI v2 by modifying the command or execution environment; the warnings identified in step 2 include links to our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;AWS CLI v2 breaking changes list&lt;/a&gt; that details options to mitigate the breakage.&lt;/p&gt; 
&lt;p&gt;In the previous example, the warning explains that AWS CLI v2 will assume that the contents of &lt;code&gt;BINARY-SECRET.json&lt;/code&gt; will be encoded in base64.&lt;/p&gt; 
&lt;p&gt;Following the instructions in the warning, you’ll configure the &lt;code&gt;cli_binary_format&lt;/code&gt; variable to &lt;code&gt;raw-in-base64-out&lt;/code&gt; in the &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html" target="_blank" rel="noopener"&gt;configuration file&lt;/a&gt;. Even though &lt;code&gt;cli_binary_format&lt;/code&gt; is not a valid configuration setting in AWS CLI v1, it prepares your environment for AWS CLI v2 by configuring AWS CLI v2 to retain the same behavior as AWS CLI v1.&lt;/p&gt; 
&lt;p&gt;You’ll configure &lt;code&gt;cli_binary_format&lt;/code&gt; according to the instructions using the following command:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;aws configure set cli_binary_format raw-in-base64-out
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Step 4: Verify resolution of warnings&lt;/h4&gt; 
&lt;p&gt;For breaking changes mitigated in step 3, you’ll re-run the command to verify the warning is no longer printed.&lt;/p&gt; 
&lt;p&gt;Proceeding with the example, you configured the &lt;code&gt;cli_binary_format&lt;/code&gt; variable to &lt;code&gt;raw-in-base64-out&lt;/code&gt; in step 3. You’ll now re-run the command to verify the mitigation warning is resolved:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;aws secretsmanager update-secret --secret-id SECRET-NAME \
    --secret-binary file://BINARY-SECRET.json 
{
    "ARN": "ARN",
    "Name": "SECRET-NAME",
    "VersionId": "VERSION-ID"
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The warning is no longer printed, signaling that this command is now compatible with AWS CLI v2.&lt;/p&gt; 
&lt;p&gt;If you used the &lt;code&gt;--v2-debug&lt;/code&gt; argument instead of the &lt;code&gt;AWS_CLI_UPGRADE_DEBUG_MODE&lt;/code&gt; environment variable in step 2, remember to remove the flag from the command before upgrading to version 2.&lt;/p&gt; 
&lt;h4&gt;Step 5: Manually review for breaking changes&lt;/h4&gt; 
&lt;p&gt;After using upgrade debug mode to automatically detect usage of features that were updated with breaking changes, you will now manually review your AWS CLI usage by reviewing our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;breaking changes list&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;AWS CLI v2 Migration Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Step 6: Upgrade to AWS CLI v2&lt;/h4&gt; 
&lt;p&gt;After preparing for the breaking changes identified in the previous steps, you will now upgrade to AWS CLI v2 following the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" target="_blank" rel="noopener"&gt;installation guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Limitations&lt;/h2&gt; 
&lt;p&gt;The upgrade debug mode feature does not currently support every breaking change introduced with AWS CLI v2, and has false positive cases where it issues a warning even if no breaking changes are actually present.&lt;/p&gt; 
&lt;p&gt;Additionally, some of the detection depends on API responses, as well as the execution environment running the AWS CLI. For this reason, we recommend running this feature against an AWS account and execution environment that reflect your production workflows as close as possible.&lt;/p&gt; 
&lt;p&gt;For more details on the limitations of upgrade debug mode, see &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-upgrade-debug-mode.html" target="_blank" rel="noopener"&gt;Using upgrade debug mode to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt; in &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;Migration guide for the AWS CLI version 2&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;We strongly recommend customers understand our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html" target="_blank" rel="noopener"&gt;breaking changes list&lt;/a&gt; published in our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;AWS CLI v2 Migration Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The only breaking change not supported by the upgrade debug mode is that &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-return-codes" target="_blank" rel="noopener"&gt;AWS CLI version 2 provides more consistent return codes across commands&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this blog post, we showed you how to get started with the new upgrade debug mode. If you’re interested in using this feature to assist your upgrade from AWS CLI v1 to AWS CLI v2, try out upgrade debug mode. To learn more, visit &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-upgrade-debug-mode.html" target="_blank" rel="noopener"&gt;Using upgrade debug mode to upgrade AWS CLI version 1 to AWS CLI version 2&lt;/a&gt; in our &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html" target="_blank" rel="noopener"&gt;AWS CLI v2 Migration Guide&lt;/a&gt;. We would love your feedback! You can reach out to us by creating a &lt;a href="https://github.com/aws/aws-cli/issues/new/choose" target="_blank" rel="noopener"&gt;GitHub Issue&lt;/a&gt;.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>AWS SDK for .NET V3 Maintenance Mode Announcement</title>
		<link>https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/</link>
					
		
		<dc:creator><![CDATA[Muhammad Othman]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 19:35:48 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for .NET]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[.NET]]></category>
		<guid isPermaLink="false">5c2a8526dc1e5d73c7463cbd874d882ce5baf4e8</guid>

					<description>In alignment with our 
&lt;a href="https://aws.amazon.com/blogs/developer/general-availability-of-aws-sdk-for-net-v4-0/" target="_blank" rel="noopener noreferrer"&gt;V4.0 GA announcement&lt;/a&gt; and 
&lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html" target="_blank" rel="noopener noreferrer"&gt;SDKs and Tools Maintenance Policy&lt;/a&gt;, version 3 of the 
&lt;a href="https://aws.amazon.com/sdk-for-net/" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for .NET&lt;/a&gt; will enter maintenance mode on March 1, 2026, and reach end-of-support on June 1, 2026. Starting March 1, 2026 we will stop adding regular updates to V3 and will only provide security updates until end-of-support begins.</description>
										<content:encoded>&lt;p&gt;In alignment with our &lt;a href="https://aws.amazon.com/blogs/developer/general-availability-of-aws-sdk-for-net-v4-0/" target="_blank" rel="noopener noreferrer"&gt;V4.0 GA announcement&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html" target="_blank" rel="noopener noreferrer"&gt;SDKs and Tools Maintenance Policy&lt;/a&gt;, version 3 of the &lt;a href="https://aws.amazon.com/sdk-for-net/" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for .NET&lt;/a&gt; will enter maintenance mode on March 1, 2026, and reach end-of-support on June 1, 2026. Starting March 1, 2026 we will stop adding regular updates to V3 and will only provide security updates until end-of-support begins.&lt;/p&gt; 
&lt;h2&gt;Support Timeline&lt;/h2&gt; 
&lt;p&gt;When we announced the general availability of AWS SDK for .NET V4 on April 28, 2025, we committed to a support timeline tied to the &lt;a href="https://aws.amazon.com/powershell/" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell&lt;/a&gt;, which depends on the SDK. With AWS Tools for PowerShell V5 reaching &lt;a href="https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v5-now-generally-available/" target="_blank" rel="noopener noreferrer"&gt;general availability in August 2025&lt;/a&gt;, the 6-month support window for V3 began. For more details on the original support commitment, see the&amp;nbsp;&lt;a href="https://aws.amazon.com/blogs/developer/general-availability-of-aws-sdk-for-net-v4-0/" target="_blank" rel="noopener noreferrer"&gt;V4.0 GA announcement&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The following table outlines the level of support for each phase of the SDK lifecycle.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;SDK Lifecycle Phase&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Start Date&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;End Date&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Support Level&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;General Availability&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;July&amp;nbsp;28,&amp;nbsp;2015&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;February 28, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;During this phase, the SDK is fully supported. AWS will provide regular SDK releases that include support for new services, API updates for existing services, as well as bug and security fixes.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Maintenance Mode&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;March 1, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;May 31, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;During the maintenance mode, AWS will limit SDK releases to address critical bug fixes and security issues only. AWS SDK for .NET v3.x will not receive API updates for new or existing services or be updated to support new regions.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;End-of-Support&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;June 1, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS SDK for .NET v3.x will no longer receive updates or releases. Previously published releases will continue to be available via public package managers and the code will remain on GitHub.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Next Steps&lt;/h2&gt; 
&lt;p&gt;We encourage the AWS SDK for .NET community to begin planning your migration to V4 as soon as possible:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Review the &lt;a href="https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html" target="_blank" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; to understand the breaking changes.&lt;/li&gt; 
 &lt;li&gt;Test your applications with V4 in a development environment.&lt;/li&gt; 
 &lt;li&gt;Update your code to accommodate the changes.&lt;/li&gt; 
 &lt;li&gt;Provide feedback through our &lt;a href="https://github.com/aws/aws-sdk-net" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;With the maintenance mode transition now in effect and end of support on June 1st, 2026, we recommend prioritizing your migration planning to ensure a smooth transition. &lt;a href="https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html" target="_blank" rel="noopener noreferrer"&gt;Migration documentation&lt;/a&gt; is available to guide you through the update process.&lt;/p&gt; 
&lt;p&gt;For questions or issues that arise while updating to the V4 SDK, please use the GitHub repository’s &lt;a href="https://github.com/aws/aws-sdk-net/discussions" target="_blank" rel="noopener noreferrer"&gt;discussion forums&lt;/a&gt; or open GitHub &lt;a href="https://github.com/aws/aws-sdk-net/issues" target="_blank" rel="noopener noreferrer"&gt;issues &lt;/a&gt;to reach out to us. If you find dependencies that are preventing you from updating to V4, please let us know to see if we can help.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>GA Release of the AWS SDK Java 2.x HTTP Client built on Apache HttpClient 5.6</title>
		<link>https://aws.amazon.com/blogs/developer/ga-release-of-the-aws-sdk-java-2-x-http-client-built-on-apache-httpclient-5-6/</link>
					
		
		<dc:creator><![CDATA[Dongie Agnir]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 19:24:38 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS SDK for Java]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Foundational (100)]]></category>
		<guid isPermaLink="false">cd16503d04b534a948f559b24d262a026282ef04</guid>

					<description>In this post, you'll learn how to add the Apache 5 HTTP client to your project, configure it for your needs, and migrate from the 4.5.x version.</description>
										<content:encoded>&lt;p&gt;If you’re using the Apache HttpClient 4.5.x with the&amp;nbsp;&lt;a href="https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html" target="_blank" rel="noopener noreferrer"&gt;AWS SDK for Java 2.x&lt;/a&gt;, you may have encountered dependency alerts for Jakarta Commons Logging (JCL) dependencies, concerns about long-term maintenance support, or compatibility issues with Java 21’s virtual threads. The new Apache 5 HTTP client solves these problems.&lt;/p&gt; 
&lt;p&gt;In this post, you’ll learn how to add the Apache 5 HTTP client to your project, configure it for your needs, and migrate from the 4.5.x version.&lt;/p&gt; 
&lt;h3&gt;What’s new&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Modern logging&lt;/strong&gt;: Replaces the outdated JCL dependency with Simple Logging Facade for Java (SLF4J), giving you better compatibility with modern logging frameworks like Logback and Log4j2&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Virtual thread support&lt;/strong&gt;: Full compatibility with Java 21’s virtual threads for improved concurrency&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Active maintenance&lt;/strong&gt;: Apache HttpClient 5.x receives regular security updates and bug fixes&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This client is available alongside the existing SDK HTTP clients: Apache HttpClient 4.5.x, Netty, URL Connection, and AWS CRT HTTP client. The new&amp;nbsp;apache5-client&amp;nbsp;Maven artifact lets you use both Apache versions in the same project without conflicts.&lt;/p&gt; 
&lt;h2&gt;Getting started&lt;/h2&gt; 
&lt;p&gt;Using the Apache 5 HTTP client in your SDK can require as little as a single step. If you’re coming from the Apache 4 client and want to set specific configurations, the new Apache 5 client offers identical options.&lt;/p&gt; 
&lt;h3&gt;Add the Apache 5&amp;nbsp;client dependency&lt;/h3&gt; 
&lt;p&gt;To begin using the&amp;nbsp;Apache 5 HTTP client implementation, add the following dependency to your project:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-html"&gt;&amp;lt;dependency&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;software.amazon.awssdk&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;apache5-client&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.41.26&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;If you just want to use all the default configurations, then you do not need to configure anything else; your sync clients will use the Apache5 client under the hood.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;S3Client s3Client = S3Client.create();&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Advanced configuration example&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;If you want to configure certain options on the client, then just like with all of our clients, you can use&amp;nbsp;&lt;code&gt;Apache5HttpClient.builder()&lt;/code&gt;&amp;nbsp;to obtain a builder and set the options you would like to:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-java"&gt;Apache5HttpClient httpClient = Apache5HttpClient.builder()
&amp;nbsp;&amp;nbsp; &amp;nbsp;.connectionTimeout(Duration.ofSeconds(30))
&amp;nbsp;&amp;nbsp; &amp;nbsp;.maxConnections(100)
&amp;nbsp;&amp;nbsp; &amp;nbsp;.build();

DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
&amp;nbsp;&amp;nbsp; &amp;nbsp;.httpClient(httpClient)
&amp;nbsp;&amp;nbsp; &amp;nbsp;.build();&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Migrate from Apache 4.5.x&lt;/h3&gt; 
&lt;p&gt;If you’re using the default Apache HTTP client, migration is straightforward:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Add the&amp;nbsp;apache5-client&amp;nbsp;dependency shown above&lt;/li&gt; 
 &lt;li&gt;Update any explicit&amp;nbsp;ApacheHttpClient&amp;nbsp;references to&amp;nbsp;Apache5HttpClient&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The API remains consistent with other HTTP client implementations in the SDK. Note that like the 4.5.x client, this implementation supports synchronous service clients only.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Cleaning up&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;When you’re done with a service client, close it to release resources:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-java"&gt;
s3Client.close();
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;If you created a shared&amp;nbsp;Apache5HttpClient&amp;nbsp;instance, close it separately after closing the service clients that use it.&lt;/p&gt; 
&lt;h3&gt;Conclusion&lt;/h3&gt; 
&lt;p&gt;In this blog post, we showed you how to get started with the new Apache 5 HTTP client in the AWS SDK for Java 2.x, which uses Apache HttpClient 5.6.x. Please share your experience and any feature requests by opening a &lt;a href="https://github.com/aws/aws-sdk-java-v2/issues" target="_blank" rel="noopener noreferrer"&gt;GitHub issue&lt;/a&gt;.&lt;/p&gt; 
&lt;hr style="width: 80%"&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Announcing new output formats in AWS CLI v2</title>
		<link>https://aws.amazon.com/blogs/developer/announcing-new-output-formats-in-aws-cli-v2/</link>
					
		
		<dc:creator><![CDATA[Andrew Asseily]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 02:22:30 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<guid isPermaLink="false">10f6905f9a3db0573751a626e198c250357ed74f</guid>

					<description>Amazon Web Services (AWS) is announcing two new features for the AWS Command Line Interface (AWS CLI) v2: structured error output and the “off” output format.</description>
										<content:encoded>&lt;p&gt;Amazon Web Services (AWS) is announcing two new features for the &lt;a href="https://aws.amazon.com/cli/" target="_blank" rel="noopener"&gt;AWS Command Line Interface (AWS CLI) v2&lt;/a&gt;: structured error output and the “off” output format.&lt;/p&gt; 
&lt;h2&gt;Structured error output&lt;/h2&gt; 
&lt;p&gt;Errors returned from AWS service APIs often include useful details beyond the code and message—bucket names, validation reasons, resource IDs—that were previously hidden unless you used &lt;code&gt;--debug&lt;/code&gt;. Now, you can see this error information directly in your error output.&lt;/p&gt; 
&lt;p&gt;Starting with AWS CLI v2 version 2.34.0, any additional error details returned from service APIs will now be shown in the stderr output. Additionally, you can configure the AWS CLI to output your errors in alternative structured formats. Control how errors are displayed using the new &lt;code&gt;--cli-error-format&lt;/code&gt; &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-configuring" target="_blank" rel="noopener"&gt;CLI flag,&lt;/a&gt; the &lt;code&gt;cli_error_format&lt;/code&gt; &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-configuring" target="_blank" rel="noopener"&gt;configuration setting&lt;/a&gt;, or the &lt;code&gt;AWS_CLI_ERROR_FORMAT&lt;/code&gt; &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-configuring" target="_blank" rel="noopener"&gt;environment variable&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Supported formats for the error format parameter:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-enhanced" target="_blank" rel="noopener"&gt;enhanced&lt;/a&gt; (default) – Error message with additional details displayed inline&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-json" target="_blank" rel="noopener"&gt;json&lt;/a&gt; – JSON structure with all error fields&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-yaml" target="_blank" rel="noopener"&gt;yaml&lt;/a&gt; – YAML structure with all error fields&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-text" target="_blank" rel="noopener"&gt;text&lt;/a&gt; – Tab-delimited error fields&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-table" target="_blank" rel="noopener"&gt;table&lt;/a&gt; – ASCII table format&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html#cli-error-format-legacy" target="_blank" rel="noopener"&gt;legacy&lt;/a&gt; – Original error format&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Accessibility enhancements&lt;/h3&gt; 
&lt;p&gt;Since September 2025, AWS CLI errors started including the &lt;code&gt;aws: [ERROR]:&lt;/code&gt; prefix for some exceptions. This prefix signals that an error has occurred and supports accessibility best practices and automation use cases. This release ensures the prefix is consistently included for all errors in the enhanced and legacy formats.&lt;/p&gt; 
&lt;h3&gt;Example: Using enhanced output error format&lt;/h3&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;$ aws lambda get-function \
  --function-name nonexistent-function-12345 \
  --cli-error-format enhanced

aws: [ERROR]: An error occurred (ResourceNotFoundException) when calling the GetFunction operation: Function not found: arn:aws:lambda:us-west-2:111122223333:function:nonexistent-function-12345

Additional error details:
Type: User&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Example: Using json output error format&lt;/h3&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;$ aws lambda get-function \
  --function-name nonexistent-function-12345 \
  --cli-error-format json
{
 "Code": "ResourceNotFoundException",
 "Message": "Function not found: arn:aws:lambda:us-west-2:111122223333:function:nonexistent-function-12345",
 "Type": "User"
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h3&gt;Example: Using legacy output error format&lt;/h3&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;$ aws lambda get-function \
  --function-name nonexistent-function-12345 \
  --cli-error-format legacy

aws: [ERROR]: An error occurred (ResourceNotFoundException) when calling the GetFunction operation: Function not found: arn:aws:lambda:us-west-2:111122223333:function:nonexistent-function-12345&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;Turning off CLI output&lt;/h2&gt; 
&lt;p&gt;Sometimes, you might want to hide the AWS CLI command output, such as when using a command that may output sensitive information. The &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output-format.html#off-output" target="_blank" rel="noopener"&gt;off format&lt;/a&gt; suppresses stdout while still preserving errors on stderr.&lt;/p&gt; 
&lt;p&gt;For example, you can &lt;a href="https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html" target="_blank" rel="noopener"&gt;create an AWS Secrets Manager secret&lt;/a&gt; without writing the secret ARN or version information to logs:&lt;/p&gt; 
&lt;div class="hide-language"&gt; 
 &lt;pre&gt;&lt;code class="lang-bash"&gt;$ aws secretsmanager create-secret \
    --name my-secret \
    --secret-string "password123" \
    --output off
$ echo $?
0&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;p&gt;You can set this using the&lt;code&gt;--output off&lt;/code&gt; &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output-format.html#cli-usage-output-format-how" target="_blank" rel="noopener"&gt;CLI flag&lt;/a&gt;, setting &lt;code&gt;output = off&lt;/code&gt; in your &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output-format.html#cli-usage-output-format-how" target="_blank" rel="noopener"&gt;configuration file&lt;/a&gt;, or the &lt;code&gt;AWS_DEFAULT_OUTPUT=off&lt;/code&gt; &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output-format.html#cli-usage-output-format-how" target="_blank" rel="noopener"&gt;environment variable&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Next Steps&lt;/h3&gt; 
&lt;p&gt;To take advantage of these new output features, upgrade your version of the AWS CLI to 2.34.0. For more information, see the &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-error-format.html" target="_blank" rel="noopener"&gt;Structured error output&lt;/a&gt; and &lt;a href="https://aws.amazon.com/blogs/developer/introducing-agent-plugins-for-aws/" target="_blank" rel="noopener"&gt;Output format&lt;/a&gt; guides. Please share your questions, comments, and issues with us on &lt;a href="https://github.com/aws/aws-cli/tree/v2" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>AWS Tools for PowerShell v4 Maintenance Mode Announcement</title>
		<link>https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/</link>
					
		
		<dc:creator><![CDATA[Sanket Tangade]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 18:25:37 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[AWS Tools for PowerShell]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">923b452465494c037a84d5d0d1de80732d6b706c</guid>

					<description>In alignment with our previous announcement in August 2025 and SDKs and Tools Maintenance Policy, version 4 of the AWS Tools for PowerShell (AWS Tools for PowerShell v4.x) will enter maintenance mode on March 1, 2026 and reach end-of-support on June 1, 2026.</description>
										<content:encoded>&lt;p&gt;In alignment with our previous &lt;a href="https://aws.amazon.com/blogs/devops/announcing-the-end-of-support-for-aws-tools-for-powershell-v4/" target="_blank" rel="noopener noreferrer"&gt;announcement in August 2025&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html" target="_blank" rel="noopener noreferrer"&gt;SDKs and Tools Maintenance Policy&lt;/a&gt;, version 4 of the &lt;a href="https://aws.amazon.com/powershell/" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell&lt;/a&gt; (AWS Tools for PowerShell v4.x) will enter maintenance mode on March 1, 2026 and reach end-of-support on June 1, 2026.&lt;/p&gt; 
&lt;p&gt;Beginning March 1, 2026, AWS Tools for PowerShell v4.x will enter maintenance mode and will only receive critical bug fixes and security updates. We will not update it to support new AWS services, new service features, or changes to existing services. Existing applications that use AWS Tools for PowerShell v4.x will continue to function as intended unless there is a fundamental change to how an AWS service works. This is uncommon, and we will announce it broadly if it happens. After June 1, 2026, when AWS Tools for PowerShell v4.x reaches end-of-support, it will no longer receive any updates or releases.&lt;/p&gt; 
&lt;h2&gt;End of Support Timeline for Version 4&lt;/h2&gt; 
&lt;p&gt;The following table outlines the level of support for each phase of the SDK lifecycle.&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="6px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;SDK Lifecycle Phase&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Start Date&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;End Date&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Support Level&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;General Availability&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;July 28, 2015&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;February 28, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;During this phase, the SDK is fully supported. AWS will provide regular SDK releases that include support for new services, API updates for existing services, as well as bug and security fixes.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Maintenance Mode&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;March 1, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;May 31, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;During the maintenance mode, AWS will limit releases to address critical bug fixes and security issues only. AWS Tools for PowerShell v4.x will not receive API updates for new or existing services or be updated to support new regions.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;End-of-Support&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;June 1, 2026&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;N/A&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;AWS Tools for PowerShell v4.x will no longer receive updates or releases. Previously published releases will continue to be available via public package managers and the code will remain on GitHub.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;We recommend upgrading to the latest major version of AWS Tools for PowerShell v5.x by using the &lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html" target="_blank" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt;. This major version includes, but is not limited to, performance enhancements, bug fixes, modern .NET libraries and frameworks, and the latest AWS service updates. Upgrading enables you to leverage the latest services and innovations from AWS.&lt;/p&gt; 
&lt;p&gt;To learn more, refer to the following resources:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The AWS Tools for PowerShell&lt;a href="https://aws.amazon.com/powershell/" target="_blank" rel="noopener noreferrer"&gt; landing page&lt;/a&gt; contains links to the getting started guide, key features, examples, and links to additional resources.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html" target="_blank" rel="noopener noreferrer"&gt;Migrating to version 5 of the AWS Tools for PowerShell guide&lt;/a&gt; provides instructions for migrating and explains the changes between the two versions.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href="https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v5-now-generally-available/" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell v5.x GA blog post&lt;/a&gt; outlines the motivation for launching AWS Tools for PowerShell v5.x and includes the benefits over AWS Tools for PowerShell v4.x.&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/powershell/v5/userguide/powershell_code_examples.html" target="_blank" rel="noopener noreferrer"&gt;AWS Tools for PowerShell Code Examples&lt;/a&gt; provide code examples to help you use v5.x.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Feedback&lt;/h2&gt; 
&lt;p&gt;If you need assistance or have feedback, reach out to your usual AWS support contacts. You can also open a &lt;a href="https://github.com/aws/aws-tools-for-powershell/discussions" target="_blank" rel="noopener noreferrer"&gt;discussion&lt;/a&gt; or &lt;a href="https://github.com/aws/aws-tools-for-powershell/issues" target="_blank" rel="noopener noreferrer"&gt;issue&lt;/a&gt; on GitHub. Thank you for using AWS Tools for PowerShell.&lt;/p&gt; 
&lt;hr&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Automate Custom CI/CD Pipelines for Landing Zone Accelerator on AWS</title>
		<link>https://aws.amazon.com/blogs/developer/automate-custom-ci-cd-pipelines-for-landing-zone-accelerator-on-aws/</link>
					
		
		<dc:creator><![CDATA[Anwaar Hussain]]></dc:creator>
		<pubDate>Tue, 24 Feb 2026 21:29:00 +0000</pubDate>
				<category><![CDATA[Advanced (300)]]></category>
		<category><![CDATA[Amazon Simple Storage Service (S3)]]></category>
		<category><![CDATA[AWS CloudFormation]]></category>
		<category><![CDATA[AWS CodeBuild]]></category>
		<category><![CDATA[AWS CodePipeline]]></category>
		<category><![CDATA[AWS CodeStar]]></category>
		<category><![CDATA[AWS Identity and Access Management (IAM)]]></category>
		<category><![CDATA[AWS Key Management Service]]></category>
		<category><![CDATA[Learning Levels]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<category><![CDATA[CloudFormation]]></category>
		<category><![CDATA[DynamoDB]]></category>
		<category><![CDATA[S3]]></category>
		<guid isPermaLink="false">e02e23aa461d03a95a4bd2c137c4e2dd0e83078a</guid>

					<description>This blog post shows you how to extend LZA with continuous integration and continuous deployment (CI/CD) pipelines that maintain your governance controls and accelerate workload deployments, offering rapid deployment of both Terraform and AWS CloudFormation across multiple accounts. You'll build automated infrastructure deployment workflows that run in parallel with LZA's baseline orchestration to help maintain your enterprise governance and compliance control requirements. You will implement built-in validation, security scanning, and cross-account deployment capabilities to help address Public Sector use cases that demand strict compliance and security requirements.</description>
										<content:encoded>&lt;p&gt;Managing infrastructure deployments across multiple AWS accounts and maintaining governance controls present a significant challenge for organizations. Manual deployment processes create bottlenecks that slow delivery, introduce human error, and make it difficult to maintain consistent security and compliance standards across environments. &lt;a href="https://aws.amazon.com/solutions/implementations/landing-zone-accelerator-on-aws/" target="_blank" rel="noopener noreferrer"&gt;Landing Zone Accelerator on AWS (LZA)&lt;/a&gt; provides foundational governance and baseline infrastructure across your AWS environment, but organizations often need to deploy workload-specific resources—such as &lt;a href="https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html" target="_blank" rel="noopener noreferrer"&gt;Amazon Virtual Private Cloud (Amazon VPC)&lt;/a&gt; resources, &lt;a href="https://aws.amazon.com/pm/lambda/" target="_blank" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; functions, or &lt;a href="https://aws.amazon.com/glue/" target="_blank" rel="noopener noreferrer"&gt;AWS Glue&lt;/a&gt; jobs—that fall outside LZA’s core scope. When you’re using LZA for provisioning workload infrastructure, deployments can typically take 45–90 minutes.&lt;/p&gt; 
&lt;p&gt;This blog post shows you how to extend LZA with continuous integration and continuous deployment (CI/CD) pipelines that maintain your governance controls and accelerate workload deployments, offering rapid deployment of both Terraform and &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt; across multiple accounts. You’ll build automated infrastructure deployment workflows that run in parallel with LZA’s baseline orchestration to help maintain your enterprise governance and compliance control requirements. You will implement built-in validation, security scanning, and cross-account deployment capabilities to help address Public Sector use cases that demand strict compliance and security requirements.&lt;/p&gt; 
&lt;p&gt;In this post, you’ll learn how to configure cross-account deployment workflows that integrate seamlessly with your existing LZA environment through customizations, implement security controls including automated validation and scanning, and maintain centralized governance as teams deploy workload-specific infrastructure independently across multiple accounts.&lt;/p&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;Before implementing this automated deployment solution, verify that your environment meets requirements across three key areas:&lt;/p&gt; 
&lt;h3&gt;LZA Requirements&lt;/h3&gt; 
&lt;p&gt;You need an LZA environment version &lt;a href="https://awslabs.github.io/landing-zone-accelerator-on-aws/v1.14.2/faq/general/" target="_blank" rel="noopener noreferrer"&gt;1.14.2&lt;/a&gt; or later with &lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html" target="_blank" rel="noopener noreferrer"&gt;AWS Organizations&lt;/a&gt; enabled and Organizational Units (OUs) such as Root, Security, and Infrastructure configured.&lt;/p&gt; 
&lt;h3&gt;AWS Account Requirements&lt;/h3&gt; 
&lt;p&gt;You’ll need appropriate &lt;a href="https://aws.amazon.com/iam/" target="_blank" rel="noopener noreferrer"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt;&amp;nbsp;permissions to create and manage&amp;nbsp;&lt;a href="https://aws.amazon.com/codepipeline/" target="_blank" rel="noopener noreferrer"&gt;AWS&amp;nbsp;CodePipeline&lt;/a&gt;, &lt;a href="https://aws.amazon.com/codebuild/" target="_blank" rel="noopener noreferrer"&gt;AWS CodeBuild&lt;/a&gt;, &lt;a href="https://aws.amazon.com/s3/" target="_blank" rel="noopener noreferrer"&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/kms/latest/developerguide/overview.html" target="_blank" rel="noopener noreferrer"&gt;AWS Key Management Service (KMS)&lt;/a&gt;, &lt;a href="https://aws.amazon.com/dynamodb/" target="_blank" rel="noopener noreferrer"&gt;Amazon DynamoDB (DynamoDB)&lt;/a&gt;, IAM roles, and &lt;a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html" target="_blank" rel="noopener noreferrer"&gt;AWS Systems Manager (SSM) Parameter Store &lt;/a&gt;&amp;nbsp;across multiple accounts.&lt;/p&gt; 
&lt;h3&gt;Source Code and Repository Access&lt;/h3&gt; 
&lt;p&gt;You’ll also need access to a GitHub repository with your infrastructure code and authorization to create &lt;a href="https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html" target="_blank" rel="noopener noreferrer"&gt;AWS CodeConnections&lt;/a&gt; for secure source integration.&lt;/p&gt; 
&lt;p&gt;You can access complete implementation code, including CloudFormation templates and LZA configurations, in the&amp;nbsp;&lt;a href="https://github.com/aws-samples/sample-aws-lza-cicd-customizations" target="_blank" rel="noopener noreferrer"&gt;aws-samples/sample-aws-lza-cicd-customizations&lt;/a&gt; repository on the GitHub website.&lt;/p&gt; 
&lt;p&gt;With these prerequisites in place, let’s examine how the solution components work together to deliver automated CI/CD capabilities.&lt;/p&gt; 
&lt;h2&gt;Solution overview&lt;/h2&gt; 
&lt;p&gt;You’ll extend LZA with automated deployment workflows by combining several AWS services. CodePipeline orchestrates your CI/CD workflow with automated triggers from GitHub. CodeBuild executes validation, security scanning, and deployment tasks. CodeConnections integrates your workflows with GitHub repositories, and cross-account IAM roles provide secure multi-account deployments. S3 and KMS provide encrypted artifact storage, and DynamoDB manages Terraform state locking.&lt;/p&gt; 
&lt;p&gt;Your architecture supports both CloudFormation and Terraform deployments, with automated validation using cfn-lint, cfn-nag, tflint, and tfsec. Manual approval gates help control production changes, and centralized audit logging provides visibility into deployment activities.&lt;/p&gt; 
&lt;div class="note"&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Third-party open-source tools (cfn-lint, cfn-nag, tflint, and tfsec) are subject to their respective licenses. AWS does not endorse or support these third-party tools. Verify license compliance and evaluate tool capabilities for your specific use case.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;Now that you understand the solution, let’s walk through the architecture that enables this automation.&lt;/p&gt; 
&lt;h3&gt;Architecture&lt;/h3&gt; 
&lt;p&gt;The solution spans three AWS accounts across three Organizational Units: Management (Root OU) manages the LZA control plane, SharedServices (Infrastructure OU) hosts the CI/CD pipelines, and Sandbox (Sandbox OU) serves as the deployment target for workloads. As shown in Figure 1, your SharedServices account acts as the CI/CD hub, while the Sandbox account serves as the deployment target with appropriate IAM roles for cross-account access. This hub-and-spoke approach offers three key benefits: centralized governance with consistent security controls, simplified maintenance that reduces operational overhead, and clear separation of duties that maintains security boundaries between accounts.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-1.jpg"&gt;&lt;img class="size-medium wp-image-12153 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-1-300x129.jpg" alt="" width="300" height="129"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p style="text-align: center"&gt;&lt;strong&gt;Figure 1: hub-and-spoke CI/CD architecture with cross-account deployment&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;With the hub-and-spoke architecture established, let’s understand how infrastructure changes flow through the deployment pipelines.&lt;/p&gt; 
&lt;h3&gt;CI/CD Pipeline Flow&lt;/h3&gt; 
&lt;p&gt;The CloudFormation pipeline begins with the Source stage, pulling from GitHub when changes occur to a CloudFormation template. The Validate stage runs CodeBuild to execute cfn-lint for syntax checking and cfn-nag for security analysis. Next, the CreateChangeSet stage creates a ChangeSet in the Sandbox account. The Manual Approval stage pauses execution for your review. Finally, the ExecuteChangeSet stage deploys the infrastructure.&lt;/p&gt; 
&lt;p&gt;For Terraform deployments, the pipeline follows a similar pattern with different validation tools. The Source stage is configured to pull from GitHub when changes are detected in the Terraform directory. The Plan stage runs CodeBuild to execute Terraform fmt, validate, tflint, and tfsec, then generates a Terraform plan. The Manual Approval stage pauses for your review. The Apply stage executes Terraform apply to deploy infrastructure to the Sandbox account.&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-2.jpg"&gt;&lt;img loading="lazy" class="size-medium wp-image-12154 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-2-300x63.jpg" alt="" width="300" height="63"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p style="text-align: center"&gt;&lt;strong&gt;Figure 2: CloudFormation and Terraform pipeline deployment flows&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Both workflows shown in Figure 2 provide automated validation and manual approval for infrastructure changes before reaching target accounts. These workflows maintain governance and compliance controls throughout the deployment lifecycle.&lt;/p&gt; 
&lt;h2&gt;Key Security Features&lt;/h2&gt; 
&lt;p&gt;Security remains critical when automating infrastructure deployments across multiple AWS accounts. Your CI/CD extension to LZA implements a security framework that protects your infrastructure through multiple defensive layers. This approach verifies that automated deployments maintain the same security standards as manual processes while reducing the risk of human error. The security model centers on three core principles: least-privilege access through carefully scoped IAM roles, defense-in-depth controls that protect data and operations at multiple layers, and automated validation that catches security issues before they reach production environments.&lt;/p&gt; 
&lt;h3&gt;Cross-Account IAM Architecture&lt;/h3&gt; 
&lt;p&gt;Your secure cross-account deployment capability start with a carefully designed IAM architecture. The solution implements a three-tier IAM security model where each component has precisely the permissions it needs and no more. You’ll deploy specialized roles for Terraform operations that manage infrastructure state and execute plans, CloudFormation deployment roles that handle stack operations and resource management, and cross-account orchestration roles that are used to coordinate activities between your SharedServices and target accounts.&lt;/p&gt; 
&lt;p&gt;Each role receives permissions scoped only to the specific AWS services and operations required for their deployment tasks. For example, your Terraform role can access S3 for state management and DynamoDB for locking, but cannot create IAM users or modify AWS Organizations settings. This granular approach is designed to reduce your attack surface, enhancing operational functionality.&amp;nbsp;The complete IAM configuration details are available in&amp;nbsp;LZA’s &lt;a href="https://github.com/aws-samples/sample-aws-lza-cicd-customizations/blob/main/iam-config.yaml" target="_blank" rel="noopener noreferrer"&gt;iam-config.yaml&lt;/a&gt; for your review and customization.&lt;/p&gt; 
&lt;h3&gt;Security Controls&lt;/h3&gt; 
&lt;p&gt;Your deployment workflow implements defense-in-depth security across multiple layers to protect infrastructure deployments and maintain compliance standards. Rather than relying on a single security control, this approach creates overlapping protections that guard against various threat vectors.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Data Protection and Encryption&amp;nbsp;&lt;/strong&gt;The solution encrypts data at rest and in transit. S3 buckets use KMS customer-managed keys that you control. Terraform state files are encrypted to protect sensitive infrastructure details. Transport Layer Security (TLS) 1.2 or higher protects data transmission. Cross-account KMS key policies confirm that only authorized roles in specific accounts can decrypt build artifacts and deployment packages.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Compliance and Audit Controls&lt;/strong&gt; Automated governance and audit trails provide continuous oversight throughout the deployment lifecycle. Resource tagging adds custom markers for identifying and managing data processing activities. AWS CloudTrail tracks all deployment actions, creating an immutable record of operations.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Automated Security Validation&lt;/strong&gt; Your pipelines include multiple automated security checks that identify misconfigurations before they reach production environments. CloudFormation templates undergo validation for syntax and best practices compliance, plus security analysis that identifies potential security issues in your resource configurations. Terraform configurations receive similar treatment through syntax verification, best practices enforcement, and security scanning that identifies common misconfigurations.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Governance and Oversight&lt;/strong&gt; Manual approval gates provide human oversight for critical deployment decisions to maintain automated efficiency for routine operations. These approval points integrate with CloudTrail logging to create accountability records showing who approved which deployments. Your team can review Terraform plans and CloudFormation ChangeSets before execution, ensuring that automated systems implement exactly the changes you expect.&lt;/p&gt; 
&lt;h2&gt;Solution Walkthrough&lt;/h2&gt; 
&lt;p&gt;Now that you understand the architecture components, let’s walk through how you’ll implement this automated CI/CD solution.&amp;nbsp;The deployment follows a foundation-first approach: you’ll start with Stage 1 to establish your shared infrastructure, then deploy Stages 2 and 3 to create your specific deployment pipelines. After completing the foundation stage, you can deploy the CloudFormation and Terraform pipelines in either order since they operate independently.&lt;/p&gt; 
&lt;h3&gt;Stage 1: Foundation Resources&lt;/h3&gt; 
&lt;p&gt;You’ll begin by deploying the CICD-Pipeline-Foundation stack to your SharedServices account. This stage creates the shared infrastructure that both CloudFormation and Terraform pipelines depend on for secure, cross-account operations.&lt;/p&gt; 
&lt;p&gt;The foundation stage establishes your artifact storage with S3 buckets for build artifacts and Terraform state storage. You’ll also get a KMS customer-managed key for encryption that includes cross-account access policies, supporting secure operations across your account boundaries. For source code integration, the stack creates CodeConnections that provide secure, token-based access to your repositories. Additionally, you’ll deploy a DynamoDB table for Terraform state locking to prevent concurrent modifications, plus SSM Parameter Store values that enable cross-stack references between your pipeline components.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Deployment Time: &lt;/strong&gt;Estimated 10-15 minutes&lt;/p&gt; 
&lt;h3&gt;Stage 2: CloudFormation Pipeline&lt;/h3&gt; 
&lt;p&gt;Once your foundation is ready, you’ll deploy the CloudFormation-Workload-Deployment-Pipeline stack to your SharedServices account. This creates a complete CI/CD pipeline specifically designed for CloudFormation-based infrastructure deployments across multiple accounts.Your CloudFormation pipeline includes a CodePipeline that integrates with GitHub for source code management, performs automated validation to catch issues early, includes manual approval gates for governance compliance, and handles cross-account deployment stages. The pipeline uses a CodeBuild project configured with cfn-lint for syntax validation and cfn-nag for security analysis, ensuring your templates meet both technical and security standards before deployment. The cross-account deployment configuration targets your Sandbox account with appropriate IAM role assumptions, providing secure access without permanent credentials.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Deployment Time: &lt;/strong&gt;Estimated 5-10 minutes&lt;/p&gt; 
&lt;h3&gt;Stage 3: Terraform Pipeline&lt;/h3&gt; 
&lt;p&gt;Your final deployment creates the Terraform-Pipeline stack, also in the SharedServices account. This pipeline facilitates Terraform-based infrastructure deployments with integrated planning, approval, and deployment workflows. The Terraform workflow includes a CodePipeline with GitHub source integration for version control, Terraform planning stages that show you exactly what changes will be made, manual approval workflows that maintain governance oversight, and automated apply stages for consistent deployments. You’ll get CodeBuild projects specifically optimized for Terraform plan generation and infrastructure deployment, plus integrated validation, formatting and security scanning tools for Terraform. Like the CloudFormation pipeline, this includes cross-account role assumption capabilities for secure deployments to your Sandbox account.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Deployment Time: &lt;/strong&gt;Estimated 5-10 minutes&lt;/p&gt; 
&lt;p&gt;&lt;a href="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-3.jpg"&gt;&lt;img loading="lazy" class="size-medium wp-image-12155 aligncenter" src="https://d2908q01vomqb2.cloudfront.net/0716d9708d321ffb6a00818614779e779925365c/2026/02/23/DEVTOOLS-16-3-300x54.jpg" alt="" width="300" height="54"&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p style="text-align: center"&gt;&lt;strong&gt;Figure 3: CodePipeline dashboard showing deployed CI/CD pipelines&lt;/strong&gt;&lt;/p&gt; 
&lt;h2&gt;Cost considerations&lt;/h2&gt; 
&lt;p&gt;Operating costs for this CI/CD solution depend on deployment frequency, build duration, and artifact storage requirements.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Small applications (20 deployments/month):&lt;/strong&gt; $5–7/month&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;CodePipeline: $2.00 (two active pipelines)&lt;/li&gt; 
 &lt;li&gt;CodeBuild: $1.50&lt;/li&gt; 
 &lt;li&gt;S3 storage: $0.23&lt;/li&gt; 
 &lt;li&gt;DynamoDB: $0.37&lt;/li&gt; 
 &lt;li&gt;KMS: $1.30&lt;/li&gt; 
 &lt;li&gt;CloudWatch Logs: $0.50&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Production environments (100+ deployments/month):&lt;/strong&gt; $30–40/month&lt;/p&gt; 
&lt;p&gt;The increase is driven primarily by additional build minutes and artifact storage requirements.&lt;/p&gt; 
&lt;div class="note"&gt; 
 &lt;p&gt;&lt;strong&gt;Cost disclaimer:&lt;/strong&gt; These estimates are examples based on January 19, 2025 AWS pricing in US East (N. Virginia). Actual costs vary by usage patterns and region.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Best Practices&lt;/h2&gt; 
&lt;p&gt;Following these recommendations will help you optimize your CI/CD pipeline operations, reduce costs, and maintain security compliance.&lt;/p&gt; 
&lt;h3&gt;Environment Management and Security&lt;/h3&gt; 
&lt;p&gt;Implement proper environment separation using distinct AWS accounts for development, staging, and production deployments. This approach maintains isolation and prevents accidental changes to production infrastructure. Complement this with regular IAM policy reviews, restricting permissions following least-privilege principles to reduce security risks and maintain compliance requirements.&lt;/p&gt; 
&lt;h3&gt;Monitoring and Troubleshooting&lt;/h3&gt; 
&lt;p&gt;Configure monitoring by enabling CloudWatch logging for CodeBuild across regions and setting up alarms for pipeline failures. This visibility into deployment issues supports rapid troubleshooting when problems occur. Additionally, run validation tools locally before pushing to GitHub—this practice catches issues early, reduces feedback time compared to pipeline-based validation, and conserves CodeBuild minutes.&lt;/p&gt; 
&lt;h3&gt;State and Artifact Management&lt;/h3&gt; 
&lt;p&gt;Use DynamoDB for Terraform state locking to prevent concurrent modifications. Without proper locking, simultaneous Terraform apply operations can corrupt state files, causing infrastructure drift and deployment failures.&lt;/p&gt; 
&lt;h3&gt;Security Validation&lt;/h3&gt; 
&lt;p&gt;Make security scanning a priority by reviewing security findings before approval. Automated scanning catches misconfigurations early, reducing security vulnerabilities in production environments and enhancing your overall security posture.&lt;/p&gt; 
&lt;h2&gt;Clean Up&lt;/h2&gt; 
&lt;p&gt;To avoid ongoing charges, remove the deployed resources when you no longer need them. Follow these steps in order to prevent deletion conflicts:&lt;/p&gt; 
&lt;h3&gt;Remove Deployed Infrastructure&lt;/h3&gt; 
&lt;p&gt;Begin by removing workload infrastructure deployed through the pipelines in the Sandbox account. Use the AWS Management Console or AWS CLI to erase these resources, ensuring no dependencies remain before proceeding to the next step.&lt;/p&gt; 
&lt;h3&gt;Delete CI/CD Pipeline Stacks&lt;/h3&gt; 
&lt;p&gt;Remove the CI/CD pipeline stacks from the SharedServices account in reverse order of their creation. Start with the Terraform-Pipeline stack, followed by the CloudFormation-Workload-Deployment-Pipeline stack, and finally the CICD-Pipeline-Foundation stack. This sequence prevents dependency conflicts during deletion.&lt;/p&gt; 
&lt;h3&gt;Clear S3 Storage&lt;/h3&gt; 
&lt;p&gt;Before deleting the foundation stack, manually empty the S3 buckets containing artifacts and Terraform state files. CloudFormation cannot delete non-empty buckets, so this step prevents stack deletion failures.&lt;/p&gt; 
&lt;h3&gt;Confirm Resource Removal&lt;/h3&gt; 
&lt;p&gt;Check that resources have been successfully removed by reviewing CloudFormation stacks, S3 buckets, DynamoDB tables, and CodePipeline pipelines in the AWS Management Console. This verification step helps identify remaining resources that could generate ongoing charges.&lt;/p&gt; 
&lt;h2&gt;Conclusion&lt;/h2&gt; 
&lt;p&gt;In this post, we demonstrated how to extend AWS Landing Zone Accelerator with automated CI/CD pipelines supporting both Terraform and CloudFormation deployments across multiple accounts. By using LZA’s customizations feature alongside AWS native services like CodePipeline and CodeBuild, you can achieve consistent infrastructure deployment while preserving the security, governance, and compliance controls your organization requires.The hub-and-spoke architecture centralizes CI/CD operations in the SharedServices account, which standardizes deployment workflows, provides audit trails, and maintains security boundaries between target accounts. With automated validation, security scanning capabilities, and manual approval gates, this solution provides controls suitable for production environments managing complex multi-account AWS infrastructures.&lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Deploy the solution using the provided LZA configuration files:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Clone the Repository&lt;/strong&gt;:&amp;nbsp;Access the complete implementation from the &lt;a href="https://github.com/aws-samples/sample-aws-lza-cicd-customizations" target="_blank" rel="noopener noreferrer"&gt;aws-samples/sample-aws-lza-cicd-customizations &lt;/a&gt;GitHub repository&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Configure LZA&lt;/strong&gt;: Update the&amp;nbsp;&lt;a href="https://github.com/aws-samples/sample-aws-lza-cicd-customizations/blob/main/customizations-config.yaml" target="_blank" rel="noopener noreferrer"&gt;customizations-config.yaml&lt;/a&gt; file with your GitHub repository details&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deploy configuration&lt;/strong&gt;: Commit and push changes to your LZA configuration repository&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Activate GitHub connection&lt;/strong&gt;: Manually authorize the CodeConnections integration in the AWS Management Console&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Verify deployment&lt;/strong&gt;: Check AWS CloudFormation stacks, CodePipeline creation, and SSM Parameter Store values&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You can find complete deployment instructions, configuration examples, and troubleshooting guides in the repository&amp;nbsp;&lt;a href="https://github.com/aws-samples/sample-aws-lza-cicd-customizations/blob/main/README.md" target="_blank" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Additional Resources&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;AWS Documentation:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/solutions/latest/landing-zone-accelerator-on-aws/developer-guide.html" target="_blank" rel="noopener noreferrer"&gt;Landing Zone Accelerator on AWS Developer Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/codepipeline/" target="_blank" rel="noopener noreferrer"&gt;AWS CodePipeline Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/codebuild/" target="_blank" rel="noopener noreferrer"&gt;AWS CodeBuild Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-cicd-litmus/cicd-best-practices.html" target="_blank" rel="noopener noreferrer"&gt;AWS CI/CD best practices&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Need help?&lt;/strong&gt; Contact your AWS Solutions Architect or visit &lt;a href="https://aws.amazon.com/connect/?trk=65e9520a-73a2-4447-9d32-52a2519df821&amp;amp;sc_channel=ps&amp;amp;trk=65e9520a-73a2-4447-9d32-52a2519df821&amp;amp;sc_channel=ps&amp;amp;ef_id=Cj0KCQiA4eHLBhCzARIsAJ2NZoL1zVKM_H33k1Oh7YGy7cSbf_RP_7NOOK0cl1LDEw1GRmm3jSm0ohQaAkMtEALw_wcB:G:s&amp;amp;s_kwcid=AL!4422!3!527661220940!e!!g!!aws%20cloud%20contact%20center!13513519801!123036835149&amp;amp;gad_campaignid=13513519801&amp;amp;gbraid=0AAAAADjHtp8x-qTSNBMEOZc8XQiGA4Clj&amp;amp;gclid=Cj0KCQiA4eHLBhCzARIsAJ2NZoL1zVKM_H33k1Oh7YGy7cSbf_RP_7NOOK0cl1LDEw1GRmm3jSm0ohQaAkMtEALw_wcB" target="_blank" rel="noopener noreferrer"&gt;AWS Support&lt;/a&gt; to discuss implementation strategies for your specific multi-account requirements.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;Ready to automate your multi-account infrastructure deployments? Access the complete solution code and extend your Landing Zone Accelerator on AWS with custom CI/CD pipelines today!&lt;/em&gt;&lt;/p&gt; 
&lt;hr&gt;</content:encoded>
					
					
			
		
		
			</item>
		<item>
		<title>Introducing Agent Plugins for AWS</title>
		<link>https://aws.amazon.com/blogs/developer/introducing-agent-plugins-for-aws/</link>
					
		
		<dc:creator><![CDATA[Anita Lewis]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 19:13:25 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[Technical How-to]]></category>
		<guid isPermaLink="false">341fc63b0b33f3b32461d9238310e646dd999490</guid>

					<description>Deploying applications to AWS typically involves researching service options, estimating costs, and writing infrastructure-as-code tasks that can slow down development workflows. Agent plugins extend coding agents with specialized skills, enabling them to handle these AWS-specific tasks directly within your development environment. Today, we’re announcing Agent Plugins for AWS (Agent Plugins), an open source repository of […]</description>
										<content:encoded>&lt;p&gt;Deploying applications to AWS typically involves researching service options, estimating costs, and writing infrastructure-as-code tasks that can slow down development workflows. Agent plugins extend coding agents with specialized skills, enabling them to handle these AWS-specific tasks directly within your development environment.&lt;/p&gt; 
&lt;p&gt;Today, we’re announcing &lt;a href="https://github.com/awslabs/agent-plugins" target="_blank" rel="noopener noreferrer"&gt;Agent Plugins for AWS (Agent Plugins),&lt;/a&gt; an open source repository of agent plugins that provide coding agents with the agent skills to architect, deploy, and operate on AWS.&lt;/p&gt; 
&lt;p&gt;Today’s launch includes an initial &lt;em&gt;deploy-on-aws&lt;/em&gt; agent plugin, which lets developers enter &lt;code&gt;deploy to AWS&lt;/code&gt; and have their coding agent generate AWS architecture recommendations, AWS service cost estimates, and AWS infrastructure-as-code to deploy the application to AWS. We will add additional agent skills and agent plugins in the coming weeks.&lt;/p&gt; 
&lt;p&gt;Agent plugins are currently supported in Claude Code and Cursor (&lt;a href="https://cursor.com/blog/marketplace" target="_blank" rel="noopener noreferrer"&gt;announced February 17&lt;/a&gt;). In this post, we’ll show you how to get started with Agent Plugins for AWS, explore the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin in detail, and demonstrate how it transforms the deployment experience from hours of configuration to a simple conversation.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Why agent plugins &lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;AI coding agents are increasingly used in software development, helping developers write, review, and deploy code more efficiently. Agent skills and the broader agent plugin packaging model are emerging as best practices for steering coding agents toward reliable outcomes without bloating model context. Instead of repeatedly pasting long AWS guidance into prompts, developers can now encode that guidance as reusable, versioned capabilities that agents invoke when relevant. This improves determinism, reduces context overhead, and makes agent behavior easier to standardize across teams. Agent plugins act as containers that package different types of expertise artifacts together. A single agent plugin can include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Agent skills&lt;/strong&gt; – Structured workflows and best-practice playbooks that guide AI through complex tasks like deployment, code review, or architecture planning. Agent skills encode domain expertise as step-by-step processes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MCP servers&lt;/strong&gt; – Connections to external services, data sources, and APIs. MCP servers give your assistant access to live documentation, pricing data, and other resources at runtime. Learn more about &lt;a href="https://github.com/awslabs/mcp" target="_blank" rel="noopener noreferrer"&gt;AWS MCP servers&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Hooks&lt;/strong&gt; – Automation and guardrails that run on developer actions. Hooks can validate changes, enforce standards, or trigger workflows automatically.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;References&lt;/strong&gt; – Documentation, configuration defaults, and knowledge that the agent skill can consult. References make agent skills smarter without bloating the prompt.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;As new types of expertise artifacts emerge in this space, they can be packaged into agent plugins, making the evolution transparent to developers.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;The deploy-on-aws plugin&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;The initial release includes the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin, which gives coding agents the knowledge to deploy applications to AWS with architecture recommendations, cost estimates, and infrastructure-as-code generation.&lt;/p&gt; 
&lt;p&gt;The agent plugin provides AI coding agents with a structured workflow:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Analyze – &lt;/strong&gt;Scan your codebase for framework, database, and dependencies.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Recommend –&lt;/strong&gt;&amp;nbsp;Select optimal AWS services with concise rationale.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Estimate –&lt;/strong&gt;&amp;nbsp;Show projected monthly cost before committing.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Generate – &lt;/strong&gt;Write CDK or CloudFormation infrastructure code.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deploy –&lt;/strong&gt;&amp;nbsp;Execute your confirmation.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The initial plugin uses three &lt;a href="https://github.com/awslabs/mcp" target="_blank" rel="noopener noreferrer"&gt;MCP servers for AWS&lt;/a&gt; to provide comprehensive guidance:&lt;/p&gt; 
&lt;table class="styled-table" border="1px" cellpadding="10px"&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;MCP server&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/awslabs/mcp/tree/main/src/aws-knowledge-mcp-server" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS Knowledge&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Documentation, architecture guidance, and best practices&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/awslabs/mcp/tree/main/src/aws-pricing-mcp-server" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS Pricing&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Real-time service pricing for cost estimates&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;&lt;a href="https://github.com/awslabs/mcp/tree/main/src/aws-iac-mcp-server" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS IaC&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td style="padding: 10px;border: 1px solid #dddddd"&gt;Best practices for&amp;nbsp;AWS Cloud Formation Kit (AWS&amp;nbsp;CDK) and&amp;nbsp;AWS&amp;nbsp;CloudFormation&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;&lt;strong&gt;Agent plugins for AWS in action&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Here’s how &lt;a href="https://github.com/awslabs/agent-plugins" target="_blank" rel="noopener noreferrer"&gt;Agent plugins for AWS&lt;/a&gt; transform the software development experience:&lt;/p&gt; 
&lt;p&gt;A full-stack developer has built an Express.js REST API on their local machine. The application connects to a PostgreSQL database and serves a React frontend. The developer is ready to deploy to AWS but isn’t sure about the best architecture.&lt;/p&gt; 
&lt;p&gt;Using Cursor or Claude Code with the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin installed, the developer enters:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Deploy this Express app to AWS&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;The plugin immediately springs into action:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 1: Analyze&lt;/strong&gt; – The agent scans the codebase and identifies:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Express.js framework (Node.js 20.x)&lt;/li&gt; 
 &lt;li&gt;PostgreSQL database dependency&lt;/li&gt; 
 &lt;li&gt;Static React build in /public&lt;/li&gt; 
 &lt;li&gt;Environment variables for database connection&lt;/li&gt; 
 &lt;li&gt;Current traffic: ~1000 requests/day expected&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Step 2: Recommend&lt;/strong&gt; – Based on the analysis, the agent recommends:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/apprunner/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS App Runner&lt;/strong&gt;&lt;/a&gt; for the Express.js backend (auto-scaling, managed container service)&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/rds/postgresql/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon RDS PostgreSQL&lt;/strong&gt;&lt;/a&gt; for the database (managed, automated backups)&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/cloudfront/getting-started/S3/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Amazon CloudFront + S3&lt;/strong&gt;&lt;/a&gt; for the React frontend (global CDN, cost-effective static hosting)&lt;/li&gt; 
 &lt;li&gt;&lt;a href="https://aws.amazon.com/secrets-manager/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;&lt;/a&gt; for database credentials&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Step 3: Estimate&lt;/strong&gt; – The agent provides a cost estimate using real-time pricing data from the &lt;a href="https://github.com/awslabs/mcp/tree/main/src/aws-pricing-mcp-server" target="_blank" rel="noopener noreferrer"&gt;AWS Pricing MCP server&lt;/a&gt;, giving you visibility into projected monthly costs before you commit to any infrastructure.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 4: Generate&lt;/strong&gt; The developer reviews the estimate and confirms. The agent generates:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;AWS CDK infrastructure code in TypeScript&lt;/li&gt; 
 &lt;li&gt;Dockerfile for the Express app&lt;/li&gt; 
 &lt;li&gt;Database migration scripts&lt;/li&gt; 
 &lt;li&gt;Environment configuration&lt;/li&gt; 
 &lt;li&gt;GitHub Actions workflow for CI/CD&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Step 5: Deploy&lt;/strong&gt; The developer reviews the generated code, makes minor adjustments to database schema, and confirms deployment. The agent:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Provisions all AWS resources via CDK&lt;/li&gt; 
 &lt;li&gt;Builds and deploys the container to App Runner&lt;/li&gt; 
 &lt;li&gt;Creates the Amazon RDS database and runs migrations&lt;/li&gt; 
 &lt;li&gt;Uploads the React build to S3 and configures CloudFront&lt;/li&gt; 
 &lt;li&gt;Stores credentials in Secrets Manager&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Within minutes, the developer’s application is live at a custom App Runner URL, with the React frontend served globally via CloudFront. The agent provides:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Application URLs (backend and frontend)&lt;/li&gt; 
 &lt;li&gt;Database connection details&lt;/li&gt; 
 &lt;li&gt;CloudWatch dashboard links for monitoring&lt;/li&gt; 
 &lt;li&gt;Cost tracking setup&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;What would have taken hours of reading documentation, comparing services, and writing infrastructure code took less than 10 minutes with the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin. Developers can now focus on building features instead of wrestling with cloud deployment complexity.&lt;/p&gt; 
&lt;h2&gt;&lt;strong&gt;Getting started with Agent Plugins for AWS&lt;/strong&gt;&lt;/h2&gt; 
&lt;h3&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;To get started, you need:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href="https://github.com/awslabs/agent-plugins?tab=readme-ov-file#requirements" target="_blank" rel="noopener noreferrer"&gt;An agent plugin compatible AI coding tool&lt;/a&gt; (Claude Code, Cursor, or other compatible tools)&lt;/li&gt; 
 &lt;li&gt;AWS CLI configured with appropriate credentials&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/h3&gt; 
&lt;h4&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/h4&gt; 
&lt;p&gt;Add the Agent Plugins for AWS marketplace to Claude Code:/plugin marketplace add awslabs/agent-plugins&lt;/p&gt; 
&lt;p&gt;Install the &lt;em&gt;deploy-on-aw&lt;/em&gt;s plugin:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;/plugin install deploy-on-aws@awslabs-agent-plugins&lt;/code&gt;&lt;/p&gt; 
&lt;h4&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/h4&gt; 
&lt;p&gt;Cursor announced support for agent plugins on February 17. You can install the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin directly from the &lt;a href="https://cursor.com/marketplace"&gt;Cursor Marketplace&lt;/a&gt;, or manually in Cursor by:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open &lt;strong&gt;Cursor Settings&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Navigate to&amp;nbsp;&lt;strong&gt;Plugins&lt;/strong&gt;,&amp;nbsp;and in the search bar type&amp;nbsp;&lt;code&gt;aws&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Select the plugin you want to install, and Click&amp;nbsp;&lt;strong&gt;add to cursor&lt;/strong&gt;, then select the scope&lt;/li&gt; 
 &lt;li&gt;Now the plugin should appear under&amp;nbsp;&lt;strong&gt;Plugins&lt;/strong&gt;, &lt;strong&gt;installed&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Learn more in the &lt;a href="https://cursor.com/blog/marketplace"&gt;Cursor Marketplace announcement&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;&lt;strong&gt;Skill triggers&lt;/strong&gt;&lt;/h3&gt; 
&lt;p&gt;The &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin responds to natural language requests like:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;“Deploy to AWS”&lt;/li&gt; 
 &lt;li&gt;“Host on AWS”&lt;/li&gt; 
 &lt;li&gt;“Run this on AWS”&lt;/li&gt; 
 &lt;li&gt;“AWS architecture for this app”&lt;/li&gt; 
 &lt;li&gt;“Estimate AWS cost”&lt;/li&gt; 
 &lt;li&gt;“Generate infrastructure”&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;strong&gt;Best practices for plugin-assisted development&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;To maximize the benefits of plugin-assisted development while maintaining security and code quality, follow these essential guidelines:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Always review generated code&lt;/strong&gt; before deployment (for example, against your constraints for security, cost, resilience)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use plugins as accelerators&lt;/strong&gt;, not replacements for developer judgment and expertise.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Keep plugins updated&lt;/strong&gt; to benefit from the latest AWS best practices.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Follow the principle of least privilege&lt;/strong&gt; when configuring AWS credentials.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Run security scanning tools&lt;/strong&gt; on generated infrastructure code.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;In this post, we showed how Agent Plugins for AWS extend coding agents with skills for deploying applications to AWS. Using the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin, you can generate architecture recommendations, cost estimates, and infrastructure-as-code directly from your coding agent.&lt;/p&gt; 
&lt;p&gt;Beyond deployments, agent plugins can help with other AWS workflows; more agent plugins for AWS are launching soon. You can also use &lt;a href="https://github.com/awslabs/mcp" target="_blank" rel="noopener noreferrer"&gt;AWS MCP servers&lt;/a&gt; to give your coding agent access to specialized tools to build on AWS.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Visit the &lt;a href="https://github.com/awslabs/agent-plugins" target="_blank" rel="noopener noreferrer"&gt;Agent Plugins for AWS repository&lt;/a&gt; to install and configure your agent plugins&lt;/li&gt; 
 &lt;li&gt;Install the &lt;em&gt;deploy-on-aws&lt;/em&gt; plugin from the &lt;a href="https://cursor.com/marketplace"&gt;Cursor Marketplace&lt;/a&gt; and start deploying from your editor&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;About the authors&lt;/h3&gt; 
&lt;p style="clear: both"&gt;&lt;/p&gt;</content:encoded>
					
					
			
		
		
			</item>
	</channel>
</rss>