Open4
LocalStack & Terraform まとめ
LocalStackとdocker環境
- 手元のMac BookAirではRancher Desktopをインストールしていたので、それを活用。Rancher Desktopを起動して、dockerが起動していることを確認
docker -v # Docker version 25.0.4-rd, build c4cd0a9
- Rancher Desktopではリソース食ってそうなので、いつかはOrbStackも試してみたい。
- LocalStackの起動にはDocker-composeを使う
- インストール
- 上記のStarting LocalStack with Docker-Compose
- composeファイルを見ると、socketをマウントするはずだが、Rancher Desktopだとそれ(/var/run/docker.sock)は存在しない
-
StackOvervflowのこちらを実施する
- 確かに以下のコマンドで確認すると存在した
ls -l ~/.rd/docker.sock
- 確かに以下のコマンドで確認すると存在した
- 上記のdocker-compose.ymlとStackOverflowによる対処で、無事にLocalStackのコンテナは起動して、基本的なサービスは起動している
$ curl localhost:4566/_localstack/health -s | jq { "services": { "acm": "available", "apigateway": "available", "cloudformation": "available", "cloudwatch": "available", "config": "available", "dynamodb": "available", "dynamodbstreams": "available", "ec2": "available", "es": "available", "events": "available", "firehose": "available", "iam": "available", "kinesis": "available", "kms": "available", "lambda": "available", "logs": "available", "opensearch": "available", "redshift": "available", "resource-groups": "available", "resourcegroupstaggingapi": "available", "route53": "available", "route53resolver": "available", "s3": "available", "s3control": "available", "scheduler": "available", "secretsmanager": "available", "ses": "available", "sns": "available", "sqs": "available", "ssm": "available", "stepfunctions": "available", "sts": "available", "support": "available", "swf": "available", "transcribe": "available" }, "edition": "community", "version": "3.8.2.dev72" }
Terraform on Mac
以下の通りに実施して、バージョンチェックまで実施。
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform version
とりあえず、Terraform with LocalStackでEC2の操作を試す
以下の手順のManual Configurationで、AWS Providerの設定を入れる
こんな感じの定義ファイルを作成した(一部、GitHub Copilotにより生成)
provider "aws" {
access_key = "test"
secret_key = "test"
region = "us-east-1"
# only required for non virtual hosted-style endpoint use case.
# https://registry.terraform.io/providers/hashicorp/aws/latest/docs#s3_use_path_style
s3_use_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
ec2 = "http://localhost:4566"
}
}
resource "aws_instance" "example" {
ami = "ami-12345678"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
output "instance_id" {
value = aws_instance.example.id
}
以下のコマンドで実際にリソースを作成する
terraform init # Providerのインストールが実行される
terraform plan
terraform apply # -> yes
terraform output
terraform state list aws_instance.example
作ったリソースを消す
terraform plan --destroy
terraform destroy # -> yes