パーソル&サーバーワークス

ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Terraform】バックエンド設定でDynamoDBを使わずにS3のみで実装

この記事を共有する

目次

はじめに

皆さんこんにちは!サービスGの榎本です。

今まではTerraformのバックエンド設定でロック機能を実装したい時はS3とDynamoDBの両方を使う必要がありましたが、Terraformのバージョン1.10.xからDynamoDBを使わずにS3のみで実装できるようになりました。
今回はハンズオンを通してS3のみのバックエンド設定を試してみました。

前提

  • Terraform開発環境は構築済みであること
  • 開発環境にインストールされているterraformのバージョンが1.10.x以降であること
  • バックエンド設定先のS3バケットが構築済みであること(例:terraform-handson-s3-backend)
    • ※: S3バケット名は一意である必要があるため、上記の例とは異なるバケット名で作成ください

  • ディレクトリはterraform-handson/を使用し、main.tfファイルとterraform.tfstateファイル作成済みであること
    • ※terraform-tfstateファイルは一度terraform applyコマンドを実行すると自動作成される

  • 東京リージョンのS3を利用すること

目的

バックエンドでS3のみを使用してロック機能を実装し、複数人での作業時に競合を防ぐ設定を実装できるようになること。

手順

1. terraform-handson/s3backendを作成して同フォルダに移動し、配下にbackend.tfファイルを作成する

# ディレクトリ作成
mkdir -p terraform-handson/s3backend
# ディレクトリ移動
cd terraform-handson/s3backend
# バックエンド設定用ファイル作成
touch backend.tf

2. backend.tfファイルに以下内容を記載する
※use_lockfileをtrueにすることで、DynamoDBを使用せずにterraform.tfstateファイルをロックして複数人での作業時の競合を防ぐことができます。

terraform {
  backend "s3" {
    bucket       = "terraform-handson-s3-backend" #ご自身で作成したS3バケット名に置き換えてください
    key          = "terraform.tfstate"
    region       = "ap-northeast-1"
    encrypt      = true
    use_lockfile = true # 本設定にてS3のみでロックが可能
  }
}

3. 以下コマンドを順番に実行する
※terraform apply実行後にyesは実行しないでください。

terraform init
terraform plan
terraform apply
# yesはまだ実行しないでください

4. マネジメントコンソールを開き、S3コンソールからterraform-handson-s3-backendバケットの中身を確認し、terraform.tfstate.tflockファイルが作成されていることを確認する

5. 手順3でコマンドを実行したセッションとは別のセッションを開き、以下コマンドで同ディレクトリに移動し、手順3と同様に以下コマンドを実行してエラーが表示されることを確認する
※terraform planやterraform apply実行後にエラーが表示されることを確認できれば、S3のみでロック機能が有効化できており、競合を防ぐことができていることになります。

# ディレクトリ移動
cd terraform-handson/s3backend
terraform init
# エラーが表示されることを確認してください
terraform apply

6. 手順3で保留にしていたterraform apply後のyesを入力し、terraform.tfstate.tflockファイルがS3から削除されていることを確認する
※terraform.tfstate.tflockが削除され、terraform.tfstateのみになっていることが確認できました

まとめ

S3のみでロック設定ができるようになったことで、設定へのハードルが低くなったと思います。
複数人で同じterraform.tfstateファイルを参照して競合を防ぐ必要がある際はuse_lockfileを有効にすることを検討して本記事を見ながら設定してみてください。

参考

https://developer.hashicorp.com/terraform/language/state/locking

https://zenn.dev/terraform_jp/articles/terraform-s3-state-lock

この記事は私が書きました

榎本 将希

2024 Japan AWS All Certifications Engineers   サッカー観戦とサウナが好きです!   機械学習を勉強中です!

榎本 将希

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。