aws-development
Lambda、SAM、CDK、DynamoDB、IAM などを活用したサーバーレスアーキテクチャの開発において、Infrastructure as Code のベストプラクティスを提供します。AWS 環境での設計・実装・デプロイに関する質問やレビューに活用できます。
description の原文を見る
AWS development best practices for Lambda, SAM, CDK, DynamoDB, IAM, and serverless architecture using Infrastructure as Code.
SKILL.md 本文
AWS開発のベストプラクティス
概要
このスキルは、Amazon Web Services (AWS) でのアプリケーション開発に関する包括的なガイドラインを提供します。サーバーレスアーキテクチャ、Infrastructure as Code、およびセキュリティベストプラクティスに焦点を当てています。
コア原則
- 正確な AWS SDK の例を備えた、クリーンで構造化されたコードを作成する
- すべてのインフラストラクチャに Infrastructure as Code (Terraform、CDK、SAM) を使用する
- すべての IAM ポリシーに最小権限の原則を適用する
- 可観測性のための包括的なロギング、メトリクス、トレースを実装する
AWS Lambda ガイドライン
設定標準
- ARM64 アーキテクチャで TypeScript 実装を使用して、パフォーマンスとコストを向上させる
- ワークロード要件に基づいて適切なメモリとタイムアウト値を設定する
- 設定には環境変数を使用し、値をハードコードしない
- 適切なエラーハンドリングと再試行ロジックを実装する
Lambda ベストプラクティス
// ES modules と型付きハンドラーを使用
import { APIGatewayProxyHandler } from 'aws-lambda';
export const handler: APIGatewayProxyHandler = async (event) => {
try {
// 関数の開始時に入力を検証
if (!event.body) {
return { statusCode: 400, body: JSON.stringify({ error: 'Missing body' }) };
}
// ビジネスロジックはここに
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-cdk-libを明示的なaws_*プレフィックスで使用する- 再利用可能なパターンのためにカスタムコンストラクトを実装する
- 関心事を異なる CloudFormation スタックに分離する
- ストレージ、コンピューティング、認証、API、アクセスなど機能別にリソースを整理する
プロジェクト構成
aws/
├── constructs/ # CDK カスタムコンストラクト
├── stacks/ # CloudFormation スタック定義
├── functions/ # Lambda 関数実装
└── 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';
// 再利用可能なパターンのためにカスタムコンストラクトを使用
export class ApiConstruct extends Construct {
constructor(scope: Construct, id: string, props: ApiProps) {
super(scope, id);
// 実装
}
}
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 を使用しない
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。