aws-sdk-swift-usage

por aws

Patrones de desarrollo con AWS SDK para Swift. Úsalo al escribir código Swift que utilice servicios de AWS mediante el paquete aws-sdk-swift.

npx skills add https://github.com/aws/agent-toolkit-for-aws --skill aws-sdk-swift-usage

AWS SDK for Swift

Async Code Structure

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

@main
struct 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.

// CORRECT - struct config
let 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
import AWSS3
import AWSDynamoDB

// Simple - auto-detects region
let s3 = try await S3Client()
let dynamo = try await DynamoDBClient()

// With region
let s3 = try S3Client(region: "us-west-2")

// With config - parameters must be in declaration order
let config = try await S3Client.S3ClientConfig(
    useFIPS: true,
    awsRetryMode: .adaptive,
    maxAttempts: 5,
    region: "us-west-2"
)
let client = S3Client(config: config)

// With custom endpoint and credentials
let 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):

    import ClientRuntime
    let 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

import AWSSDKIdentity
import SmithyIdentity

// Static credentials - pass credential object directly
let creds = AWSCredentialIdentity(accessKey: "AKIA...", secret: "...")
let resolver = StaticAWSCredentialIdentityResolver(creds)

// Assume role - REQUIRES underlying resolver
let underlying = try DefaultAWSCredentialIdentityResolverChain()
let resolver = try STSAssumeRoleAWSCredentialIdentityResolver(
    awsCredentialIdentityResolver: underlying,
    roleArn: "arn:aws:iam::123456789012:role/MyRole",
    sessionName: "session-name"
)

// Use in config
let config = try await S3Client.S3ClientConfig(
    awsCredentialIdentityResolver: resolver,
    region: "us-west-2"
)

Waiters

Import SmithyWaitersAPI. WaiterOptions requires maxWaitTime parameter:

import AWSS3
import SmithyWaitersAPI

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

Pagination

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

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

Common Operations

// Put object
_ = try await client.putObject(input: PutObjectInput(
    body: .data(data),
    bucket: "bucket",
    key: "key"
))

// Get object
let output = try await client.getObject(input: GetObjectInput(bucket: "bucket", key: "key"))
let data = try await output.body?.readData()

// List buckets
let response = try await client.listBuckets(input: ListBucketsInput())
for bucket in response.buckets ?? [] {
    print(bucket.name ?? "")
}

Más skills de aws

analyzing-release-readiness
aws
Activa una revisión de preparación para el lanzamiento previa a la fusión en un PR de GitHub, MR de GitLab o rama local. Úsalo cuando el usuario quiera analizar cambios de código para evaluar riesgo, corrección,…
scanning-with-aws-security-agent
aws
Ejecuta un escaneo del AWS Security Agent en el workspace: sube el código fuente a AWS, lo escanea con el servicio administrado Security Agent y devuelve resultados clasificados y verificados…
coordinating-multi-space-devops-agent
aws
Coordina el agente DevOps de AWS a través de múltiples AgentSpaces desde una sola sesión de Claude Code: enruta las preguntas al espacio correcto (prod vs staging vs knowledge),…
aws-security
aws
Cubre los servicios y flujos de trabajo de seguridad de AWS: hallazgos de Security Hub V2 (OCSF), conectores, agregadores, reglas de automatización y resúmenes de postura de seguridad;…
querying-aws-sagemaker-catalog
aws
Ejecuta análisis SQL sobre tablas de metadatos de activos de SageMaker Catalog exportadas como Apache Iceberg en S3 Tables. Cubre consultas de gobernanza, seguimiento del crecimiento de activos,…
agents-connect
aws
Úsalo al conectar tu agente a APIs, herramientas o servicios externos a través de Gateway, o al restringir el acceso a herramientas con políticas de Cedar. Gestiona la configuración de gateway, target…
aurora-dsql
aws
Aprovisiona y gestiona clústeres de Aurora DSQL, se conecta mediante psql o conectores DSQL, gestiona esquemas, ejecuta consultas, migra desde MySQL, diagnostica planes de consulta,…
transitgateway
aws
Configura AWS Transit Gateway: creación de un hub y conexión de VPCs, segmentación del tráfico con tablas de rutas, centralización de la salida y la inspección a través de un hub…