我正在使用代码管道来部署我的基础架构,我希望能够在不同的环境(dev,staging,prod,...)中部署它.
我目前有一个buildspec.yml文件,其中包含一些"pip install"指令和"aws cloudformation package"命令.我还创建了2个管道,一个用于生产,另一个用于开发,指向github上的2个不同分支.我遇到的问题是,因为在两个分支中文件都包含类似的资源,例如我在S3存储桶上有名称冲突.
使用AWS CLI和cloudformation创建或更新堆栈时,您可以使用--parameters选项传递参数.我想在我创建的2个管道中做类似的事情.
解决这个问题的最佳解决方案是什么?
最终目标是自动化基础架构的部署.我们的基础设施由用户,KMS密钥,Lamdbas(在python中),组和桶组成.
我按照教程创建了两个管道:http://docs.aws.amazon.com/lambda/latest/dg/automating-deployment.html
第一个管道链接到包含代码的repo的主分支,第二个管道链接到分段分支.我的目标是使用第一个管道和登台环境中的暂存分支,使用第二个管道在生产环境中自动部署主分支.
我的buildspec.yml文件看起来像:
version: 0.1
phases:
install:
commands:
- pip install requests -t .
- pip install simplejson -t .
- pip install Image -t .
- aws cloudformation package --template-file image_processing_sam.yml --s3-bucket package-bucket --output-template-file new_image_processing_sam.yml
artifacts:
type: zip
files:
- new_image_processing_sam.yml
Run Code Online (Sandbox Code Playgroud)
image_processing_sam.yml文件如下所示:
AWSTemplateFormatVersion: "2010-09-09"
Transform: "AWS::Serverless-2016-10-31"
Description: Create a thumbnail for an image uploaded to S3
Resources:
ThumbnailFunction:
Type: "AWS::Serverless::Function"
Properties:
Role: !GetAtt LambdaExecutionRole.Arn
Handler: create_thumbnail.handler
Runtime: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-codepipeline aws-codebuild
我们正在处理为使用AWS CodePipeline构建并部署到ECS的应用程序提供构建时间和运行时机密的问题.
最终,我们的愿景是为每个应用程序创建一个通用管道,以实现以下目标:
以下是手头的问题:
除了一些警告:
我们已经考虑使用像credstash这样的工具来帮助管理凭据.此解决方案要求CodeBuild和ECS任务实例都能够使用AWS CLI.为了避免改组更多凭据,我们认为最好将特权角色分配给需要使用AWS CLI的实例.这样,CLI就可以从实例元数据中的角色推断凭据
考虑到这些限制,我们试图设法管理我们的秘密.对于每个应用程序,我们创建一个管道.使用Cloudformation模板,我们创建:
4资源:
3个角色:
CodePipeline的CodeBuild步骤假定CodeBuildRole允许它从凭证表中读取构建时间机密.CodeBuild然后构建项目并生成一个Docker Image,它将其推送到ECR.最后,部署步骤使用Cloudformation模板和项目公共存储库中存在的附带参数文件创建ECS服务ECS任务定义包括假设ECSTaskRole允许任务从凭证表读取运行时机密并提取所需图像来自ECR.
我们当前提出的解决方案存在以下问题:
是否有更成熟的方法来传递我们可能忽略的CodePipeline中的秘密,或者这是我们能得到的最好的方法?
我有一个Python 3项目,我试图通过AWS Codestar部署到AWS Lambda - > Codepipeline - > Codebuild - > Cloudformation.
我的项目(实际上只包含一个简单的API网关处理程序方法)导入了Python 3(需要3个)项目(报纸).我在家用电脑上使用Virtualenv 15.1.0,如果我使用Python 3.5安装Newspaper然后上传到Lambda(Python 3.6运行时),它会抛出与PIL/Pillow相关的错误.
首先它说它找不到_image,这似乎是通过删除site-packages中的PIL目录来解决的,但这只会导致它抛出无法找到PIL的错误.
但是,如果我使用Python 3.6构建然后上传到Lambda,它可以正常工作(无论我是否删除PIL).
所以,在我看来,我无法使用3.5安装Newspaper并尝试在3.6运行时执行.
所以,现在我试图通过Codestar进行部署,但Codestar似乎默认为aws/codebuild/eb-nodejs-4.4.6-amazonlinux-64:2.1.3,即使对于Python项目,它似乎都可用于Yum存储库是Python 3.5,当然Lambda只有3.6运行时.
即使我在Codebuild本身内切换图像,似乎也没有使用Python3.6运行时构建的任何图像(根据文档).甚至Docker图像似乎也缺乏Python 3.6.
所以,我试图在我的buildspec.yml文件的INSTALL阶段在Codebuild中安装Python 3.6,但是在安装后我找不到python3*可执行文件.
我能想到的唯一另一件事是创建Codestar项目,编辑codebuild以使用Ubuntu然后安装所有东西(就像我在本地做的那样),但是没有办法在Codestar中做到这一点,我觉得这可能带来我在一个兔子洞里,这很难自动化.有没有办法将该配置作为我项目中的代码?
编辑 尝试从源代码构建和安装Python 3.6,但是当尝试安装Pip时,我收到错误,说没有安装SSL.回顾构建日志时,似乎还没有安装其他"位".
所以,我的问题是:
编辑1对于其他任何人,我的完整的buildspec.yml用于安装和使用Python3.6如下.请注意,它可以使一切尽可能安静,以减少日志消息,降低Cloudwatch成本并加快流程.通过这样做(安装Python并构建我的应用程序),我最终在整个过程中大约缩短了90秒.由于CodeBuild根据花费的时间收费,因此这一点至关重要.
version: 0.2
phases:
install:
commands:
- yum -qye 0 update
- yum -qye 0 groupinstall development
- yum -y install python-devel
- yum -qye 0 install libxml2-devel libxslt-devel libjpeg-devel zlib-devel libpng-devel openssl-devel sqlite-devel
- export HOME_DIR=`pwd`
# I would recommend hosting …Run Code Online (Sandbox Code Playgroud) python amazon-web-services aws-lambda aws-codebuild aws-codestar
我想通过aws codebuild进程为我的nodejs lambda创建一个zip工件 - 这样lambda函数可以在S3中使用这个zip文件作为源代码,我们在codebuild中使用git commit id进行管理的部署"证明"
我在github-repo中的文件结构是
folder1
- myfile.js
- otherfile.js
folder2
- otherfiles.js
package.json
Run Code Online (Sandbox Code Playgroud)
现在对于nodejs lambda项目我想要没有zip文件夹的zip文件(我们需要lambda中的nodejs项目)所以zip应该直接包含以下文件
- myfile.js
- node_module ==> folder from codebuild via npm install command
Run Code Online (Sandbox Code Playgroud)
问题:
1)S3中的输出zip包含在文件夹即.zip-> rootfolder-> myfile.js而不是我们需要.zip-> myfiles.js这对于lambda是不可用的,因为对于nodejs它应该有root zip文件而不是里面他们(文件夹内没有相对路径)
2)路径 - 你可以看到myfile.js在一个文件夹里面我想要相对路径被省略 - 我试过丢弃路径但问题是所有的node_module文件也在文件夹而不是在文件夹中,因为丢弃路径适用于两者 - 我可以只为myfile.js而不是为node_module文件夹设置discard路径吗?我目前的yaml文件:
artifacts:
files:
- folder/myfile.js
- node_modules/**/*
discard-paths: yes
Run Code Online (Sandbox Code Playgroud)
如果有人可以为此提供解决方案,那会很棒吗?
如果解决方案不包含更改github-repo文件夹结构并且我想在该repo中为其他文件重复此操作以创建其他lambda函数,那将是很好的.
编辑:
我使用下面的yaml文件,@awsnitin回答后一切正常
version: 0.2
phases:
build:
commands:
- echo Build started on `date`
- npm install
post_build:
commands:
- echo Running post_build commands
- mkdir build-output …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AWS CodeBuild Id作为我的docker镜像的标记.此docker镜像是在CodeBuild的构建阶段构建的.我想在AWS Code Pipeline阶段获得这个Coudebuild Id,这是我的docker标记.如何在aws codepipeline中访问这些codebuild环境变量?
CodeBuild阶段:
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Artifacts:
Location: !Ref ArtifactBucket
Type: "S3"
Source:
Location: !Sub ${ArtifactBucket}/source.zip
Type: "S3"
BuildSpec: |
version: 0.1
phases:
pre_build:
commands:
- $(aws ecr get-login --region $AWS_DEFAULT_REGION)
- sudo apt-get update
- echo Pulling maven image...
- docker pull maven:3.3-jdk-8
- echo done with the pre build phase
build:
commands:
- echo Build started on `date`
- printf "%s" $REPOSITORY_URI
- docker run -i --rm -w /opt/maven -v $PWD:/opt/maven -v …Run Code Online (Sandbox Code Playgroud) 我使用CodePipeline带CodeCommit。按下master分支自动触发构建。在CodePipeline控制台中,可以清楚地看到我正在接收提交ID,但是我需要在构建环境中获取它,以便在构建它时可以将它们作为标签添加到ECS映像中。有没有一种进入构建环境的方法。

continuous-integration amazon-web-services continuous-deployment aws-codepipeline aws-codebuild
我正在尝试通过AWS CodeBuild创建一个webhook,这是我收到的错误.
aws codebuild create-webhook --project-name myClassifiedProjectName
Run Code Online (Sandbox Code Playgroud)
我得到同样的错误:
An error occurred (OAuthProviderException) when calling the CreateWebhook operation: Unable to create webhook at this time. Please try again later.
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在使用 Karma 使用 ChromeHeadless 测试 Angular4 项目,并且在本地一切正常。然后我尝试让它在 AWS CodeBuild 上运行。最初的问题是 CodeBuild VM 不包含 chrome headless,所以我包含了 Puppeteer npm 包并在 Karma conf 中相应地设置了 ENV Var。这在本地仍然可以正常工作,但是在 AWS CodeBuild 上我收到错误...
puppeteer/.local-chromium/linux-526987/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
构建是从执行 maven 的标准 buildspec.yml 触发的mvn -B package。角度构建/测试是使用 eislett/frontend-maven-plugin (v1.4) 从 maven 完成的。
Puppeteer v1.0.0 Node v6.10.1 Karma v1.7.1 AWS CodeBuild - Ubuntu / Java / OpenJDK 8
我看过其他关于在 CI 机器上进行额外安装的帖子,但 CodeBuild 在每次运行时都会启动一个干净的 VM,所以这不是一个选项。有什么建议!?
karma-jasmine aws-codebuild angular google-chrome-headless puppeteer
我正在构建一个项目,将所有文件放在'dist'文件夹中,并通过CodeBuild运行它.我试图让它将'dist'中的所有文件和文件夹放入s3存储桶的根目录中,但是我无法弄清楚如何使其工作.
我的'dist'文件夹看起来像这样:
- index.html
- somecssfiles.css
- fonts/
- - some fonts or w/e
- js/
- - some javascript files
我已经尝试了很多不同的东西,但似乎无法让它只是将'dist/*'放入s3存储桶的根目录中.这是artifacts在buildspec.yml文件中我的属性的当前迭代:
artifacts:
files:
- '*'
discard-paths: yes
base-directory: 'dist'
我认为这可能会奏效,但它忽略了文件夹.任何帮助表示赞赏,感谢阅读.
我从AWS Codebuild上传了我的lambda函数源。我的Python脚本使用NLTK,因此需要大量数据。我的.zip软件包太大,RequestEntityTooLargeException发生了。我想知道如何增加通过UpdateFunctionCode命令发送的部署包的大小。
我AWS CodeBuild用来将源代码从GitHub存储库转换为AWS Lambda。这是关联的buildspec文件:
version: 0.2
phases:
install:
commands:
- echo "install step"
- apt-get update
- apt-get install zip -y
- apt-get install python3-pip -y
- pip install --upgrade pip
- pip install --upgrade awscli
# Define directories
- export HOME_DIR=`pwd`
- export NLTK_DATA=$HOME_DIR/nltk_data
pre_build:
commands:
- echo "pre_build step"
- cd $HOME_DIR
- virtualenv venv
- . venv/bin/activate
# Install modules
- pip install -U requests
# NLTK download
- pip …Run Code Online (Sandbox Code Playgroud) aws-codebuild ×10
aws-lambda ×4
amazon-ecs ×1
angular ×1
aws-codestar ×1
credentials ×1
node.js ×1
puppeteer ×1
python ×1
webhooks ×1