К основному содержанию
скилл CX Codex

aws-sdk-swift-usage — скилл для Claude Code: AWS SDK на Swift

Подсказывает агенту, как писать Swift-код под aws-sdk-swift: клиенты, конфиги, креденшелы, waiter'ы. Пригодится, когда проект на Swift ходит в AWS.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add aws/agent-toolkit-for-aws --skill aws-sdk-swift-usage -a claude-code
Открыть на GitHub

Что делает aws-sdk-swift-usage

Скилл добавляет агенту знания о том, как писать на Swift под aws-sdk-swift. Все операции в SDK асинхронные, поэтому в примерах точка входа — @main со static func main() async throws, а клиент создаётся через try await S3Client().

Внутри один файл SKILL.md с готовыми шаблонами: создание клиентов, struct-конфиги, резолверы креденшелов (статические и через assume role), waiter'ы, постраничный обход, presigned URL. Модели в запросах и ответах лежат в пространстве имён <Service>ClientTypes, например S3ClientTypes.Bucket.

Главное, на чём спотыкается код: классы вида S3ClientConfiguration устарели. Нужны struct-типы вроде S3Client.S3ClientConfig, параметры в них идут строго в порядке объявления, а регион обязателен. Точный порядок скилл советует смотреть в <Service>Client.swift внутри SDK.

Какие задачи решает

  • Написать асинхронную точку входа на Swift под AWS SDK
  • Заменить устаревший S3ClientConfiguration на struct-конфиг
  • Настроить assume role с базовым резолвером креденшелов
  • Дождаться готовности бакета через waiter
  • Обойти все объекты бакета постранично

Примеры запросов агенту

  • Напиши на Swift загрузку файла в S3 через aws-sdk-swift, точка входа @main
  • Переделай конфиг клиента DynamoDB на struct-тип, устаревший класс не используй
  • Сгенерируй presigned URL для file.pdf

Как установить aws-sdk-swift-usage

1Через Skills CLI (Vercel)

npx skills add aws/agent-toolkit-for-aws --skill aws-sdk-swift-usage -a claude-code

2Вручную: положить файлы

~/.claude/skills/aws-sdk-swift-usage/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/aws-sdk-swift-usage/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о aws-sdk-swift-usage

Как установить aws-sdk-swift-usage в Claude Code?

Выполните npx skills add aws/agent-toolkit-for-aws --skill aws-sdk-swift-usage -a claude-code. Скилл появится в ~/.claude/skills/aws-sdk-swift-usage/SKILL.md.

Что делает aws-sdk-swift-usage?

Даёт агенту шаблоны aws-sdk-swift: создание клиентов, struct-конфиги, резолверы креденшелов, waiter'ы, пагинацию и presigned URL. Работает, когда вы просите код, обращающийся к сервисам AWS из Swift.

Почему порядок параметров в конфиге важен?

SDK требует передавать их в порядке объявления, иначе код не соберётся. Точный перечень и порядок для конкретного сервиса скилл советует брать из <Service>Client.swift в исходниках SDK.

Исходный текст

SKILL.md · Apache-2.0
---
name: aws-sdk-swift-usage
description: |
  AWS SDK for Swift development patterns. Use when writing Swift code that uses AWS services via aws-sdk-swift package.
---

# AWS SDK for Swift

## Async Code Structure

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

```swift
@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.

```swift
// 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`

```swift
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):

  ```swift
  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

```swift
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:

```swift
import AWSS3
import 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 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 ?? "")
}
```

© aws · Apache-2.0 · aws/agent-toolkit-for-aws

Похожие скиллы

Всё по теме «Облака: AWS, Azure, GCP» →
aws-sdk-java-v2-lambda giuseppe-trisciuoglio Скилл подсказывает агенту, как вызывать и обновлять функции AWS Lambda через AWS SDK for Java 2.x. Пригодится, если пишешь на Java и работаешь с Lambda. CX Codex +1 3 700установок aws-sdk-java-v2-s3 giuseppe-trisciuoglio Даёт агенту готовые примеры работы с Amazon S3 через AWS SDK for Java 2.x: бакеты, загрузка объектов, multipart, presigned URL. CX Codex +1 3 700установок aws-solution-architect Alireza Rezvani Проектирует архитектуру AWS, генерирует шаблоны IaC и разбирает расходы. Пригодится при запуске серверлес-приложения, миграции или настройке CI/CD. 1 586установок aws-serverless-eda zxkane Помогает проектировать бессерверные API и событийно-ориентированные системы в AWS по принципам Well-Architected. Пригодится при настройке Lambda, DynamoDB и Step Functions. CX Codex +1 701установок aws-development Mindrally Скилл задаёт агенту правила разработки на AWS: Lambda, CDK, SAM, DynamoDB, IAM и serverless-архитектура через Infrastructure as Code. CX Codex +1 701установок aws-dynamodb alinaqi Скилл учит агента проектировать базы по методу single-table design и собирать запросы через AWS SDK v3 для TypeScript или Python. CX Codex +1 522установок

Из того же набора133

creating-secrets-using-best-practices Ведёт агента по созданию секрета в AWS Secrets Manager: отдельный ключ KMS, узкие права IAM, ротация и аудит. Пригодится, когда секрет идёт в прод. CX Codex +1 6 700установок storing-and-querying-vectors Скилл ведёт агента по работе с Amazon S3 Vectors: создание векторного бакета и индекса, запись эмбеддингов, поиск похожих. CX Codex +1 6 600установок querying-data-lake Скилл запускает SQL в Amazon Athena: выбирает рабочую группу, останавливает разрушительные запросы на подтверждение и показывает цену прогона. CX Codex +1 6 600установок exploring-data-catalog Проводит аудит и собирает инвентарь ресурсов AWS Glue Data Catalog, S3 Tables и каталогов Redshift. Пригодится для составления карты данных в аккаунте без выполнения запросов. CX Codex +1 6 600установок finding-data-lake-assets Ищет таблицы и датасеты в AWS Glue Data Catalog, S3, S3 Tables и Redshift по имени, колонке или S3-пути. Пригодится, когда нужно быстро найти нужный ассет озера данных без ручного обхода консоли AWS. CX Codex +1 6 500установок creating-data-lake-table Создаёт управляемые таблицы Iceberg в Amazon S3 Tables: бакет, namespace, схему, партиционирование и доступ. Нужен, когда данные надо хранить в аналитическом виде. CX Codex +1 6 500установок aws-amplify Скилл для создания и развёртывания полнофункциональных приложений с AWS Amplify Gen2. Настраивает аутентификацию, базы данных, хранилище и AI через TypeScript код — поддерживает React, Next.js, Vue, Flutter и другие фреймворки. CX Codex +1 6 600установок ingesting-into-data-lake Помогает загружать данные в data lake на AWS из файлов S3, баз данных JDBC, DynamoDB, BigQuery или Snowflake. Выбирает формат S3 Tables или Apache Iceberg и генерирует Glue-пайплайны. CX Codex +1 6 600установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой