Java 如何使用代码管道持续部署到CloudFormation堆栈

Java 如何使用代码管道持续部署到CloudFormation堆栈,java,aws-lambda,amazon-cloudformation,aws-codepipeline,aws-codebuild,Java,Aws Lambda,Amazon Cloudformation,Aws Codepipeline,Aws Codebuild,我正在尝试构建一个代码管道,以: 以GithubJava源项目为例 构建它以生成一个jar文件 使用sam-template.yml部署jar 我能造罐子(我有第二阶段的工作)。我假设第3阶段将涉及调用sam模板来进行部署。该模板是同一github repo的一部分 我的问题是:我看不出如何将jar和模板文件提供给第三阶段来进行部署 我附上以下三个文件以供参考: 一个构建规范,可以工作,但是我找不到生成的工件 到目前为止管道的json,由aws codepipeline get pipeline

我正在尝试构建一个代码管道,以:

  • 以GithubJava源项目为例
  • 构建它以生成一个jar文件
  • 使用sam-template.yml部署jar
  • 我能造罐子(我有第二阶段的工作)。我假设第3阶段将涉及调用sam模板来进行部署。该模板是同一github repo的一部分

    我的问题是:我看不出如何将jar和模板文件提供给第三阶段来进行部署

    我附上以下三个文件以供参考:

  • 一个构建规范,可以工作,但是我找不到生成的工件
  • 到目前为止管道的json,由aws codepipeline get pipeline生成
  • 将在第3阶段中使用的sam-template.yml的副本
  • 1。buildspec.yml

    version: 0.2
    
    phases:
      install:
        commands:
          - echo Entered the install phase...
          - apt-get update -y
          - apt-get install -y maven
      build:
        commands:
          - echo Entered the build phase...
          - mvn package
      post_build:
        commands:
          - echo Entered the post_build phase...
    artifacts:
      files:
        - server/harvest/target/harvest-1.0-SNAPSHOT.jar
      discard-paths: yes
    secondary-artifacts:
      cf-config:
        files:
          - server/aws/sam-app/sam-template.yml
        discard-paths: yes
      jar-file:
        files:
          - server/harvest/target/harvest-1.0-SNAPSHOT.jar
        discard-paths: yes
    
    AWSTemplateFormatVersion: '2010-09-09'
    Description: AWS Serverless Spring Boot API - uk.co.pack::harvest
    Globals:
      Api:
        EndpointConfiguration: REGIONAL
    Outputs:
      HarvestApi:
        Description: URL for application
        Export:
          Name: HarvestApi
        Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/ping'
    Parameters:
      amazonawsaccessKey:
        Type: String
      amazonawssecretkey:
        Type: String
      amazondynamodbendpoint:
        Type: String
      appid:
        Type: String
      url:
        Type: String
    Resources:
      HarvestRatingsFunction:
        Properties:
          CodeUri: build/harvest-1.0-SNAPSHOT.jar
          Environment:
            Variables:
              AMAZON_AWS_ACCESSKEY: !Ref 'amazonawsaccessKey'
              AMAZON_AWS_SECRETKEY: !Ref 'amazonawssecretkey'
              AMAZON_DYNAMODB_ENDPOINT: !Ref 'amazondynamodbendpoint'
              IOS_APP_ID: !Ref 'appid'
              IOS_URL: !Ref 'url'
          Events:
            GetResource:
              Properties:
                Method: any
                Path: /{proxy+}
              Type: Api
          Handler: uk.co.pack.StreamLambdaHandler::handleRequest
          MemorySize: 512
          Policies: AWSLambdaBasicExecutionRole
          Runtime: java8
          Timeout: 60
        Type: AWS::Serverless::Function
      RatingsDbTable:
        Properties:
          AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
          BillingMode: PROVISIONED
          KeySchema:
          - AttributeName: id
            KeyType: HASH
          ProvisionedThroughput:
            ReadCapacityUnits: '1'
            WriteCapacityUnits: '1'
          TableName: Review
        Type: AWS::DynamoDB::Table
    Transform: AWS::Serverless-2016-10-31
    
    2。codepippeline.json

    {
        "pipeline": {
            "name": "<<Name>>",
            "roleArn": "arn:aws:iam::xxxxxxxx",
            "artifactStore": {
                "type": "S3",
                "location": "codepipeline-eu-west-1-xxxxxxx"
            },
            "stages": [
                {
                    "name": "Source",
                    "actions": [
                        {
                            "name": "Source",
                            "actionTypeId": {
                                "category": "Source",
                                "owner": "ThirdParty",
                                "provider": "GitHub",
                                "version": "1"
                            },
                            "runOrder": 1,
                            "configuration": {
                                "Branch": "master",
                                "OAuthToken": "****",
                                "Owner": "<<username>>",
                                "PollForSourceChanges": "false",
                                "Repo": "repo-name"
                            },
                            "outputArtifacts": [
                                {
                                    "name": "SourceArtifact"
                                }
                            ],
                            "inputArtifacts": []
                        }
                    ]
                },
                {
                    "name": "Build",
                    "actions": [
                        {
                            "name": "Build",
                            "actionTypeId": {
                                "category": "Build",
                                "owner": "AWS",
                                "provider": "CodeBuild",
                                "version": "1"
                            },
                            "runOrder": 1,
                            "configuration": {
                                "ProjectName": "Harvest"
                            },
                            "outputArtifacts": [
                                {
                                    "name": "BuildArtifact"
                                }
                            ],
                            "inputArtifacts": [
                                {
                                    "name": "SourceArtifact"
                                }
                            ]
                        }
                    ]
                }
            ],
            "version": 3
        },
        "metadata": {
            "pipelineArn": "arn:aws:codepipeline:eu-west-1:xxxxxxxxx",
            "created": 1546780342.845,
            "updated": 1547288970.709
        }
    }
    

    代码管道中的第三个阶段可能如下所示:

      {
    "Name": "Deploy",
    "Actions": [
      {
        "Name": "Beta",
        "ActionTypeId": {
          "Category": "Deploy",
          "Owner": "AWS",
          "Provider": "CloudFormation",
          "Version": 1
        },
        "Configuration": {
          "ActionMode": "CREATE_UPDATE",
          "Capabilities": "CAPABILITY_IAM",
          "RoleArn": "CloudformationRole.Arn",
          "StackName": "Harvest",
          "TemplatePath": "BuildOutput::sam-template.yml",
          "ParameterOverrides": "{\"appid\": \"${app123456}\", \"url\": \"https://apple.com\"}"
        },
        "InputArtifacts": [
          {
            "Name": "BuildOutput"
          }
        ],
        "RunOrder": 1
      }
    ]
    }
    
    jar和模板在
    BuildOutput
    工件包中可用,因为您在buildspec.yml中指定了它们。只要您将
    BuildOutput
    (或
    SourceOutput
    )作为
    InputArtifacts
    ,就可以如上所示使用它们