概要
terraformのtfstateをs3で管理したいときの手順書です
terrformで使用するのユーザーの作成からterraform init
するまでの手順をまとめました
手順
awsユーザーの追加
まず、はじめに、aws cliを使えるようにするためにユーザーを追加しましょう
AWSのコンソールからIAMを選択します、ユーザーを追加をクリック
- 名前は適当にterraformerに設定
- アクセスの種類は「プログラムによるアクセス」にチェック、コンソールへのログインはしないと思うのでチェックしません
次に、必要な権限をアタッチします。 s3へアクセスする権限が必要なので AmazonS3FullAccess権限 をアタッチします
FullAccessでは権限範囲が大きいので、制限を強めにしたい場合は以下の公式URLを参考に権限を割り当ててください
Backend Type: s3 - Terraform by HashiCorp
アクセスキーの取得
ユーザーの作成に成功すると、アクセスキー ID、シークレットアクセスキー の2つが表示されるのでそれを .aws/credentials へ書き込みます
また、[terraform] と表記している部分がprofile名になり、aws --profile profile名
で呼び出すことで複数のアカウントを使うことができます
[terraformer] region = ap-northeast-1 aws_access_key_id = XXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXX
次に、credentials が正常に追加されたことを確認します
$ aws s3 ls --profile terraformer
とくにエラーにならなければ大丈夫です
main.tfの作成
次に実際に実行するtfファイルを作成します
providerの設定
- awsを設定
- regionはアジアプシフィック(東京)
- provider-awsのモジュールのバージョンも指定できるので1.25.0に固定します
- profileは先ほど設定したterrformerを指定します、これでmain.tfファイル内にアクセストークンを書き込まずに済みます
terraformの設定
- versonを0.11.7を指定
- backendにs3を設定、このときのkeyにしてしたファイル名でバケットにアップロードされます
resourceにs3バケットを追加
完成したmain.tfが以下になります
# main.tfファイル provider "aws" { region = "ap-northeast-1" profile = "terraformer" version = "1.25.0" } terraform { required_version = "0.11.7" backend "s3" { bucket = "hoge-tfstate" region = "ap-northeast-1" profile = "terrformer" key = "terraform.tfstate" encrypt = true } } resource "aws_s3_bucket" "tfstate" { bucket = "hoge-tfstate" versioning { enabled = true } }
terraformの初期化処理
$ terraform init
「Terraform has been successfully initialized!」と表示されていれば成功です、上記のコマンドでs3のバケットの作成から保存までやってくれます
最後にawsコンソールへログインして、s3バケットにtfstateが保存されていることを確認しましょう
以上の手順でtfstateをs3に保存する手順は終わりになります
参考URL: