たいきゅんの日記

ITエンジニアの積み上げ日記

terraform基礎 -Dockerで環境構築とS3バケットを作成-

今回はterraformをDockerで環境構築し、簡単なS3バケットの操作を紹介したいと思います。
「Terraformに入門してみた」という記事も作成しておりますので、良ければ併せて読んでください。
taikyunn-blog.hatenablog.com

環境構築

まずは環境構築からです。
TerraformのDocker imageが公開されているためこちらを使用します。
一つのコンテナだけですが、楽なのでdocker-compose.ymlを使用しています。

docker-compose.yml

version: '3'
services:
  terraform:
    container_name: terraform
    image: hashicorp/terraform:latest
    volumes:
      - .:/terraform
      - ~/.aws:/root/.aws
    working_dir: /terraform/terraform
    entrypoint: ash
    tty: true

TerraformでAWSのリソースを構築する場合、AWSへアクセスができるcredentials情報が必要となります。
今回は~/.aws 配下にcredentials情報が保存されていることを前提として作成しました。
もしご自身のPCのAWS credentialsが別のフォルダーに設定してある場合はそちらに適宜変更していただければと思います。

envファイルを使用してcredentialsを直書きしてgitignoreする方法もありますが、
もしものことがあるためこちらの方がいいかもしれません。

この状態で docker compose up -d --build をしていただくとコンテナが立ち上がるはずです。

S3バケットを作成しよう

S3バケットの作成に関してです。
基本的には公式Docの通りにコーディングすれば作成することができます。
Terraformはバージョンアップするごとに記法が変わったりするので、バージョン情報には注意してください。

公式Doc
registry.terraform.io

main.tfを作成

Terraformを作成する上ではmain.tfファイルが必要でないとエラーになるので注意してください。
main.tfはterraform/terraformフォルダ内に作成してください。

main.tf

# AWSを使用する宣言
provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_s3_bucket" "b" {
  bucket = "test-bucket"
  acl    = "private"

  # バージョニング設定
  versioning {
    enabled = true
  }

  # デフォルトの暗号化
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
}

こちらがterraformの初期設定とS3バケットの作成をするtfファイルです。
コメントを記載していますが、詳細は公式Docを参照してください。

リソースの作成

ファイルが作成できたら、terraformを使用するためのセットアップコマンドを実行します。

docker compose exec terraform terraform init

こちらが正常に実行されると自動生成ファイルが作成されます。

次にterraform planを実行し、terraformが実行できるかチェックします。

docker compose exec terraform terraform plan

文法エラーがある場合はエラーが表示されますが、ない場合は下記のように表示されるはずです。

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.

上記が表示されたらあとは構築するのみですが、、コードの整形を行ってからにしましょう。

// 整形
docker compose exec terraform terraform fmt
// リソースの作成
docker compose exec terraform terraform apply

リソースの破棄

terraform apply時実行確認がされると思いますので、yes と入力してください。
コマンドが完了すると、S3バケット(バケット名:test-bucket)が作成されるはずです。

リソースを廃棄したい場合は、terraform destroyコマンドを実行すれば自動的に廃棄されます。

// 整形
docker compose exec terraform terraform destroy

まとめ

私はterraformが初めて使用したIaCツールだったのですができた時思った以上に簡単でかつ少しプログラミングができるようになった気がして感動しました!
AWSで手動で構築していると裏側で自動的に構築してくれている時があると思いますが、IaCツールを使用することで自動構築してくれていた箇所を意識することが必要になりさらに理解が深まると思います。
使ったことない方は是非使ってリソース構築を簡単にして欲しいです。導入ハードルは思った以上に高くないと思います!
最後まで読んでいただきありがとうございました!