Open4

LocalStack & Terraform まとめ

yo-orangeyo-orange

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"
    }
    
yo-orangeyo-orange

Terraform on Mac

以下の通りに実施して、バージョンチェックまで実施。

参考

brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform version
yo-orangeyo-orange

とりあえず、Terraform with LocalStackでEC2の操作を試す

以下の手順のManual Configurationで、AWS Providerの設定を入れる
https://docs.localstack.cloud/user-guide/integrations/terraform/

こんな感じの定義ファイルを作成した(一部、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