You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在docker compose中为LocalStack的SSM服务预配置参数

实现LocalStack SSM参数Docker Compose内置初始化的方案

方案1:挂载初始化脚本(推荐,易维护多参数)

该方案利用LocalStack官方提供的就绪后自动执行脚本的特性,适合参数较多、后续需要频繁调整参数的场景:

  • 首先在docker-compose.yml同级目录创建初始化目录及脚本:
    新建localstack_init/init_ssm.sh,内容如下:
    #!/bin/bash
    # 等待SSM服务完全启动
    until curl -s http://localhost:4566/health | grep '"ssm": "running"'; do
      sleep 1
    done
    
    # 批量添加SSM参数,可无限新增对应命令行
    aws --endpoint-url=http://localhost:4566 ssm put-parameter --name "/dev/some_key" --type String --value "value1" --overwrite --region "us-east-1"
    aws --endpoint-url=http://localhost:4566 ssm put-parameter --name "/dev/db_host" --type String --value "127.0.0.1" --overwrite --region "us-east-1"
    aws --endpoint-url=http://localhost:4566 ssm put-parameter --name "/prod/secret_key" --type SecureString --value "xxx" --overwrite --region "us-east-1"
    
  • 给脚本赋予可执行权限:
    chmod +x localstack_init/init_ssm.sh
  • 修改docker-compose.yml的volumes配置,挂载初始化目录:
    完整配置如下:
    version: "3.8"
    services:
      localstack:
        image: 'localstack/localstack'
        ports:
          - '4566:4566'
        environment:
          - SERVICES=lambda,ssm
          - DEBUG=1
          - DATA_DIR=${DATA_DIR- }
          - PORT_WEB_UI=${PORT_WEB_UI- }
          - LAMBDA_EXECUTOR=local
          - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
          - DOCKER_HOST=unix:///var/run/docker.sock
          - HOST_TMP_FOLDER=${TMPDIR}
        volumes:
          - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
          - "/var/run/docker.sock:/var/run/docker.sock"
          # 新增挂载初始化脚本目录
          - ./localstack_init:/etc/localstack/init/ready.d/
    
    启动后LocalStack会自动执行该目录下的所有可执行脚本,完成SSM参数初始化。

方案2:新增初始化Sidecar容器(无本地文件依赖)

如果不想额外维护本地脚本文件,可以直接在docker-compose中新增一个aws-cli服务作为初始化容器,配置如下:

version: "3.8"
services:
  localstack:
    image: 'localstack/localstack'
    ports:
      - '4566:4566'
    environment:
      - SERVICES=lambda,ssm
      - DEBUG=1
      - DATA_DIR=${DATA_DIR- }
      - PORT_WEB_UI=${PORT_WEB_UI- }
      - LAMBDA_EXECUTOR=local
      - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOST_TMP_FOLDER=${TMPDIR}
    volumes:
      - "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

  # 新增SSM初始化容器
  ssm-init:
    image: amazon/aws-cli
    depends_on:
      - localstack
    environment:
      - AWS_ACCESS_KEY_ID=test
      - AWS_SECRET_ACCESS_KEY=test
      - AWS_DEFAULT_REGION=us-east-1
    # 批量写入SSM参数,多个参数用&&连接即可
    command: >
      sh -c "
      until curl -s http://localstack:4566/health | grep '\"ssm\": \"running\"'; do sleep 1; done;
      aws --endpoint-url=http://localstack:4566 ssm put-parameter --name \"/dev/some_key\" --type String --value \"value\" --overwrite;
      aws --endpoint-url=http://localstack:4566 ssm put-parameter --name \"/dev/another_key\" --type String --value \"value2\" --overwrite;
      "

启动时执行docker compose up会自动启动两个服务,ssm-init执行完成后自动退出,SSM参数就已经写入LocalStack了。

注意事项

  • 容器内部访问LocalStack要使用服务名localstack作为域名,不要用localhost
  • 所有参数的region要和你实际使用的region保持一致
  • SecureString类型参数无需额外配置密钥,LocalStack默认会自动处理加密逻辑

内容的提问来源于stack exchange,提问作者Yoav Stern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:48:04