我有一个简单的AWS CodePipeline,只需几个步骤。

  • AWS CodeCommit(提供输出“SourceCode”)
  • AWS CodeBuild(输入“SourceCode”,npm安装,npm运行脚本构建,输出“FinalCode”)
  • AWS CodeDeploy(输入“FinalCode”,部署到Lambda函数)

  • 实际上,从几个小时以来,我就尝试使此F *** CodeDeploy工作。
    这是不可能的。我不敢相信-.-

    因此,我们可以看一下AWS CodeDeploy步骤。错误一定在那里。
    我使用CodeBuild尝试了不同的方案。
    输出带有artifacts.zip和appspecs.yml以及其他内容。

    CodeDeploy说:
    Action execution failed
    BundleType must be either YAML or JSON
    

    由CodePipeline触发时。

    我从CodePipeline-S3-Bucket下载文件,这是CodeDeploy的输入。
    它包含所有需要的文件。

    amazon-web-services - AWS CodeDeploy无法部署Lambda函数-LMLPHP

    我不知道如何告诉管道使用此appspec.yml。

    有趣的是,如果我手动部署它,它就可以工作。
    因此,CodeDeploy无法找到我认为的appspec.yml。

    amazon-web-services - AWS CodeDeploy无法部署Lambda函数-LMLPHP

    在这里您可以看到。

    amazon-web-services - AWS CodeDeploy无法部署Lambda函数-LMLPHP

    但是,如果我考虑一下,这没有任何意义。
    因为在此应用程序规范编辑器中,我无法指定要部署的ZIP存档的路径。

    有人知道如何完成最后一步吗?

    我不敢相信它是如此困难:-D
    我能够很容易地设置CodeCommit。
    使用buildspec.yml,CodeBuild也非常容易。
    现在,由于忽略了appspec.yml或类似的内容,我无法部署...

    最佳答案

    我也有同样的问题。我花了几天的时间在这上,我认为CouldFormatoin的AWS::CodeDeploy::DeploymentGroup出了点问题

    我在s3://my-backet-for-lambda-deployment/appspec.yaml中有这个yaml文件:

    appspec.yaml

    version: 0.0
    Resources:
      - my-lambda-app-MyLambdaApp-157EXYJT40C0U:
          Type: AWS::Lambda::Function
          Properties:
            Name: arn:aws:lambda:us-east-1:292285124316:function:my-lambda-app-MyLambdaApp-157EXYJT40C0U
            Alias: production
            CurrentVersion: 8
            TargetVersion: 9
    
    appspec.yaml是正确的,因为我可以使用控制台在S3中手动指定它的位置,并且一切正常。因此,我完全确定appspec.yaml 在这里不是错误的

    问题

    我使用以下AWS::CodeDeploy::DeploymentGroup
      MyDeploymentGroup:
        Type: AWS::CodeDeploy::DeploymentGroup
        Properties:
          ApplicationName: !Ref MyCodeDeployApp
          Deployment:
            IgnoreApplicationStopFailures: false
            Revision:
                RevisionType: S3
                S3Location:
                  Bucket: my-backet-for-lambda-deployment
                  Key: appspec.yaml
                  BundleType: YAML
          DeploymentConfigName: CodeDeployDefault.LambdaAllAtOnce
          DeploymentStyle:
            DeploymentOption: WITH_TRAFFIC_CONTROL
            DeploymentType: BLUE_GREEN
          ServiceRoleArn: !ImportValue MyCodeDeployRoleArn
    

    上面的资源的堆栈创建失败,出现。无法指定属性部署

    解决方法

    我找不到完全基于CloudFormatoin的解决方案。因此,我要做的是在不定义DeploymentGroup的情况下创建Deployment,然后使用CLI或boto3开始部署。
    Resources:
    
      MyCodeDeployApp:
        Type: AWS::CodeDeploy::Application
        Properties:
          ComputePlatform: Lambda
    
      # DeploymentGroup without Deployment property
      MyDeploymentGroup:
        Type: AWS::CodeDeploy::DeploymentGroup
        Properties:
          ApplicationName: !Ref MyCodeDeployApp
          DeploymentConfigName: CodeDeployDefault.LambdaAllAtOnce
          DeploymentStyle:
            DeploymentOption: WITH_TRAFFIC_CONTROL
            DeploymentType: BLUE_GREEN
          ServiceRoleArn: !ImportValue MyCodeDeployRoleArn
    
    Outputs:
    
      CodeDeployAppName:
        Value: !Ref MyCodeDeployApp
    
      DeploymentGroupName:
        Value: !Ref MyDeploymentGroup
    

    创建堆栈后,我可以使用bash启动部署:

    aws deploy create-deployment \
        --application-name ${deployment_app_name} \
        --deployment-group-name ${deployment_group_name} \
        --s3-location bucket=my-backet-for-lambda-deployment,bundleType=YAML,key=appspec.yaml
    

    P.S.
    MyCodeDeployRoleArn角色也是正确的,因此也不是它的错:
    Resources:
    
      MyCodeDeployServiceRole:
        Type: AWS::IAM::Role
        Properties:
          AssumeRolePolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Principal: {Service: [codedeploy.amazonaws.com]}
                Action: ['sts:AssumeRole']
          Description: Role for deploying lambda
          ManagedPolicyArns:
            - arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda
          Policies:
            - PolicyName: MyS3GetObjectPolicy
              PolicyDocument:
                Version: 2012-10-17
                Statement:
                  - Effect: Allow
                    Action:
                      - s3:Get*
                      - s3:List*
                    Resource: '*'
    
    
    Outputs:
    
      CodeDeployRoleArn:
        Value: !GetAtt MyCodeDeployServiceRole.Arn
        Export:
          Name: MyCodeDeployRoleArn
    

    关于amazon-web-services - AWS CodeDeploy无法部署Lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51716238/

    10-10 06:51