サイトアイコン 協栄情報ブログ

TerraformでS3バケットを作成

今回はS3バケット作成するTerraformコードを紹介します。
※main.tfのみで完結

 

Terraformの基本的な使い方については、以下の記事をご参考にいただければと思います。
Terraform の基本的な使用方法について調べてみた
 

必要条件

・Terraformがインストールされていること
・AWS CLIで認証済みのプロファイルが設定されていること(例: ~/.aws/credentials)

 

■ Terraformコード


# AWSプロバイダーの設定
provider "aws" {
  region = "ap-northeast-1" # 使用するリージョンを指定
}

# 普通のS3バケットを作成
resource "aws_s3_bucket" "normal_bucket" {
  bucket        = "your-unique-bucket-name" # バケット名を指定(ユニークである必要があります)
  force_destroy = false         # バケット削除時に中身を削除しない設定
  lifecycle {
    ignore_changes = all        # 既存の変更を無視する設定
  }
}

# バージョニングを有効化
resource "aws_s3_bucket_versioning" "normal_bucket_versioning" {
  bucket = aws_s3_bucket.normal_bucket.id
  versioning_configuration {
    status = "Enabled"          # バージョニングを有効化
  }
  lifecycle {
    ignore_changes = all
  }
}

# サーバーサイド暗号化の設定
resource "aws_s3_bucket_server_side_encryption_configuration" "normal_bucket_encryption" {
  bucket = aws_s3_bucket.normal_bucket.bucket

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"  # AES256アルゴリズムを使用
    }
  }
  lifecycle {
    ignore_changes = all
  }
}

# バケットのオーナーシップ設定
resource "aws_s3_bucket_ownership_controls" "normal_bucket_ownership_controls" {
  bucket = aws_s3_bucket.normal_bucket.bucket
  rule {
    object_ownership = "ObjectWriter" # バケットオブジェクトの所有権を指定
  }
  lifecycle {
    ignore_changes = all
  }
}

# アクセス制御リスト (ACL) 設定
resource "aws_s3_bucket_acl" "normal_bucket_acl" {
  depends_on = [aws_s3_bucket_ownership_controls.normal_bucket_ownership_controls]
  bucket     = aws_s3_bucket.normal_bucket.id
  acl        = "private"  # 普通のプライベートバケットに設定
  lifecycle {
    ignore_changes = all
  }
}

# パブリックアクセスブロック設定
resource "aws_s3_bucket_public_access_block" "normal_bucket_public_access_block" {
  bucket                  = aws_s3_bucket.normal_bucket.id
  block_public_acls       = true    # パブリックACLをブロック
  block_public_policy     = true    # パブリックポリシーをブロック
  ignore_public_acls      = true    # パブリックACLを無視
  restrict_public_buckets = true    # パブリックバケットを制限
  lifecycle {
    ignore_changes = all
  }
}

■ Terraform 実行手順

  1. 初期化
    コードを実行するディレクトリで以下のコマンドを実行します。
    terraform init

  2. プラン確認
    実際に作成されるリソースを確認するコマンドを実行します。
    terraform plan

  3. リソース作成
    リソースを作成するコマンドを実行します。
    terraform apply

 

■ 注意事項

・バケット名について
S3バケット名はAWS全体でユニークである必要があるため、test-bucket をそのまま使用する場合はエラーになる可能性があります。自身のプロジェクトに応じた適切な名前を指定してください。

・ローカル環境以外のAWSアカウントで使用する場合
使用するアカウントの権限設定やプロバイダー設定を適切に行ってください。
 

最後に

今回紹介したコードを活用して、TerraformでS3バケットの作成をぜひ試してみてください。

モバイルバージョンを終了