0

我有 SAM 模板,它部署了一些 lambda,我想使用我在 SSM 参数存储中创建的一些参数。

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

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

在我的 SAM 模板中,我试图/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 问题/公关的信息。关于这里发生了什么的任何想法?

4

1 回答 1

1

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

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

这意味着不会在 docker 容器中重新创建 AWS SSM 等组件。你可以在这里查看开放的 Github 问题。

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

PASSWORD_PUBLIC=$(aws ssm get-parameter --with-decryption --name "/test/param/encrypt") sam local start-api
于 2018-08-18T15:06:46.750 回答