mcpField
A
aws-development

aws-development

github.com/mindrallyクラウド・DevOps287705 回インストール3 週間前に更新
リポジトリ

aws-development について

AWS アプリケーション開発者向けのベストプラクティススキルです。サーバーレスアーキテクチャ、Infrastructure as Code、セキュリティを中心に、可観測性、テスト、CI/CD も扱います。

主な機能

  1. 01Lambda の設定とエラー処理の指針
  2. 02Terraform、CDK、SAM によるインフラ管理
  3. 03IAM の最小権限とシークレット管理
  4. 04DynamoDB のデータモデリングパターン
  5. 05ログ、メトリクス、分散トレーシング
  6. 06AWS のテストと CI/CD の指針

活用シーン

  1. 01サーバーレスアプリケーションと Lambda 関数の計画
  2. 02CDK または SAM によるクラウドインフラの定義
  3. 03IAM 権限とシークレット管理の確認
  4. 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)を実装します
  • 環境ごとの構成にはパラメーターオーバーライドを使用します

避けるべきよくある落とし穴

  1. AWS の認証情報やシークレットをハードコードする
  2. Lambda に適切なタイムアウトを設定しない
  3. コールドスタートの最適化を無視する
  4. リソースを過剰にプロビジョニングする
  5. 適切なエラー処理を実装しない
  6. CloudWatch アラームを設定しない
  7. IAM ポリシーが不十分(許可範囲が広すぎる)
  8. コンプライアンス要件で必要な場合に VPC を使用しない

コメント