terraformでS3バケットを作成する。

作成対象

今回は簡単な例でいこうと思います。

  • バケットの作成
  • パブリックアクセスの拒否

フォルダ構成等は若干変わりますが、githubはこちらです。

Teshima-Tatsuya/terraform-s3-sample
terraform-s3-sample. Contribute to Teshima-Tatsuya/terraform-s3-sample development by creating an account on GitHub.

事前準備

フォルダ構成はこんな感じです。

.
├── 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_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

terraform plan
terraform apply

結果確認

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

終わり

コメント