我有多个 Java spring boot 服务(其中大约 20 个)使用 Amazon SDKs for S3、SQS、DynamoDB 等。
目前,要使用 Amazon Web Service,我只需要指定我的 AWS 密钥和密钥。
ACCESS_AWS_KEY=<MY_KEY>
ACCESS_AWS_SECRET=<MY_SECRET>
但是,我想设置离线开发环境,所以我开始对我的服务进行 docker 化,并设置一个单一的多 docker 容器,其中我的所有服务都已 docker 化,并且应该使用localstack而不是远程 AWS 服务,以允许完整的离线开发。
docker-compose.yml 看起来像这样
version: '3'
services:
service_1:
build: ./repos/service_1
links:
- service_2:
- localstack
service_2:
build: ./repos/service_2
links:
- localstack
service_3:
build: ./repos/service_3
links:
- localstack
localstack:
image: localstack/localstack
Amazon SDK 提供 AWS_REGION 环境变量,但不是我可以在所有服务中轻松使用的端点环境变量。
我也不想在我的服务中进行代码更改以适应新的非默认端点。
我想要一个通用的解决方案来转发这样的请求:
dynamodb.eu-west-1.amazonaws.com => localstack_1:4569
s3-eu-west-1.amazonaws.com => localstack_1:4572
其中localstack_1是 localstack 的链接 docker 容器,其他容器可以访问。
我在 docker-compose 中遇到了extra_hosts:,但它只重定向到 IP 并且没有主机名解析。
另外,请注意我在 localstack 中暴露了从 4569 到 4582 的几十个端口。
我想过在每台机器上运行一个脚本,以某种方式设置一个虚拟主机,或者将所有容器的所有传出连接转发到一个集中的请求转发器服务,但不知道从哪里开始。
这将仅用作离线开发环境,不会接收任何实际流量。