mcpField
A
aws-cloudformation-s3

aws-cloudformation-s3

github.com/giuseppe-trisciuoglioクラウド・DevOps36567 回インストール7 週間前に更新
リポジトリ

aws-cloudformation-s3 について

CloudFormation で Amazon S3 を管理する開発者向けのスキルです。バケット設定、ポリシー、バージョニング、ライフサイクルルール、再利用可能なテンプレート構成を扱います。

主な機能

  1. 01S3 バケットプロパティの設定
  2. 02バケットポリシーとアクセス制御の設定
  3. 03バージョニングとライフサイクルルールの設定
  4. 04CORS とクロススタック出力の設定
  5. 05テンプレートの検証とデプロイ

活用シーン

  1. 01暗号化とバージョニング付きバケットの作成
  2. 02ポリシーによるバケットアクセス制御
  3. 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.md
complete-examples.md
examples.md
reference.md

詳細

AWS CloudFormation S3 パターン

本番環境に対応したインフラストラクチャ向けに、S3 バケットの設定、ポリシー、バージョニング、ライフサイクルルール、および CloudFormation テンプレート構成のベストプラクティスを提供します。

使用する場面

  • カスタム設定で S3 バケットを作成する
  • アクセス制御用のバケットポリシーを実装する
  • データ保護のために S3 バージョニングを設定する
  • データ管理用のライフサイクルルールを設定する
  • スタック間参照用の Outputs を作成する
  • AWS 固有の型を持つ Parameters を使用する
  • Mappings と Conditions を使用してテンプレートを整理する

概要

本番環境に対応したインフラストラクチャ向けに、S3 バケットの設定、ポリシー、バージョニング、ライフサイクルルール、および CloudFormation テンプレート構成を提供します。

手順

  1. バケットリソースを定義する:バージョニング、暗号化、PublicAccessBlock を設定した AWS::S3::Bucket を作成します
  2. バケットポリシーを設定する:アクセス制御用の IAM ポリシーを設定します
  3. ライフサイクルルールを設定する:移行と有効期限のポリシーを定義します
  4. CORS を設定する:必要に応じてクロスオリジンリクエストを許可します
  5. 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::BucketS3 バケットを作成する
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を参照してください。

ベストプラクティス

  1. パブリックアクセスブロック:静的ウェブサイト用ではないバケットでは、常に有効にします
  2. バージョニング:誤削除を防ぐため、重要なデータでは有効にします
  3. バケットポリシー:アクセス制御には ACL の代わりに使用します
  4. ライフサイクルルール:ストレージクラスの階層化によってコストを最適化します
  5. 暗号化:デフォルトの暗号化(SSE-KMS または AES256)を有効にします
  6. タグ:整理とコスト配分のため、すべてのリソースにタグを付けます
  7. Outputs:スタック間参照用にバケット名/ARN をエクスポートします
  8. Parameters:環境間で再利用できるよう、パラメーターを使用します

よくあるトラブルシューティング

バケットがすでに存在する:CloudFormation スタック名を使って一意のバケット名を設定します
アクセスが拒否される:バケットポリシーと IAM 権限を確認します
バージョニングの競合:オブジェクトが存在する場合、バージョニングを一時停止できません
ライフサイクルが機能しない:ルールのステータスとプレフィックスフィルターを確認します
スタック間参照:インポートする前に Outputs がエクスポートされていることを確認します

関連スキル

参考資料

完全な例
  • references/complete-examples.md - 基本的なバケット、バージョニング、ライフサイクル、CORS、ポリシー、本番環境向けスタック、イベント通知、静的ウェブサイト、レプリケーション
高度な設定

制約と警告

  • バケット名:すべての AWS アカウント間でグローバルに一意である必要があります
  • バージョニング:バケット内にオブジェクトが存在すると、一時停止できません
  • ライフサイクルルール:有効期限は最短 1 日、移行は最短 0 日です
  • バケットポリシー:サイズは 20 KB までです
  • パブリックアクセス:デフォルトでブロックされており、明示的な設定が必要です
  • CORS:バケットあたり最大 100 ルールです
  • レプリケーション:ソースと宛先の両方でバージョニングを有効にする必要があります
  • 暗号化:KMS キーはバケットと同じリージョンにある必要があります
  • タグ:リソースあたり最大 50 個のタグです
  • スタックの制限:CloudFormation ではスタックあたりのリソース数に上限があります(デフォルトは 200 個)

コメント