我正在设置AWS CodeDeploy,以从GitHUB私有存储库获取修订。我尝试同时使用AWS CodeDeploy GUI和aws deploy命令。对于GUI,我遵循此页面的说明https://blogs.aws.amazon.com/application-management/post/Tx33XKAKURCCW83/Automatically-Deploy-from-GitHub-Using-AWS-CodeDeploy。连接到GitHub存储库时,我输入了凭据。我还确保appspec.yml文件位于存储库的根目录中。在部署期间,我一直收到以下消息。
重试3次后,无法在' https://api.github.com/repos/[GroupName]/[repositoryName]/tarball/[commitID] ' 处下载捆绑软件。服务器返回的代码:404“未找到”;404'未找到'; 404'未找到'; 404“未找到”。
当我尝试在该URL上执行wget时,我还会看到相同的404返回代码。
MyMachine$ wget https://api.github.com/repos/[GroupName]/[repositoryName]/tarball/[commitId]
--2016-02-06 00:26:13--
https://api.github.com/repos/[GroupName]/[repositoryName]/tarball/[commitId]
Resolving api.github.com... 192.30.252.124
Connecting to api.github.com|192.30.252.124|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2016-02-06 00:26:14 ERROR 404: Not Found.
Run Code Online (Sandbox Code Playgroud)
我有点不走运。任何指导或帮助,不胜感激。
我正在尝试使用 CircleCI -> S3 -> CodeDeploy -> EC2 进行部署。我能够将部署映像从 CircleCI 上传到 S3,但无法将 S3 部署到 EC2 实例。这是错误。
整体部署失败,原因是太多的单个实例部署失败,可用于部署的健康实例太少,或者部署组中的某些实例遇到问题。(错误代码:HEALTH_CONSTRAINTS)
该错误是从 CodeDeploy 提供的。我无法弄清楚为什么以及如何。如果您能提供一些建议,我将不胜感激。
背景
我有一个由Jenkins触发的设置,其中包括:
git diff在单独的构建服务器之间进行所需的git修订,而不涉及AWS代码部署(据我所知)来准备的.詹金斯触发了phing构建./home/jenkins/deployment/cd_deploy/codebase/并/home/jenkins/deployment/cd_deploy/在Jenkins项目的"高级项目选项"下指定了"使用自定义工作区"选项下的路径,该选项基本上是构建服务器中需要上传到的位置S3桶.请注意,我需要从两个git修订版之间删除的实例中删除文件.问题
我动态添加到appspec.yml文件的文件正在EC2实例中进行修改/添加,但是,奇怪的是,要删除的文件也会被删除.我验证了我没有逻辑删除我在appspec文件的beforeInstall钩子中编写的文件.我的beforeInstall挂钩中只有一个beforeInstall.sh文件,没有其他挂钩.一旦我从appspec文件中删除该挂钩,删除就会停止.这是我的appspec文件 -
version: 0.0
os: linux
files:
{Pair of files dynamically generated}
- source: config/deployment_config.json
destination: /var/cake_1.2.0.6311-beta/deployment
permissions:
- object: .
pattern: "**"
owner: sandeepan
group: sandeepan
mode: 777
type:
- file
hooks:
BeforeInstall:
- location: beforeInstall.sh
Run Code Online (Sandbox Code Playgroud)
AWS Codedeploy以某种方式与我的git托管(我正在使用gitlab而不是github)进行交谈,并以某种方式获取有关要删除的文件的信息.
更新
我后来观察到,即使从appspec.yml文件中完全删除了钩子部分,并从中央构建服务器(准备好S3捆绑包)中删除了相应的.sh文件,即beforeInstall.sh,afterInstall.sh等,所以我的逻辑和对它的任何引用都没有进入实例,要删除的文件仍然会被自动删除.
更新2
今天我发现在git版本之间修改的文件也会被自动删除. 我有动态准备appspec.yml文件的逻辑.我修改为不添加一些文件.因此,有一些文件存在于git diff中,但在appspec文件中没有.结果,它们被删除但不再出现.似乎代码部署在部署之前自动进行清理.我怎么阻止它?我想添加我的自定义清理逻辑.
更新3
beforeInstall.sh的内容 -
OUTPUT="$(w | grep -Po '(?<=load average: )[^,]*')"
rm -f /var/cake_1.2.0.6311-beta/deployment/deployment_config.json
path="$PWD"
php $path"/deployment-root/"$DEPLOYMENT_GROUP_ID"/"$DEPLOYMENT_ID"/deployment-archive/beforeInstall.php" ${OUTPUT}
/usr/local/nagios/libexec/check_logwarn …Run Code Online (Sandbox Code Playgroud) 在屏幕截图下方,它似乎仅在一个可用区中成功。

我检查了codedeploy日志中是否有失败的实例,但发现有一个错误,我认为它被认为是本地实例。
2018-01-10 04:40:22 INFO [codedeploy-agent(2696)]:在前提配置文件不存在或不可读
2018-01-10 04:40:43错误[codedeploy-agent(2696)]:CodeDeploy实例代理服务:CodeDeploy实例代理服务:启动或运行期间出错:InstanceMetadata :: InstanceMetadataError-未提供未提供EC2实例和区域环境变量AWS_REGION。请使用环境变量AWS_REGION指定您的区域。
我已经搜索了大约三天的时间来解决此问题,但是AWS文档中没有提及。在生产环境中,我计划使用附加到自动缩放组的两个可用区。我想知道我是否忽略了CodeDeploy之外的其他内容。我应该检查什么?先感谢您。
[更新]我更新了ASG和ASG Config屏幕快照。没什么特别的,它是vanila和默认过程。我从AWS支持中心等待了5天,但仍在等待响应。
当它们在AWS CodePipeline中工作时,CodeDeploy和AWS Lambda出现问题。这是我的设置:
步骤1.和2.可以正常工作,但是在CodeDeploy上,出现以下错误:
操作执行失败的BundleType必须为YAML或JSON
如果我解压缩CodeBuild生成的工件,则所有文件都就位。
如果尝试从CodeDeploy手动部署到AWS Lambda,则会收到其他消息...
部署失败部署失败,因为目标Lambda函数FUNCTION_NAME不存在或者找不到指定的函数版本或别名
关于哪个错误消息有效,或者它们是否相同但具有不同的错误消息,这非常混乱。
该功能的ARN为:
arn:aws:lambda:us-east-1:239748505547:function:email_submition
Run Code Online (Sandbox Code Playgroud)
别名的ARN为:
arn:aws:lambda:us-east-1:239748505547:function:email_submition:default
Run Code Online (Sandbox Code Playgroud)
而且我的appspec.yml文件具有以下内容
version: 0.0
Resources:
- email_submition:
Type: AWS::Lambda::Function
Properties:
Name: "email_submition"
Alias: "default"
CurrentVersion: "1"
TargetVersion: "2"
Run Code Online (Sandbox Code Playgroud)
该项目的文件夹结构为:
.gitignore
appspec.yml
buildspec.yml
index.js
README.md
Run Code Online (Sandbox Code Playgroud)
我在此配置中缺少什么?
amazon-s3 amazon-web-services aws-code-deploy aws-lambda aws-codepipeline
我正在尝试构建一个基本的 dotnet 核心应用程序,并使用 AWS 中提供给我的默认工具进行部署。我目前有以下步骤工作:
签入在运行 yml 文件(它创建我实际运行 Web 应用程序所需的正确文件)的 Ubuntu 映像“aws/codebuild/dot-net:core-2.1”上触发 CodeBuild 构建步骤:
version: 0.2
phases:
build:
commands:
- dotnet restore CMS/CMS.csproj
- dotnet build CMS/CMS.csproj
- dotnet publish CMS/CMS.csproj -o site
artifacts:
files:
- CMS/site/**/*
- CMS/aws-windows-deployment-manifest.json
Run Code Online (Sandbox Code Playgroud)aws-windows-deployment-manifest.json:
{
"manifestVersion": 1,
"deployments": {
"aspNetCoreWeb": [{
"name": "CMS",
"parameters": {
"appBundle": "./site",
"iisPath": "/",
"iisWebSite": "Default Web Site"
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
它可以很好地完成每个步骤,并且我在整个过程中都得到绿色复选标记,但是当我导航到 EB 实例时,仍然显示原始站点,这表明我的应用程序尚未部署。有什么我想念的吗?
我真的希望我能够从签入到完成部署应用程序,而无需修改构建环境,至少现在是这样。
amazon-web-services amazon-elastic-beanstalk .net-core aws-code-deploy aws-codepipeline
我正在尝试为具有蓝绿色部署支持的 AWS ECS编写云形成模板。AWS 最近在 ECS 中添加了这个蓝绿色功能,在云形成模板中找不到任何更新它的参考。他们提供了关于如何通过 UI 而不是通过云形成来做到这一点的文档。我猜,AWS 可能不会更新他们的云形成文档,因为它是一项新功能。任何找到文档的帮助将不胜感激。提前谢谢你。
amazon-web-services amazon-ecs aws-cloudformation blue-green-deployment aws-code-deploy
我正在尝试部署(使用蓝/绿部署控制器)我的 API 的修订版。当我通过创建更新的任务修订和更新服务手动执行此操作时,这工作正常。但是当我尝试使用 CLI 时,当我将 appspec.yml 文件推送到 s3 时,我得到一个返回的 create-deployment 命令。当我尝试使用此命令触发部署时,触发的部署显示在部署部分但失败,我看到的错误是部署指定修订为空文件,但提供的修订为 zip 文件。请帮忙。
我的 NodeJS 应用程序有一个 CD 管道,该管道包含以下步骤:
1) Travis CI 将 master 分支作为 zip 文件上传到 S3
2) Travis CI 触发 AWS CodeDeploy 部署
3) CodeDeploy 获取 .zip 文件,将其解压缩到我的 AWS EC2 并运行应用程序
但是我的 NodeJS 应用程序需要一些环境变量才能运行。由于这些变量的值是敏感的,我将这些变量存储在 TravisCI 的存储库设置中,并且不知道如何将我的环境变量从 Travis 传递到 EC2。
我可以使用envappspec.yml 的属性(用于 CodeDeploy)但我的 env.yml 属性。包含不应在代码存储库中的敏感信息的变量。
是否有任何最佳实践可以通过我的 env. 变量。通过 CodeDeploy 从 Travis 到 EC2 实例?
目前我正在做的是,.env在 Travis 构建期间生成一个文件并将其添加到.zip文件中,因此当应用程序部署到 EC2 时,我可以使用dotenvNodeJS 包访问它们。但我不认为这是最好的方法。
我一直在使用 AWS CodeDeploy 来实时推送我们的应用程序,但执行 BlockTraffic 和 AllowTraffic 步骤总是需要很长时间。目前,我有一个最初带有三个 EC2 节点的应用程序负载均衡器 (ALB)(在一个自动缩放组后面)。因此,如果我执行 CodeDeploy OneAtATime,则整个过程最多需要 25 分钟。
我正在使用它的负载均衡器将连接耗尽设置为 300 秒。我以为是拖出来的原因。但是,我禁用了连接耗尽并得到了相同的结果。然后我启用了 Connection Draining 并将超时设置为 5 秒,但仍然得到相同的结果。
此外,我发现 CodeDeploy 取决于 ALB 运行状况检查设置。根据 AWS 文档
在实例绑定到 ALB 后,CodeDeploy 会在负载均衡器后面等待实例的状态为健康(“inService”)。此运行状况检查由 ALB 完成并取决于运行状况检查配置。
所以我尝试通过为健康检查设置设置低超时和阈值。即使是这些变化也没有大大减少部署时间。
有人可以指导我找到适当的解决方案以加快流程吗?
amazon-ec2 amazon-web-services amazon-elb autoscaling aws-code-deploy
aws-code-deploy ×10
amazon-ec2 ×4
amazon-ecs ×2
amazon-s3 ×2
git ×2
.net-core ×1
amazon-elb ×1
autoscaling ×1
aws-lambda ×1
circleci ×1
github ×1
jenkins ×1
travis-ci ×1