Aws Sdk Swift Usage

by aws0d6167ad2e6dNo license2.8K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated today

AWS SDK for Swift development patterns. Use when writing Swift code that uses AWS services via aws-sdk-swift package.

Instructions onlySoftware Development
AI-generated overview

Reference patterns for writing Swift code with the AWS SDK for Swift package.

What it does
Provides coding patterns and examples for using the AWS SDK for Swift, covering async entry points, struct-based client configuration, credential resolvers, waiters, pagination, presigned URLs and common S3 operations. It is an instruction-only reference with code snippets rather than a tool that produces files. It emphasizes correct config types and parameter ordering.
When to use it
Use it when writing or reviewing Swift code that calls AWS services through the aws-sdk-swift package. It helps with client setup, credentials, pagination and common service operations.
Requirements
No scripts or packages ship with the skill; it is instructions only. Applying the patterns requires a Swift toolchain and the aws-sdk-swift package, plus AWS credentials and network access for actual service calls.

AWS SDK for Swift

Async Code Structure

All SDK operations are async. Use @main entry point:

swift
@mainstruct Main {    static func main() async throws {        let client = try await S3Client()        // ... async operations    }}

CRITICAL: Use Struct Config Types

NEVER use S3ClientConfiguration or DynamoDBClientConfiguration - these are DEPRECATED classes.

ALWAYS use the struct-based config types:

  • S3Client.S3ClientConfig (not S3ClientConfiguration)
  • DynamoDBClient.DynamoDBClientConfig (not DynamoDBClientConfiguration)
  • STSClient.STSClientConfig (not STSClientConfiguration)

Config parameters MUST be in declaration order. Region is ALWAYS required when creating a config. Check the service client source for exact order.

swift
// CORRECT - struct configlet config = try await S3Client.S3ClientConfig(region: "us-west-2")let client = S3Client(config: config)
// WRONG - deprecated class// let config = try await S3Client.S3ClientConfiguration(region: "us-west-2")

Client Creation

All service clients follow the same pattern: <Service>Client with <Service>Client.<Service>ClientConfig.

Model types (structs/enums used in requests/responses) are namespaced under <Service>ClientTypes:

  • S3ClientTypes.Bucket, S3ClientTypes.Object
  • DynamoDBClientTypes.AttributeValue
  • CloudWatchClientTypes.MetricDatum, CloudWatchClientTypes.Dimension
swift
import AWSS3import AWSDynamoDB
// Simple - auto-detects regionlet s3 = try await S3Client()let dynamo = try await DynamoDBClient()
// With regionlet s3 = try S3Client(region: "us-west-2")
// With config - parameters must be in declaration orderlet config = try await S3Client.S3ClientConfig(    useFIPS: true,    awsRetryMode: .adaptive,    maxAttempts: 5,    region: "us-west-2")let client = S3Client(config: config)
// With custom endpoint and credentialslet config = try await S3Client.S3ClientConfig(    awsCredentialIdentityResolver: resolver,    region: "us-west-2",    endpoint: "https://s3.custom-endpoint.com")

Common config parameters (MUST follow declaration order):

  • awsCredentialIdentityResolver - Custom credentials

  • useFIPS - Enable FIPS endpoints

  • useDualStack - Enable dual-stack endpoints

  • awsRetryMode - Retry strategy (.adaptive, .standard, .legacy)

  • maxAttempts - Max retry attempts

  • region - AWS region

  • httpClientEngine - Custom HTTP client (requires HttpClientConfiguration parameter):

    swift
    import ClientRuntimelet httpConfig = HttpClientConfiguration()let httpClient = URLSessionHTTPClient(httpClientConfiguration: httpConfig)let config = try await S3Client.S3ClientConfig(    region: "us-east-1",    httpClientEngine: httpClient)
  • endpoint - Custom endpoint URL

For service-specific config options or exact parameter order, check Sources/Services/AWS<Service>/Sources/AWS<Service>/<Service>Client.swift in the SDK.

Credential Resolvers

swift
import AWSSDKIdentityimport SmithyIdentity
// Static credentials - pass credential object directlylet creds = AWSCredentialIdentity(accessKey: "AKIA...", secret: "...")let resolver = StaticAWSCredentialIdentityResolver(creds)
// Assume role - REQUIRES underlying resolverlet underlying = try DefaultAWSCredentialIdentityResolverChain()let resolver = try STSAssumeRoleAWSCredentialIdentityResolver(    awsCredentialIdentityResolver: underlying,    roleArn: "arn:aws:iam::123456789012:role/MyRole",    sessionName: "session-name")
// Use in configlet config = try await S3Client.S3ClientConfig(    awsCredentialIdentityResolver: resolver,    region: "us-west-2")

Waiters

Import SmithyWaitersAPI. WaiterOptions requires maxWaitTime parameter:

swift
import AWSS3import SmithyWaitersAPI
let client = try await S3Client()_ = try await client.waitUntilBucketExists(    options: WaiterOptions(maxWaitTime: 120.0),    input: HeadBucketInput(bucket: "my-bucket"))

Pagination

swift
let input = ListObjectsV2Input(bucket: "my-bucket")for try await page in client.listObjectsV2Paginated(input: input) {    for object in page.contents ?? [] {        print(object.key ?? "")    }}

Presigned URLs

swift
let url = try await client.presignedURLForGetObject(    input: GetObjectInput(bucket: "my-bucket", key: "file.pdf"),    expiration: 3600)

Common Operations

swift
// Put object_ = try await client.putObject(input: PutObjectInput(    body: .data(data),    bucket: "bucket",    key: "key"))
// Get objectlet output = try await client.getObject(input: GetObjectInput(bucket: "bucket", key: "key"))let data = try await output.body?.readData()
// List bucketslet response = try await client.listBuckets(input: ListBucketsInput())for bucket in response.buckets ?? [] {    print(bucket.name ?? "")}

Source and attribution

Source:aws/agent-toolkit-for-awsinplugins/aws-core/skills/aws-sdk-swift-usageat commit0d6167a

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal