TerraformでS3バケットを作成する。
作成対象
今回は簡単な例でいこうと思います。
- バケットの作成
- パブリックアクセスの拒否
フォルダ構成等は若干変わりますが、githubはこちらです。
https://github.com/Teshima-Tatsuya/terraform-s3-sample
事前準備
フォルダ構成はこんな感じです。
.├── terraform.tf├── main.tf└── modules └── s3 ├── aws_s3_bucket.tf ├── aws_s3_account_public_access_block.tf └── aws_s3_bucket_public_access_block.tf
まずは、terraformの基本的な設定から。
terraformのバージョンは0.15以降であればOKです。
awsプロバイダバージョンは3.44以上を指定しています。(これよりも前のバージョンでもおそらく大丈夫です。)
terraform { required_version = ">= 0.15"
required_providers { aws = ">=3.44.0" }}
provider "aws" { region = "ap-northeast-1" profile = "terraform"}
profile
をterraform
にしているので、事前に~/.aws/credentials
に以下を設定しておきましょう。
事前にIAMでユーザを作成するのも忘れずに。
[terraform]aws_access_key_id = YOUR_ACCESS_KEYaws_secret_access_key = YOUR_SECRET_ACCESS_KEY
S3バケットの作成
terraformでS3バケットを作成します。
今回はmoduleとして作成します。
こうすることで再利用性があがります。
module "s3" { source = "./modules/s3"}
S3のbucket名は全世界でユニークである必要があるので、注意しましょう。
resource "aws_s3_bucket" "this" { bucket = "teshima-sample-bucket"
tags = { Name = "sample" }}
次にパブリックアクセスをブロックする設定
resource "aws_s3_bucket_public_access_block" "this" { bucket = aws_s3_bucket.this.bucket block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true}
resource "aws_s3_account_public_access_block" "this" { block_public_acls = false block_public_policy = false}
AWS環境へ反映
以下のコマンドを打ち、AWS環境に反映しましょう。
planの内容を確認し、問題なければapply
terraform planterraform apply
結果確認
以下のような感じになっていると思います。
終わり