- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想自动部署用 Java 开发的 AWS Lambda。为此,我创建了 CodePipeline,它在 git push 命令上触发到 CodeCommit 存储库。 CodePipeline 的下一步是 CodeBuild 项目。 CodeBuild 使用以下 buildspec.yml 文件:
version: 0.1
phases:
build:
commands:
- echo Entering build phase...
- echo Build started on `date`
- mvn package shade:shade
- mv target/Output-1.0.jar .
artifacts:
files:
- Output-1.0.jar
当手动运行 CodeBuild 项目时,它会将 jar 文件上传到 s3 存储桶。这个 jar 文件可以毫无问题地用于更新 lambda 并且一切都按预期工作。但是,如果 CodeBuild 通过 CodePipeline 运行,则结果是 zip 中的 jar 文件。由于此 zip 不能用于更新 lambda 函数,我不确定我应该在这里做什么,因为 CodePipeline 会覆盖 CodeBuild 项目的任何打包集。
想法是 CodePipeline 触发 CodeBuild,它产生额外的 lambda 将采用的输出并用它更新 lambda 函数。从 CodePipeline 调用的 CodeBuild 的输出是否有可能是 jar 而不是 zip ?如果没有,那我应该怎么办?
感谢任何帮助。
最佳答案
zip 或 jar 文件都可用于更新 Lambda 函数,您只需使用 Cloudformation 添加“部署步骤”到您的 CodePipeline。
这是一个nodejs构建/管道,尝试适应你的java项目:
项目文件
构建规范.yml
version: 0.2
phases:
install:
commands:
- echo install phase
pre_build:
commands:
- echo pre_build phase
build:
commands:
- npm install --production
post_build:
commands:
- echo post build
artifacts:
type: zip
files:
- index.js
- node_modules/**/*
- package.json
- template.yml
- configuration.json
discard-paths: no
配置.json
{
"Parameters": {
"BucketName" : { "Fn::GetArtifactAtt" : ["Build", "BucketName"]},
"ObjectKey" : { "Fn::GetArtifactAtt" : ["Build", "ObjectKey"]}
}
}
template.yml(你需要添加一个AWS::Lambda::Permission)
AWSTemplateFormatVersion: "2010-09-09"
Description: "My Lambda Template"
Parameters:
BucketName:
Type: String
ObjectKey:
Type: String
Roles:
Type: String
Default: Roles
LambdaRole:
Type: String
Default: LambdaRole
Resources:
MyLambdaFunction:
Type: AWS::Lambda::Function
Properties:
Description: 'My Lambda Handler'
Handler: index.handler
Runtime: nodejs6.10
Timeout: 5
Code:
S3Bucket:
Ref: BucketName
S3Key:
Ref: ObjectKey
Role:
Fn::Join:
- ""
- - "arn:aws:iam::"
- !Ref AWS::AccountId
- ":role/"
- Fn::ImportValue:
Fn::Join:
- ""
- - Ref: Roles
- "-"
- Ref: LambdaRole
角色模板
AWSTemplateFormatVersion: '2010-09-09'
Description: 'The AWS Resource Roles'
Resources:
CodeBuildRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
Effect: Allow
Principal:
Service: codebuild.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess
- arn:aws:iam::aws:policy/CloudWatchFullAccess
- arn:aws:iam::aws:policy/AWSCodeCommitFullAccess
- arn:aws:iam::aws:policy/AmazonS3FullAccess
CodePipelineRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
Effect: Allow
Principal:
Service: codepipeline.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: CloudFormationFullAccess
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action:
- "cloudformation:*"
Resource: "*"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSCodePipelineFullAccess
- arn:aws:iam::aws:policy/AWSCodeCommitFullAccess
- arn:aws:iam::aws:policy/AmazonS3FullAccess
- arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess
- arn:aws:iam::aws:policy/AWSLambdaFullAccess
CloudFormationRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
Effect: Allow
Principal:
Service: cloudformation.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: CloudFormationFullAccess
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action: "cloudformation:*"
Resource: "*"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSCodePipelineFullAccess
- arn:aws:iam::aws:policy/AWSCodeCommitFullAccess
- arn:aws:iam::aws:policy/AmazonS3FullAccess
- arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess
- arn:aws:iam::aws:policy/AWSLambdaFullAccess
- arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator
LambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: CloudFormationFullAccess
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action: "cloudformation:*"
Resource: "*"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSLambdaFullAccess
- arn:aws:iam::aws:policy/AWSCodePipelineFullAccess
- arn:aws:iam::aws:policy/AmazonSESFullAccess
Outputs:
CodeBuildRoleOutput:
Description: 'Maybe API CodeBuildRole ARN'
Value: !Ref 'CodeBuildRole'
Export:
Name: !Sub '${AWS::StackName}-CodeBuildRole'
CodePipelineRoleOutput:
Description: 'Maybe API CodePipelineRole ARN'
Value: !Ref 'CodePipelineRole'
Export:
Name: !Sub '${AWS::StackName}-CodePipelineRole'
CloudFormationRoleOutput:
Description: 'Maybe API CloudFormationRole ARN'
Value: !Ref 'CloudFormationRole'
Export:
Name: !Sub '${AWS::StackName}-CloudFormationRole'
LambdaRoleOutput:
Description: 'Maybe API LambdaRole ARN'
Value: !Ref 'LambdaRole'
Export:
Name: !Sub '${AWS::StackName}-LambdaRole'
CodePipeline 桶
AWSTemplateFormatVersion: '2010-09-09'
Description: 'The AWS S3 CodePipeline Bucket'
Resources:
CodePipelineBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
BucketName: my-code-pipeline-bucket
VersioningConfiguration:
Status: Enabled
AccessControl: BucketOwnerFullControl
Outputs:
CodePipelineBucketOutput:
Description: 'CodePipeline Bucket Ref'
Value: !Ref CodePipelineBucket
Export:
Name: !Sub '${AWS::StackName}-CodePipelineBucketRef'
CodeBuild 模板
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Nodejs CodeBuild Template'
Parameters:
Artifact:
Type: String
Default: artifact
Roles:
Type: String
Default: Roles
CodeBuildRole:
Type: String
Default: CodeBuildRole
Resources:
NodejsCodeBuild:
Type: AWS::CodeBuild::Project
DeletionPolicy: Retain
Properties:
ServiceRole:
Fn::ImportValue:
Fn::Join:
- ""
- - Ref: Roles
- "-"
- Ref: CodeBuildRole
Artifacts:
Type: no_artifacts
Environment:
ComputeType: BUILD_GENERAL1_SMALL
Image: aws/codebuild/eb-nodejs-6.10.0-amazonlinux-64:4.0.0
Type: LINUX_CONTAINER
Source:
Type: S3
Location: !Ref Artifact
Outputs:
NodejsCodeBuildOutput:
Description: 'Nodejs CodeBuild Ref'
Value: !Ref 'NodejsCodeBuild'
Export:
Name: !Sub '${AWS::StackName}-NodejsCodeBuildRef'
代码管道模板
AWSTemplateFormatVersion: '2010-09-09'
Description: 'CodePipeline for Nodejs Applications'
Parameters:
Roles:
Type: String
Default: Roles
CodePipelineRole:
Type: String
Default: CodePipelineRole
CloudFormationRole:
Type: String
Default: CloudFormationRole
CodePipelineBucket:
Type: String
Default: CodePipelineBucket
CodePipelineBucketRef:
Type: String
Default: CodePipelineBucketRef
PipelineName:
Type: String
Default: PipelineName
CodeBuildProject:
Type: String
Default: NodejsCodeBuild
CodeBuildProjectRef:
Type: String
Default: NodejsCodeBuildRef
Branch:
Type: String
Default: master
Repository:
Type: String
Default: my-repository-name
LambdaStack:
Type: String
Default: LambdaStack
Resources:
NodejsCodePipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: !Ref PipelineName
RoleArn:
Fn::Join:
- ""
- - "arn:aws:iam::"
- !Ref AWS::AccountId
- ":role/"
- Fn::ImportValue:
Fn::Join:
- ""
- - Ref: Roles
- "-"
- Ref: CodePipelineRole
ArtifactStore:
Location:
Fn::Join:
- ""
- - Fn::ImportValue:
Fn::Join:
- ""
- - Ref: CodePipelineBucket
- "-"
- Ref: CodePipelineBucketRef
Type: S3
Stages:
- Name: Source
Actions:
- InputArtifacts: []
Name: Source
ActionTypeId:
Category: Source
Owner: AWS
Version: 1
Provider: CodeCommit
OutputArtifacts:
- Name: Master
Configuration:
BranchName: !Ref Branch
RepositoryName: !Ref Repository
RunOrder: 1
- Name: Build
Actions:
- Name: Build
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
InputArtifacts:
- Name: Master
OutputArtifacts:
- Name: Build
Configuration:
ProjectName:
Fn::Join:
- ""
- - Fn::ImportValue:
Fn::Join:
- ""
- - Ref: CodeBuildProject
- "-"
- Ref: CodeBuildProjectRef
RunOrder: 1
- Name: Stage
Actions:
- Name: Sandbox
ActionTypeId:
Category: Deploy
Owner: AWS
Version: 1
Provider: CloudFormation
InputArtifacts:
- Name: Build
OutputArtifacts:
- Name: Deploy
Configuration:
StackName: !Ref LambdaStack
ActionMode: CREATE_UPDATE
Capabilities: CAPABILITY_IAM
TemplateConfiguration: Build::configuration.json
TemplatePath: Build::template.yml
ParameterOverrides: |
{
"BucketName" : { "Fn::GetArtifactAtt" : ["Build", "BucketName"]},
"ObjectKey" : { "Fn::GetArtifactAtt" : ["Build", "ObjectKey"]}
}
RoleArn:
Fn::Join:
- ""
- - "arn:aws:iam::"
- !Ref AWS::AccountId
- ":role/"
- Fn::ImportValue:
Fn::Join:
- ""
- - Ref: Roles
- "-"
- Ref: CloudFormationRole
RunOrder: 1
关于aws-lambda - 从 CodePipeline 调用的 AWS CodeBuild 产生不能用于 AWS Lambda 的人工制品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946986/
我目前正在使用 codepipeline、codebuild、codedeploy 和 codecommit 创建管道。我在将 codebuild 构建工件上传到 s3 时遇到问题,因为它不遵循我在
我已经设置了一个管道,用于监视具有给定分支的 codeCommit 存储库,并且它运行良好。 我想限制我的管道只观看我的 repo 中的一个文件夹。想象一下,我的 repo 包含两个文件夹:fold1
我们使用 monorepo 方法将我们的源代码存储在 github 中。 当前是否可以仅在提交到特定子文件夹时触发 CodePipeline。 通过在源存储库上设置过滤器,TeamCity 目前可以实
我有一个在构建阶段调用 CodeBuild 的 AWS CodePipeline。 问题是如何从 CodePipeline 传入可以在 CodeBuild 的 buildspec.yml 中读取的环境
我有一个使用 AWS codebuild 构建 AMI 的 codepipeline,我计划每周运行一个新的服务器镜像。 我想将其作为计划任务运行,我考虑使用 lambda 计划任务,但没有看到从 l
我正在设置 CodePipeline,并创建了一个操作来从 GitHub 获取源代码。 这需要建立一个连接,我做到了,而且在 GitHub 方面看起来也很好。 但是,如果我发布对管道的更改,我会在源阶
如果您通过 CloudFormation 创建 CodePipeline。它会自动启动它,这可能是一个问题,因为管道可以重写相同的堆栈...... 有什么方法可以禁用此行为吗? 谢谢。 最佳答案 有同
我正在设置一个管道来自动执行 cloudformation 堆栈模板部署。 管道本身是在 aws eu-west-1 区域中创建的,但 cloudformation 堆栈模板将部署在任何其他区域中。
尽管计划已正确应用,但我的 Terraform 代码在应用后仍会报告更改。 Terraform 和提供者版本: Terraform v1.1.7 on darwin_amd64 + provider
我们的ci工作流程是这样 在预提交中运行eslint 推送到功能分支 在代码提交中打开拉取请求 触发aws代码构建运行测试 (如果所有测试均通过),请合并 触发AWS代码部署以部署 现在,我注意到co
通过 SLS 部署此 CloudFormation 模板时,我收到一条神秘的错误消息,但没有来自 CloudFormation Events 的更多信息: FrontendPipeline:
是否可以使用 Cloudformation 作为部署提供者向 Codepipeline 创建的堆栈添加标签? 最佳答案 如this documentation表示您可以在模板配置文件中为堆栈设置标签。
我正在尝试构建 Angular7 项目并将其部署到 S3,但出现以下错误。我该如何解决? [Container] 2019/05/21 04:08:49 Waiting for agent ping
借助 Bitbucket 和 Bamboo,我能够让 Bamboo 跟踪每个功能分支并在每个分支上运行测试,以便在 pull 请求时,我能够查看该分支是否通过了单元测试。 与 AWS CodePipe
我使用 terraform 模块设计了一个 AWS 代码管道模块,我有多个使用代码管道模块的实际代码管道。我使用模块作为设计模式,因为所有的代码流水线看起来都很相似,除了一些代码流水线需要批准阶段,一
一个简单的构建规范,例如: version: 0.2 phases: install: commands: - (cd lambda/src; npm install)
AWS CodePipeline现在支持GitHub WebHook,但默认情况下 每次在master分支上推送(更改)代码时,都会触发CodePipeline。 但是,我只希望它在实际发布发行版时运
我的团队一直在使用我们的 CodePipeline 遇到问题,在这些问题中,由于我们的 Docker 镜像修补而将不应该出现的功能推送到生产中。关于我们架构的一点背景:我们的管道有两个来源,一个用于源
是否有关于 CodePipeline 中阶段超时的文档/详细信息?特别是,我有一个构建阶段 (Jenkins),如果 Jenkins 配置不正确,它可能会失败,但它并不总是立即使 CodePipeli
我一直在使用 AWS CDK,我认为这是使用 AWS 的好方法。最近我遇到了一个我无法解决的问题。查看了文档和资源,但没有人解释如何在 CDK 中执行此操作。因此,我有两个代码管道,每个管道要么部署到
我是一名优秀的程序员,十分优秀!