Я пытаюсь упаковать / развернуть свою лямбда-функцию AWS SAM, написанную с ядром dotnet. У меня есть 3 файла:
pipeline.yml - это шаблон CloudFormation, создающий проект CodeBuild, устанавливающий переменные среды и подключающий GitHub webhook к определенному файлу buildspec.yml.
buildspec.yml устанавливает необходимые пакеты, вызывает лямбда-пакет dotnet, который генерирует заархивированный файл, содержащий упакованное приложение .Net. Затем вызывает sam package и sam deploy, который должен обновить функцию Lambda новой кодовой базой.
template.yml содержит код для функции Lambda, которая упаковывается и развертывается командами sam.
Вот мой pipe.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, кроме как через пипс? Моя технология - это ядро dotnet. Есть ли у dotnet специальный способ установки aws-sam-cli?
ПРИМЕЧАНИЕ: , если я заменю команды sam package / deploy на aws s3 cp $ZIPPED_APPLICATION s3://$S3_DEPLOYMENT_BUCKET/$ZIPPED_APPLICATION
, процесс работает. Так что, похоже, это не проблема с переменными окружения.
Я полностью ошеломлен тем, как заставить пакет / развертывание sam работать с основным приложением dotnet. Любая помощь приветствуется.