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側設定)