Ошибка недопустимого уровня Arn при использовании значения ARN из параметров SSM

#aws-lambda #aws-sam

#aws-lambda #aws-sam

Вопрос:

Значение 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

 

Комментарии:

1. Да, SAM не смог разрешить параметры SSM только потому, что я использовал sam cli версии 1.17, в более поздней версии SAM эта проблема была решена. Я обновил свой интерфейс командной строки SAM до 1.36, и он работает правильно. Спасибо @user17589914 и virenstack за ваши предложения.

Ответ №1:

Похоже, SAM не разрешает параметры SSM.

Пожалуйста, попробуйте использовать опцию —parameter-overrides

Пример: sam build —parameter-переопределяет 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:

Решение —parameter-overrides, упомянутое @user17589914, работает для сборки и развертывания, но не работает для локального вызова (я буду очень рад, если окажется, что это не так). Ниже приведены некоторые подробности о моих выводах и обходном пути:

К вашему сведению, существует открытая проблема с несоответствием между —env-vars и —parameter-overrides для сборки, развертывания и локального вызова. https://github.com/aws/aws-sam-cli/issues/1163

Итак, в общем, я использую —env-vars для локального вызова с параметрами разработчика, определенными в файле json. А для сборки и развертывания я использую —parameter-overrides с параметрами для нескольких окружений, определенных в samconfig.toml .

Из-за проблемы с неработающей ссылкой на уровень ARN я не смог заставить local invoke работать, передав ARN в качестве параметра либо с помощью —env-vars, либо с помощью —parameter-overrides . Итак, я закончил, оставив уровень ARN жестко запрограммированным в моем шаблоне sam.

С нетерпением жду, чтобы увидеть, не упустил ли я что-то, и у кого-то это работает и для локального вызова.