【问题标题】:Invalid Layer Arn Error when using ARN value from SSM parameters使用 SSM 参数中的 ARN 值时出现无效的层 Arn 错误
【发布时间】:2021-12-10 07:52:55
【问题描述】:

Lambda 层 ARN 存储在 SSM 参数中,在定义函数并将层附加到它时,需要访问此参数的值以作为层 arn。

错误:SayHelloLayerARN 是无效的层 ARN。

参数存储中的参数名称:SayHelloLayerARN

这是 SAM 模板:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  CREATE-WITH-SSM

  Sample SAM Template for CREATE-WITH-SSM

Parameters:
  HelloLayerARN:
    Type: AWS::SSM::Parameter::Value<String>
    Default: SayHelloLayerARN
    Description: Layer ARN from SSM

Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Environment:
        Variables:
          LAYER_NAME: !Ref HelloLayerARN
      Layers:
        - !Ref HelloLayerARN
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

【问题讨论】:

  • 是的,SAM 无法解析 SSM 参数,因为我使用的是 sam cli 1.17 版,在更高版本的 SAM 中这个问题已经解决。我将我的 SAM cli 升级到 1.36 并且它工作正常。感谢 @user17589914 和 virenstack 的建议。

标签: aws-lambda aws-sam


【解决方案1】:

看来,SAM 无法解析 SSM 参数。

请尝试使用 --parameter-overrides 选项

示例:sam build --parameter-overrides HelloLayerARN=LambdaLayerARN

注意:您必须将 HelloLayerARN 类型更改为普通字符串,其他 sam 部署失败并出现 SSM 参数解析错误。

Parameters:
  HelloLayerARN:
    Type: String #AWS::SSM::Parameter::Value<String>
    Default: SayHelloLayerARN
    Description: Layer ARN from SSM

请参考已知问题:https://github.com/aws/aws-sam-cli/issues/1069

【讨论】:

    【解决方案2】:

    @user17589914 提到的 --parameter-overrides 解决方案适用于构建和部署,但不适用于本地调用(我很高兴被证明是错误的)。以下是有关我的发现和解决方法的一些详细信息:

    除了层特定问题之外,还有一个开放的问题,即构建、部署和本地调用的 --env-vars 与 --parameter-overrides 之间的不一致,仅供参考。 https://github.com/aws/aws-sam-cli/issues/1163

    所以一般来说,我使用 --env-vars 进行本地调用,并在 json 文件中定义了 dev 参数。对于构建和部署,我使用 --parameter-overrides 和 samconfig.toml 中定义的多个环境的参数。

    对于层 ARN 引用不起作用的问题,我无法通过将 ARN 作为参数传递给 --env-vars 或 --parameter-overrides 来使本地调用工作。因此,我最后将层 ARN 硬编码在我的 sam 模板中。

    期待看看我是否遗漏了一些东西,并且有人也在为本地调用工作。

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多