Terraformをローカル環境(docker + localstack)で実行する方法

Terraformをローカル環境(docker + localstack)で実行する方法

Terraformって便利ですよね。
そしてローカル環境でplanやapply試したいときありますよね。
そんな時の備忘録です。

手順

1. dockerでlocalstack環境を構築する。

□ docker-compose.ymlに下記を記載

version: "3.3"

services:
localstack:
container_name: localstack
image: localstack/localstack
ports:
- "127.0.0.1:4566:4566"
- "127.0.0.1:4510-4559:4510-4559"
environment:
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "./docker/docker.sock:/var/run/docker.sock"

2. dockerを起動する

$ docker-compose up

3. terraformを実装する

□ その際、向き先をlocalにする

main.tfで下記のような指定を行う。



terraform {
  required_version = ">= 1.5.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.6"
    }
  }

  backend "local" {}
}

provider "aws" {
  region     = "ap-northeast-1"
  access_key = "dummy"
  secret_key = "dummy"

  s3_use_path_style           = true
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    s3  = "http://localhost:4566"
    ec2 = "http://localhost:4566"
    # 各サービスごとに必要
  }
}

module "s3" {
  source = "../../modules/s3"
  prefix = var.prefix
}

ポイントはbackend “local”の設定とエンドポイントの設定。
ここを先ほど構築したlocalstackのを指定することで、ローカル環境に構築できる。

4. terraformを実行する

$ terraform init
$ terraform plan
$ terraform apply

5. 構築された内容を確認する

$ sudo docker exec -it {コンテナID} awslocal s3 ls

上記の例では、S3にバケットが作成されていればおk

6. コマンド簡略化
下記のawscli-localをインストールしておくことで、エンドポイントの指定不要でawsコマンドが実行できる。

$ pip install awscli-local
$ awslocal s3 ls

最後に

手順は以上です。細かいS3のterraformコードとかは省いているので、そこは各々作成してください。

こちらの記事もどうぞ

herokuの利用方法
Node.jsからHeroku Postgresを利用する方法
LineBot開発 その1(LINE側設定)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください