当前位置: 首页 > 知识库问答 >
问题:

AWS Sam程序包命令在buildspec期间失败

白镜
2023-03-14

我正在尝试打包/部署用dotnetcore编写的AWS SAM Lambda函数。我有3个文件:

pipeline.yml是一个创建CodeBuild项目的云形成模板,设置环境变量,并将GitHub网络钩子连接到特定的buildspec.yml文件。

建筑规范。yml安装所需的软件包,调用dotnet lambda软件包,该软件包生成包含以下内容的压缩文件。Net打包应用程序。然后调用sam包和sam部署,sam包和sam部署应该使用新的代码库更新Lambda函数。

样板yml包含Lambda函数的代码,该函数由sam命令打包和部署。

这是我的管道。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

这是我的模板。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

我在代码生成输出中遇到以下错误:

[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 

除了通过pip之外,还有其他方法在构建规范中安装aws-sam-cli吗?我的技术是网络核心。有一个dotnet特定的方式来安装aws-sam-cli?

注意:如果我用aws s3 cp$Zippped_应用程序s3://$s3_部署_BUCKET/$Zippped_应用程序替换sam package/deploy命令,则该过程有效。因此,这似乎不是环境变量的问题。

如何让sam包/部署与dotnet核心应用程序一起工作,我完全被难住了。感谢您的帮助。

共有1个答案

丁文轩
2023-03-14

“sam包”是“aws cloudformation包”的别名,“sam部署”是“aws cloudformation部署”的别名。如果在安装/使用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

 类似资料:
  • 我使用AWS CodeBuild使用无服务器框架将函数部署到AWS lambda。 这是我的构建规范。yml, 问题是,即使当无服务器部署-阶段$STAGE-区域$AWS_DEFAULT_REGION|deploy.out命令失败时,构建项目也会在代码库中由AWS代码构建显示为成功。 当serverless deploy命令失败时,我希望生成状态为failure。

  • 时间/日期 和计时 date 直接调用, date就会打印日期和时间到 stdout 上. 这个命令有趣的地方在于它的格式化和分析选项上. Example 12-10. 使用 date命令 1 #!/bin/bash 2 # 练习 'date' 命令 3 4 echo "The number of days since the year's beginning is `da

  • 我在谷歌上搜索并找到了许多解决方案,但没有一个适合我。 我正试图通过连接到局域网中的远程服务器从一台机器上克隆 从另一台计算机运行此命令会导致错误 但是使用运行相同的克隆命令git://192.168.8.5 ... 在服务器上,一切正常且成功。 有什么想法吗? 我在但也没有帮助 使用git版本1.8.5.2。msysgit。0

  • 当我预计命令会失败时,我希望输出命令成功的文件的名称,同时抑制警告。我更喜欢一句俏皮话。 大致如下: 或 到目前为止,我没有得到太多的爱。建议?

  • 目前,我正在使用以下命令启动服务器(使用Mocha框架),在第二个命令得到一个错误消息。请找到以下内容并分享您的意见 firefox安装: