Сбой команды пакета AWS Sam во время построения спецификации

Я пытаюсь упаковать / развернуть свою функцию AWS SAM Lambda, написанную с использованием ядра dotnet. У меня 3 файла:

pipeline.yml - это шаблон CloudFormation, создающий проект CodeBuild, задающий переменные среды и подключающий веб-перехватчик GitHub к определенному файлу buildspec.yml.

buildspec.yml устанавливает необходимые пакеты, вызывает лямбда-пакет dotnet, который создает заархивированный файл, содержащий упакованное приложение .Net. Затем вызывает sam package и sam deploy, которые, как предполагается, обновят функцию Lambda с новой кодовой базой.

template.yml содержит код функции Lambda, которая упаковывается и развертывается командами sam.

Вот мой код pipeline.yml:

AWSTemplateFormatVersion: "2010-09-09"

Parameters: [REMOVED FOR BREVITY]

Resources:
    CodeBuildProject:
        Type: AWS::CodeBuild::Project
        Properties:
            Environment:
                Image: aws/codebuild/dot-net:core-2.1
                EnvironmentVariables:
                    -   Name: S3_DEPLOYMENT_BUCKET ...
                    -   Name: FOLDER ...
                    -   Name: REPO_NAME ...
                    -   Name: ZIPPED_APPLICATION ...
            Name: RoiCalculator-EventPublisher-Master
            Source:
                BuildSpec: RoiCalculator.Serverless.EventPublisher/buildspec.yml
                Location: https://github.com/XXXXXXXXX/RoiCalculator.EventStore
                Type: GITHUB
            Triggers:
                Webhook: true
                FilterGroups:
                    - - Type: EVENT
                        Pattern: PUSH
                      - Type: FILE_PATH
                        Pattern: !Sub ${GitHubTargetName}
                        ExcludeMatchedPattern: false

Вот мой файл buildspec.yml:

version: 0.2
phases:
    install:
        runtime-versions:
            dotnet: 2.2
        commands:
            - export PATH="$PATH:/root/.dotnet/tools"
            - dotnet tool install -g Amazon.Lambda.Tools
            - pip install aws-sam-cli
    pre_build:
        commands:
            - dotnet restore
    build:
        commands:
            - cd $FOLDER
            - dotnet lambda package --configuration release --framework netcoreapp2.1 -o ./$ZIPPED_APPLICATION
            - sam package --template-file template.yml --s3-bucket $S3_DEPLOYMENT_BUCKET --output-template-file packaged-template.yml --region us-east-2
            - sam deploy --template-file packaged-template.yml --stack-name event-publisher-app --capabilities CAPABILITY_IAM --region us-east-2

Вот мой файл template.yml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Resources:
    EventPublisherLambda:
        Type: AWS::Serverless::Function
        Properties:
            FunctionName: $REPO_NAME
            Handler: RoiCalculator.Serverless.EventPublisher::RoiCalculator.Serverless.EventPublisher.Function::FunctionHandler
            Role: 
                Fn::ImportValue: 
                    global-lambda-function-execution-arn
            CodeUri: ./$ZIPPED_APPLICATION
            Runtime: dotnetcore2.1

Я получаю эту ошибку в выводе CodeBuild:

[Container] 2019/10/01 05:15:48 Phase complete: BUILD State: FAILED 
[Container] 2019/10/01 05:15:48 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: sam package --template-file template.yml --s3-bucket $S3_DEPLOYMENT_BUCKET --output-template-file packaged-template.yml --region us-east-2. Reason: exit status 1 

Есть ли другой способ установить aws-sam-cli в buildspec, кроме как через pip? Моя технология - это ядро ​​dotnet. Есть ли специальный способ установки aws-sam-cli для dotnet?

ПРИМЕЧАНИЕ.. Если я заменю команды sam package / deploy на aws s3 cp $ZIPPED_APPLICATION s3://$S3_DEPLOYMENT_BUCKET/$ZIPPED_APPLICATION, процесс заработает. Таким образом, это не похоже на проблему с переменными окружения.

Я совершенно не понимаю, как заставить sam package / deploy работать с основным приложением dotnet. Любая помощь приветствуется.


person Tom Schreck    schedule 01.10.2019    source источник
comment
Из любопытства, какие функции вы надеетесь использовать в Sam? Если это не так, мне интересно, почему вы просто не вызываете dotnet lambda deploy-serverless вместо команд sam package и sam deploy.   -  person Norm Johanson    schedule 03.10.2019
comment
Моя цель - обновить лямбда-функцию новой сборкой, находящейся в ведре S3. Команды sam обрабатывают именование кода в сегменте S3 и обновляют функцию Lambda с новым именем для каждой последующей сборки. У меня возникли трудности с установкой приложения sam на этапе установки моей спецификации сборки, потому что я являюсь основной средой dotnet. Переход с команд sam на облачную информацию aws сработал.   -  person Tom Schreck    schedule 04.10.2019


Ответы (1)


sam package - это псевдоним для aws cloudformation package, sam deploy - это псевдоним aws cloudformation deploy. Если у вас возникли проблемы с установкой / использованием SAM cli, можете ли вы вместо этого попробовать использовать команду aws cloudformation ... для этих действий.

[1] https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html

[2] https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html

person shariqmaws    schedule 02.10.2019