Terraform 12对接LocalStack执行apply操作长时间卡住问题求助
问题原因
- 端口配置不兼容:你使用的
latest版本LocalStack已经废弃了各服务独立端口的设计,改为所有服务统一监听4566端口,你配置里写的4569(DynamoDB)、4574(Lambda)都是v0.14之前版本的旧端口,最新镜像不会监听这些端口,导致Terraform的创建请求无响应,一直处于等待状态。 - 区域配置不一致:LocalStack环境变量里设置的
DEFAULT_REGION=ap-southeast-2,但Terraform AWS provider里指定的region = "us-east-1",区域不匹配会导致资源校验失败,进一步加重卡住问题。 - 可选异常:如果你的Docker环境没有提前创建
localstack-tutorial网络,LocalStack启动时会报错,也会导致服务不可用。
解决办法
方案一(推荐:适配新版LocalStack)
- 修改docker-compose.yml配置:
version: '3.8' services: localstack: image: localstack/localstack:latest ports: - 8080:8080 # webui - 4566:4566 # 统一服务端口 environment: - DATA_DIR=/tmp/localstack/data - DEBUG=1 - DEFAULT_REGION=ap-southeast-2 - DOCKER_HOST=unix:///var/run/docker.sock - LAMBDA_EXECUTOR=docker-reuse - SERVICES=lambda,dynamodb volumes: - /var/run/docker.sock:/var/run/docker.sock
- 修改Terraform配置:
provider "aws" { access_key = "mock_access_key" region = "ap-southeast-2" # 和LocalStack的默认区域保持一致 s3_force_path_style = true secret_key = "mock_secret_key" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true endpoints { dynamodb = "http://localhost:4566" # 改用统一端口 lambda = "http://localhost:4566" # 改用统一端口 } } resource "aws_dynamodb_table" "table_1" { name = "table_1" read_capacity = "20" write_capacity = "20" hash_key = "id" attribute { name = "id" type = "S" } # 可选:添加超时配置避免无限等待 timeouts { create = "1m" } }
- 执行验证步骤:
- 先停止并删除旧的LocalStack容器:
docker-compose down -v - 启动新的LocalStack容器:
docker-compose up -d - 等待10秒后验证服务正常:
curl http://localhost:4566/health,确认返回中dynamodb的状态为running - 清除Terraform旧状态:
terraform destroy --auto-approve - 重新执行应用:
terraform apply --auto-approve
方案二(兼容旧端口配置)
如果你不想修改端口配置,直接把LocalStack镜像降级到支持独立端口的旧版本即可:
把docker-compose里的镜像改为localstack/localstack:0.12.18,重启容器后重新执行Terraform操作即可。
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

