AWS SDK integration for Node.js (v3) and Python (boto3). Core services: S3, Lambda, DynamoDB, SQS, SNS, CloudWatch, IAM. Configuration, credentials, and production patterns. USE WHEN: user mentions "AWS", "Amazon Web Services", "Lambda", "DynamoDB", "SQS", "SNS", "CloudWatch", "IAM", "boto3", "aws-sdk" DO NOT USE FOR: S3 file operations - use `cloud-storage`; SQS messaging patterns - use `sqs`; Azure/GCP - use respective skills

GitHub
Install command
npx skhub add claude-dev-suite/aws
Markdown
SKILL.md

AWS SDK Integration

Node.js (SDK v3)

Client Setup

import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { DynamoDBDocumentClient, PutCommand, GetCommand, QueryCommand } from '@aws-sdk/lib-dynamodb';

const client = new DynamoDBClient({ region: process.env.AWS_REGION });
const ddb = DynamoDBDocumentClient.from(client);

DynamoDB

// Put item
await ddb.send(new PutCommand({
  TableName: 'Users',
  Item: { pk: `USER#${id}`, sk: 'PROFILE', name, email, createdAt: Date.now() },
  ConditionExpression: 'attribute_not_exists(pk)', // Prevent overwrite
}));

// Get item
const { Item } = await ddb.send(new GetCommand({
  TableName: 'Users', Key: { pk: `USER#${id}`, sk: 'PROFILE' },
}));

// Query
const { Items } = await ddb.send(new QueryCommand({
  TableName: 'Orders',
  KeyConditionExpression: 'pk = :pk AND begins_with(sk, :prefix)',
  ExpressionAttributeValues: { ':pk': `USER#${userId}`, ':prefix': 'ORDER#' },
}));

Lambda Invocation

import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';

const lambda = new LambdaClient({});
const { Payload } = await lambda.send(new InvokeCommand({
  FunctionName: 'processOrder',
  InvocationType: 'Event', // async ('RequestResponse' for sync)
  Payload: JSON.stringify({ orderId }),
}));

SNS

import { SNSClient, PublishCommand } from '@aws-sdk/client-sns';

const sns = new SNSClient({});
await sns.send(new PublishCommand({
  TopicArn: process.env.ORDER_TOPIC_ARN,
  Message: JSON.stringify({ orderId, status: 'completed' }),
  MessageAttributes: {
    eventType: { DataType: 'String', StringValue: 'ORDER_COMPLETED' },
  },
}));

CloudWatch Metrics

import { CloudWatchClient, PutMetricDataCommand } from '@aws-sdk/client-cloudwatch';

const cw = new CloudWatchClient({});
await cw.send(new PutMetricDataCommand({
  Namespace: 'MyApp',
  MetricData: [{
    MetricName: 'OrderProcessingTime',
    Value: durationMs,
    Unit: 'Milliseconds',
    Dimensions: [{ Name: 'Service', Value: 'OrderProcessor' }],
  }],
}));

Python (boto3)

import boto3

# DynamoDB
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
table.put_item(Item={'pk': f'USER#{id}', 'sk': 'PROFILE', 'name': name})
response = table.get_item(Key={'pk': f'USER#{id}', 'sk': 'PROFILE'})

# Lambda
lambda_client = boto3.client('lambda')
lambda_client.invoke(FunctionName='processOrder',
    InvocationType='Event', Payload=json.dumps({'orderId': order_id}))

# SNS
sns = boto3.client('sns')
sns.publish(TopicArn=topic_arn, Message=json.dumps(payload))

Credentials (never hardcode)

EnvironmentMethod
Local dev~/.aws/credentials or AWS_PROFILE
EC2/ECSInstance/task IAM role (automatic)
LambdaExecution role (automatic)
CI/CDAWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY env vars

Anti-Patterns

Anti-PatternFix
Hardcoded credentialsUse IAM roles, env vars, or credential chain
Single-region architectureUse multi-AZ, consider multi-region for DR
No retries on SDK callsSDK v3 retries automatically — configure maxAttempts
Scan instead of Query (DynamoDB)Design keys for Query access patterns
Synchronous Lambda calls in request pathUse async invocation or SQS

Production Checklist

  • IAM roles with least privilege
  • No hardcoded credentials
  • SDK retry configuration (maxAttempts)
  • CloudWatch alarms on error metrics
  • VPC endpoints for S3/DynamoDB (saves NAT costs)
  • Resource tagging for cost allocation
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/cloud/aws

Default branch

main

Latest commit

9496306

Tree SHA

fe4e2f1