从参数存储区访问SSM参数

时间:2018-08-06 13:14:06

标签: amazon-web-services aws-lambda aws-sam-cli aws-ssm

我有SAM模板,该模板部署了几个lambda,并且我想使用在SSM参数存储区中创建的一些参数。

我为测试创建了2个参数:

  • /test/param,这是一个简单的字符串
  • /test/param/encrypt包含与/test/param相同的字符串,但已通过KMS密钥加密

在我的SAM模板中,我试图通过遵循this blog post来获取/test/params的值。这是我的模板的摘要:

Parameters:
  AuthPasswordPublic:
    Type: AWS::SSM::Parameter::Value<String>
    NoEcho: true
    MinLength: 8
    Description: Password for the "public" part of the website
    Default: /test/param

...

Resources:
  Auth:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: nodejs8.10
      Handler: auth.handler
      CodeUri: ./dist
      Environment:
        Variables:
          PASSWORD_PUBLIC: !Ref AuthPasswordPublic
          SEED: !Ref AuthSeed
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /auth
            Method: post

从理论上讲,这在部署到AWS时应该可以工作。但是,我想先在本地进行测试。我已经aws-sam-local,并且可以使用AWS CLI在本地计算机上正确配置了我的凭据。但是在本地运行时,envvar PASSWORD_PUBLIC的值为空。我测试了两个纯文本加密的SSM参数,但结果相同。

我会怀疑aws-sam-cli尚不支持SSM参数,但无法在线或在GitHub Issues / PR上找到有关该参数的任何信息。对这里发生的事情有任何想法吗?

1 个答案:

答案 0 :(得分:1)

aws-sam-cli使用docker-lambda容器,该容器根据docs创建:

  

一个沙盒本地环境,几乎完全复制了实时AWS Lambda环境...

这意味着不会在docker容器内重新创建诸如AWS SSM之类的组件。您可以查看公开的Github问题here

因此,您可能不得不诉诸于从主机(已配置aws cli)中检索SSM参数,并在调用sam-cli时将它们传递到容器中:

PASSWORD_PUBLIC=$(aws ssm get-parameter --with-decryption --name "/test/param/encrypt") sam local start-api