今回は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 実行手順
-
初期化
コードを実行するディレクトリで以下のコマンドを実行します。
terraform init
-
プラン確認
実際に作成されるリソースを確認するコマンドを実行します。
terraform plan
-
リソース作成
リソースを作成するコマンドを実行します。
terraform apply
■ 注意事項
・バケット名について
S3バケット名はAWS全体でユニークである必要があるため、test-bucket をそのまま使用する場合はエラーになる可能性があります。自身のプロジェクトに応じた適切な名前を指定してください。
・ローカル環境以外のAWSアカウントで使用する場合
使用するアカウントの権限設定やプロバイダー設定を適切に行ってください。
最後に
今回紹介したコードを活用して、TerraformでS3バケットの作成をぜひ試してみてください。