AWS Serverless Application Model(SAM)は、サーバーレスアプリケーションの構築とデプロイを簡素化する強力なツールです。しかし、不要になったリソースを放置すると、コストの無駄やセキュリティリスクにつながります。本記事では、AWS SAMで作成されたリソースの確認と削除の方法を、ステップバイステップで詳細に解説します。
☑️ 1. SAMで作成されたリソースの確認
SAMで sam deploy
を使ってアプリケーションをデプロイすると、AWS CloudFormation を介して各種AWSリソース(Lambda, API Gateway, DynamoDB, S3, など)が作成されます。
1-1. デプロイ済みスタックの一覧を確認
aws cloudformation list-stacks \
--query "StackSummaries[?StackStatus!='DELETE_COMPLETE'].[StackName,StackStatus]" \
--output table
ワンライナー形式
aws cloudformation list-stacks --query "StackSummaries[?StackStatus!='DELETE_COMPLETE'].[StackName,StackStatus]" --output table
これにより、現在有効なCloudFormationスタックの一覧が表示されます。
1-2. スタック内のリソースを確認
aws cloudformation describe-stack-resources --stack-name <スタック名>
スタックに含まれる各リソース(Lambda関数、API Gateway、DynamoDBなど)を確認できます。
1-3. sam list
コマンドを使用
sam list
SAM CLIが保持している状態から、デプロイ済みリソースの一覧を取得します(--guided
でデプロイした場合のみ有効)。
❌ 2. SAMリソースの削除
2-1. sam delete
コマンドを使用(推奨)
sam delete
対話形式でスタックを削除します。プロンプトをスキップして自動化したい場合は:
sam delete --stack-name <スタック名> --region <リージョン> --no-prompts
このコマンドは、関連するCloudFormationスタックと、それにより作成された全リソースを安全に削除します。
2-2. CloudFormationスタックを直接削除
SAM CLIがうまく動作しない場合や手動操作を行いたい場合:
aws cloudformation delete-stack --stack-name <スタック名>
🔄 3. その他の関連リソース削除
一部のリソースはCloudFormationスタックに含まれず、手動削除が必要です。
S3バケットの削除(SAMビルド用)
aws s3 rb s3://<バケット名> --force
ECRリポジトリ(ビルド用イメージ)
aws ecr delete-repository --repository-name <リポジトリ名> --force
IAMロール
aws iam delete-role --role-name <ロール名>
CloudWatch Logs(Lambdaのログ)
aws logs delete-log-group --log-group-name /aws/lambda/<関数名>
⚠️ 注意点
- 削除は取り消しできません。 誤って削除しないよう、必ずスタック名・リソース名を確認してください。
sam delete
やaws cloudformation delete-stack
の実行は、リソースの依存関係も自動的に処理されます。- 削除後も S3のバージョニング有効化バケット は完全には削除されないことがあります。
📆 自動化したい場合のTips
定期的に検証・検出・削除を行いたい場合は、以下のようなスクリプトをCloudShellやCI上で活用できます:
#!/bin/bash
STACK_NAME="your-stack-name"
REGION="ap-northeast-1"
# 削除確認
aws cloudformation describe-stacks --stack-name $STACK_NAME --region $REGION
# スタック削除
aws cloudformation delete-stack --stack-name $STACK_NAME --region $REGION
# 関連ロググループ削除(例)
aws logs delete-log-group --log-group-name "/aws/lambda/${STACK_NAME}-function"
🔎 まとめ
AWS SAMを用いた開発後は、不要なリソースを明示的に削除することがコスト最適化とセキュリティ強化に直結します。sam delete
や aws
CLI を使って、再現性のある構築・削除フローをテンプレート化しておくことが、継続的な開発やMVP運用にも非常に有効です。
本記事は、再現性・効率性・自動化を重視するサーバーレス開発者のためのリファレンスとして設計されています。
コメント