aws-development について
AWS アプリケーション開発者向けのベストプラクティススキルです。サーバーレスアーキテクチャ、Infrastructure as Code、セキュリティを中心に、可観測性、テスト、CI/CD も扱います。
主な機能
- 01Lambda の設定とエラー処理の指針
- 02Terraform、CDK、SAM によるインフラ管理
- 03IAM の最小権限とシークレット管理
- 04DynamoDB のデータモデリングパターン
- 05ログ、メトリクス、分散トレーシング
- 06AWS のテストと CI/CD の指針
活用シーン
- 01サーバーレスアプリケーションと Lambda 関数の計画
- 02CDK または SAM によるクラウドインフラの定義
- 03IAM 権限とシークレット管理の確認
- 04AWS サービスの監視とテストの設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill aws-developmentインストール後、Claude Code で/aws-developmentを入力して読み込まれたか確認します。
詳細
AWS 開発のベストプラクティス
概要
このスキルでは、サーバーレスアーキテクチャ、Infrastructure as Code、セキュリティのベストプラクティスに重点を置き、Amazon Web Services(AWS)でアプリケーションを開発するための包括的なガイドラインを提供します。
基本原則
- 正確な AWS SDK のサンプルを用いて、クリーンで適切に構成されたコードを記述します
- すべてのインフラストラクチャに Infrastructure as Code(Terraform、CDK、SAM)を使用します
- すべての IAM ポリシーで最小権限の原則に従います
- オブザーバビリティを確保するため、包括的なログ、メトリクス、トレースを実装します
AWS Lambda のガイドライン
構成基準
- パフォーマンスとコストを改善するため、ARM64 アーキテクチャで TypeScript による実装を使用します
- ワークロードの要件に基づいて、適切なメモリとタイムアウトの値を設定します
- 構成には環境変数を使用し、値をハードコードしないでください
- 適切なエラー処理と再試行ロジックを実装します
Lambda のベストプラクティス
// Use ES modules and typed handlers
import { APIGatewayProxyHandler } from 'aws-lambda';
export const handler: APIGatewayProxyHandler = async (event) => {
try {
// Validate input at function start
if (!event.body) {
return { statusCode: 400, body: JSON.stringify({ error: 'Missing body' }) };
}
// Business logic here
return { statusCode: 200, body: JSON.stringify({ success: true }) };
} catch (error) {
console.error('Lambda error:', error);
return { statusCode: 500, body: JSON.stringify({ error: 'Internal error' }) };
}
};
AWS CDK のガイドライン
実装基準
aws_*プレフィックスを明示してaws-cdk-libを使用します- 再利用可能なパターンにはカスタムコンストラクトを実装します
- 関心事を個別の CloudFormation スタックに分離します
- リソースを機能グループ(ストレージ、コンピューティング、認証、API、アクセス)ごとに整理します
プロジェクト構成
aws/
├── constructs/ # CDK custom constructs
├── stacks/ # CloudFormation stack definitions
├── functions/ # Lambda function implementations
└── tests/ # Infrastructure tests
CDK のベストプラクティス
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws_lambda';
import * as dynamodb from 'aws-cdk-lib/aws_dynamodb';
// Use custom constructs for reusable patterns
export class ApiConstruct extends Construct {
constructor(scope: Construct, id: string, props: ApiProps) {
super(scope, id);
// Implementation
}
}
DynamoDB のパターン
テーブル設計
- エンティティ間の関係ではなく、アクセスパターンを中心にテーブルを設計します
- 適切な場合はシングルテーブル設計を使用します
- 追加のアクセスパターンには GSI を実装します
- 変動するワークロードにはオンデマンドキャパシティを、予測可能なワークロードにはプロビジョニング済みキャパシティを使用します
ベストプラクティス
- 常に厳密に型付けされた項目定義を使用します
- バージョン属性を用いて楽観的ロックを実装します
- 複数の項目にはバッチ操作を使用します
- 本番環境のテーブルではポイントインタイムリカバリを有効にします
IAM セキュリティのベストプラクティス
原則
- 最小権限を適用し、必要な権限のみを付与します
- AWS サービスへのアクセスにはアクセスキーではなく IAM ロールを使用します
- 適切な場合はリソースベースのポリシーを実装します
- 認証情報を定期的に監査し、ローテーションします
ポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:*:*:table/MyTable"
}
]
}
SAM テンプレートの構成
テンプレートの構造
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 30
Runtime: nodejs20.x
Architectures:
- arm64
Tracing: Active
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: index.handler
Events:
Api:
Type: Api
Properties:
Path: /items
Method: GET
API Gateway の構成
ベストプラクティス
- 認証には Cognito または IAM を使用します
- リクエストの検証を実装します
- 必要な場合にのみ CORS を有効にします
- レート制限には使用量プランと API キーを使用します
オーケストレーションにおける Step Functions
- 複雑なワークフローには Step Functions を使用します
- Catch と Retry を用いてエラー処理を実装します
- 大量の処理を短時間で実行する場合は Express ワークフローを使用します
- 長時間実行されるプロセスには Standard ワークフローを使用します
セキュリティ基準
暗号化
- すべてのストレージサービスで保存時の暗号化を有効にします
- キー管理には AWS KMS を使用します
- 転送中の暗号化(TLS)を有効にします
- 機密データにはカスタム KMS キーを使用します
シークレット管理
- シークレットは AWS Secrets Manager または Parameter Store に保存します
- シークレットをバージョン管理にコミットしないでください
- シークレットを自動的にローテーションします
- シークレットへのアクセスには IAM ロールを使用します
オブザーバビリティ
ログ
- 構造化された JSON ログを使用します
- サービス間で相関 ID を含めます
- 適切なレベル(INFO、WARN、ERROR)でログを記録します
- クエリに備えて CloudWatch Logs Insights を有効にします
モニタリング
- 重要なメトリクスに対して CloudWatch アラームを作成します
- 分散トレースには X-Ray を使用します
- ビジネス KPI 用のカスタムメトリクスを実装します
- 運用状況を可視化するダッシュボードを設定します
テスト
単体テスト
- 単体テストでは AWS SDK の呼び出しをモックします
- 統合テストには localstack または SAM local を使用します
- ポリシーシミュレーターで IAM ポリシーをテストします
- cfn-lint で CloudFormation/CDK を検証します
統合テスト
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { mockClient } from 'aws-sdk-client-mock';
const ddbMock = mockClient(DynamoDBClient);
beforeEach(() => {
ddbMock.reset();
});
test('handler returns items', async () => {
ddbMock.on(QueryCommand).resolves({ Items: [] });
const result = await handler(event);
expect(result.statusCode).toBe(200);
});
CI/CD 統合
- CI/CD には AWS CodePipeline または GitHub Actions を使用します
- デプロイ前に
cdk diffまたはsam validateを実行します - ステージング環境(dev、staging、prod)を実装します
- 環境ごとの構成にはパラメーターオーバーライドを使用します
避けるべきよくある落とし穴
- AWS の認証情報やシークレットをハードコードする
- Lambda に適切なタイムアウトを設定しない
- コールドスタートの最適化を無視する
- リソースを過剰にプロビジョニングする
- 適切なエラー処理を実装しない
- CloudWatch アラームを設定しない
- IAM ポリシーが不十分(許可範囲が広すぎる)
- コンプライアンス要件で必要な場合に VPC を使用しない
コメント
Markdown 対応