aws-cloudformation-s3 について
CloudFormation で Amazon S3 を管理する開発者向けのスキルです。バケット設定、ポリシー、バージョニング、ライフサイクルルール、再利用可能なテンプレート構成を扱います。
主な機能
- 01S3 バケットプロパティの設定
- 02バケットポリシーとアクセス制御の設定
- 03バージョニングとライフサイクルルールの設定
- 04CORS とクロススタック出力の設定
- 05テンプレートの検証とデプロイ
活用シーン
- 01暗号化とバージョニング付きバケットの作成
- 02ポリシーによるバケットアクセス制御
- 03オブジェクトの移行と有効期限の設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-cloudformation-s3インストール後、Claude Code で/aws-cloudformation-s3を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-configuration.mdcomplete-examples.mdexamples.mdreference.md詳細
AWS CloudFormation S3 パターン
本番環境に対応したインフラストラクチャ向けに、S3 バケットの設定、ポリシー、バージョニング、ライフサイクルルール、および CloudFormation テンプレート構成のベストプラクティスを提供します。
使用する場面
- カスタム設定で S3 バケットを作成する
- アクセス制御用のバケットポリシーを実装する
- データ保護のために S3 バージョニングを設定する
- データ管理用のライフサイクルルールを設定する
- スタック間参照用の Outputs を作成する
- AWS 固有の型を持つ Parameters を使用する
- Mappings と Conditions を使用してテンプレートを整理する
概要
本番環境に対応したインフラストラクチャ向けに、S3 バケットの設定、ポリシー、バージョニング、ライフサイクルルール、および CloudFormation テンプレート構成を提供します。
手順
- バケットリソースを定義する:バージョニング、暗号化、PublicAccessBlock を設定した
AWS::S3::Bucketを作成します - バケットポリシーを設定する:アクセス制御用の IAM ポリシーを設定します
- ライフサイクルルールを設定する:移行と有効期限のポリシーを定義します
- CORS を設定する:必要に応じてクロスオリジンリクエストを許可します
- Outputs を追加する:スタック間参照用にバケット名/ARN をエクスポートします
デプロイ前に検証します:
aws cloudformation validate-template --template-body file://template.yaml
失敗時にロールバックするようにデプロイします:
aws cloudformation deploy \
--template-file template.yaml \
--stack-name my-s3-stack \
--capabilities CAPABILITY_IAM
デプロイに失敗すると、CloudFormation は自動的にロールバックします。次のコマンドで失敗を確認します:
aws cloudformation describe-stack-events --stack-name my-s3-stack
クイックリファレンス
| リソースタイプ | 目的 |
|---|---|
AWS::S3::Bucket | S3 バケットを作成する |
AWS::S3::BucketPolicy | バケットレベルのポリシーを設定する |
AWS::S3::BucketReplication | リージョン間レプリケーション |
| Parameters | カスタマイズ用の入力値 |
| Mappings | 静的な設定テーブル |
| Conditions | 条件に応じたリソース作成 |
| Outputs | スタック間参照用の戻り値 |
例
基本的な S3 バケット
Resources:
DataBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-data-bucket
バージョニングと暗号化を設定したバケット
DataBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${AWS::StackName}-data"
VersioningConfiguration:
Status: Enabled
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
ライフサイクルルール
DataBucket:
Type: AWS::S3::Bucket
Properties:
LifecycleConfiguration:
Rules:
- Id: ArchiveOldData
Status: Enabled
Transitions:
- StorageClass: GLACIER
TransitionInDays: 365
バケットポリシー
BucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref DataBucket
PolicyDocument:
Statement:
- Effect: Allow
Principal:
AWS: !Ref RoleArn
Action:
- s3:GetObject
Resource: !Sub "${DataBucket.Arn}/*"
CORS、静的ウェブサイト、レプリケーション、本番環境対応の設定など、さらに詳しい例についてはreferences/complete-examples.mdを参照してください。
テンプレート構成
テンプレートのセクション
AWSTemplateFormatVersion: 2010-09-09
Description: Template description
Mappings: {} # Static configuration tables
Metadata: {} # Additional information
Parameters: {} # Input values
Conditions: {} # Conditional creation
Transform: {} # Macro processing
Resources: {} # AWS resources (REQUIRED)
Outputs: {} # Return values
Parameters
Parameters:
BucketName:
Type: String
Description: S3 bucket name
Default: my-bucket
MinLength: 3
MaxLength: 63
AllowedPattern: '^[a-z0-9-]+$'
Conditions
Conditions:
IsProduction: !Equals [!Ref Environment, prod]
ShouldEnableVersioning: !Equals [!Ref EnableVersioning, 'true']
Resources:
DataBucket:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: !If [ShouldEnableVersioning, Enabled, Suspended]
Outputs
Outputs:
BucketName:
Description: Name of the S3 bucket
Value: !Ref DataBucket
Export:
Name: !Sub '${AWS::StackName}-BucketName'
Mappings、Conditions、Parameters、スタック間参照の詳細については、references/advanced-configuration.mdを参照してください。
ベストプラクティス
- パブリックアクセスブロック:静的ウェブサイト用ではないバケットでは、常に有効にします
- バージョニング:誤削除を防ぐため、重要なデータでは有効にします
- バケットポリシー:アクセス制御には ACL の代わりに使用します
- ライフサイクルルール:ストレージクラスの階層化によってコストを最適化します
- 暗号化:デフォルトの暗号化(SSE-KMS または AES256)を有効にします
- タグ:整理とコスト配分のため、すべてのリソースにタグを付けます
- Outputs:スタック間参照用にバケット名/ARN をエクスポートします
- Parameters:環境間で再利用できるよう、パラメーターを使用します
よくあるトラブルシューティング
バケットがすでに存在する:CloudFormation スタック名を使って一意のバケット名を設定します
アクセスが拒否される:バケットポリシーと IAM 権限を確認します
バージョニングの競合:オブジェクトが存在する場合、バージョニングを一時停止できません
ライフサイクルが機能しない:ルールのステータスとプレフィックスフィルターを確認します
スタック間参照:インポートする前に Outputs がエクスポートされていることを確認します
関連スキル
- aws-cloudformation-security - S3 のセキュリティに関するベストプラクティス
- aws-cloudformation-lambda - S3 イベント用の Lambda トリガー
- aws-cloudformation-iam - S3 アクセス用の IAM ロール
参考資料
完全な例
- references/complete-examples.md - 基本的なバケット、バージョニング、ライフサイクル、CORS、ポリシー、本番環境向けスタック、イベント通知、静的ウェブサイト、レプリケーション
高度な設定
- references/advanced-configuration.md - パラメーター、マッピング、条件、出力、メタデータ、削除ポリシー、依存関係、変換
制約と警告
- バケット名:すべての AWS アカウント間でグローバルに一意である必要があります
- バージョニング:バケット内にオブジェクトが存在すると、一時停止できません
- ライフサイクルルール:有効期限は最短 1 日、移行は最短 0 日です
- バケットポリシー:サイズは 20 KB までです
- パブリックアクセス:デフォルトでブロックされており、明示的な設定が必要です
- CORS:バケットあたり最大 100 ルールです
- レプリケーション:ソースと宛先の両方でバージョニングを有効にする必要があります
- 暗号化:KMS キーはバケットと同じリージョンにある必要があります
- タグ:リソースあたり最大 50 個のタグです
- スタックの制限:CloudFormation ではスタックあたりのリソース数に上限があります(デフォルトは 200 個)