ローカル環境でお手軽Terraform入門 (LocalStack)
LocalStackは、ローカルで実行可能なAWSサービスエミュレータです。
慣れないユーザが実際のAWS環境でTerraformを試すのは意図せぬコスト発生等のリスクからハードルが高いため、LocalStackを用いてローカル環境で完結させます。
LocalStackを起動する
以下のいずれかの方法で起動してください。すべての場合において事前にDocker環境が構築されている必要があります。
1. Dockerコンテナを直接起動する
docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack
参考:
2. LocalStack CLIを使用する
↓のインストールガイドに従って導入します。
以下のコマンドで起動します。
localstack start
3. LocalStack Desktopを使用する
LocalStackにサインアップします。
サインアップ後の画面でDownload Desktopを選択します。(左下あたりにリンクがあります。)
インストール後、LocalStack Desktopからコンテナを起動します。
awslocalコマンドを試す
起動したコンテナ名を確認します。
docker ps
コンテナ内でbashコマンドを実行します。
docker exec -it コンテナ名 bash
上記コマンドを実行後、以下を実行します。
コンテナ内ではawslocalコマンドが使用可能になっています。
awslocal s3 ls
Terraformをインストールする
1. tenvを用いてTerraformをインストールする (推奨)
tenvは、Terraformで利用可能なバージョンマネージャーです。Terraform以外にもOpenTofu,Terragrunt,Terramate,Atmosに対応しています。
↓のインストールガイドに従って導入します。
2. Terraformを直接インストールする
↓のインストールガイドに従って導入します。
インストーラの確認
terraformコマンドを実行し、Terraformが正しくインストールされていることを確認します。
terraform -v
Terraformを用いてリソースを定義する
main.tfとprovider.tfを作成します。
今回はシンプルにS3バケット一つを作成します。
LocalStackを使用する際の注意点として、awsプロバイダの設定において以下が必要です。
skip_credentials_validation = true
skip_requesting_account_id = true
s3_use_path_style = true
endpoints {
s3 = "http://localhost:4566"
}
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-localstack-bucket"
}
# Enable versioning for the bucket
resource "aws_s3_bucket_versioning" "my_bucket_versioning" {
bucket = aws_s3_bucket.my_bucket.id
versioning_configuration {
status = "Enabled"
}
}
# Configure bucket to prevent public access
resource "aws_s3_bucket_public_access_block" "my_bucket_public_access_block" {
bucket = aws_s3_bucket.my_bucket.id
}
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
access_key = "sample"
secret_key = "sample"
skip_credentials_validation = true
skip_requesting_account_id = true
s3_use_path_style = true
endpoints {
s3 = "http://localhost:4566"
}
}
リソースを更新する
以下を順に実行します。
terraform initコマンドは、Terraformのワーキングディレクトリを初期化するものです。
terraform init
terraform planコマンドは、terraform applyで適用される変更をプレビューします。この時点ではリソースに変更は加えられません。
terraform plan
terraform applyコマンドで実際にリソースを更新します。
terraform apply
まとめ
LocalStackが動いているコンテナ内で以下を実行して、実際にS3バケットが作成されていることを確認します。
awslocal s3 ls
以上になります。
LocalStackを用いてローカル環境でaws環境をエミュレートし、Terraformを用いてS3バケットを定義・作成しました。
今回使用したコードは以下で公開しています。
フォロー、X(Twitter)フォローもよろしくお願いいたします。
Discussion