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"
}

profileterraformにしているので、事前に~/.aws/credentialsに以下を設定しておきましょう。
事前にIAMでユーザを作成するのも忘れずに。

[terraform]
aws_access_key_id = YOUR_ACCESS_KEY
aws_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

Terminal window
terraform plan
terraform apply

結果確認

以下のような感じになっていると思います。

終わり