sinshutu_kibotuの日記

大体、大抵、大半、備忘録

terraformのbackendをs3にしてinitするまでの最低限の手順

概要

terraformのtfstateをs3で管理したいときの手順書です

terrformで使用するのユーザーの作成からterraform init するまでの手順をまとめました

手順

awsユーザーの追加

まず、はじめに、aws cliを使えるようにするためにユーザーを追加しましょう

AWSのコンソールからIAMを選択します、ユーザーを追加をクリック

  • 名前は適当にterraformerに設定
  • アクセスの種類は「プログラムによるアクセス」にチェック、コンソールへのログインはしないと思うのでチェックしません

f:id:sinshutu_kibotu:20180714135652p:plain

次に、必要な権限をアタッチします。 s3へアクセスする権限が必要なので AmazonS3FullAccess権限 をアタッチします

f:id:sinshutu_kibotu:20180714135903p:plain

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:

AWS CLIのインストールから初期設定メモ

53ningen.com