#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.
С нетерпением жду, чтобы увидеть, не упустил ли я что-то, и у кого-то это работает и для локального вызова.