amazon-web-services - AWS CloudWatch 触发 CodePipeline 执行在一个账户中有效,但在另一个账户中无效
问题描述
我们使用两个 AWS 账户,一个用于开发 (dev),一个用于生产 (prod),一个用于主 AWS CodePipeline。
这个主要管道 -目前在 prod 中运行- 正在将我们的应用程序构建到 Docker 映像中并将其推送到 dev 中的 ECR 存储库,并且应该从那里触发一个单独的管道以开始部署到 dev 中的 ECS。如果在 ECS 开发中部署成功,则在管道 1 中有一个手动批准步骤,以将容器提升到 ECR 产品,这会触发部署到 ECS 产品。
现在有一个问题:
我们正在使用 CloudWatch 事件规则来触发两个部署管道,并且该规则正在检查来自 CloudTrail的“PutImage”事件。
这仅适用于在 prod 中放入 ECR 的图像,但不适用于在 dev 中。规则根本不会触发,尽管我可以在开发中看到 Cloudtrail 中的事件。
可能是什么问题?使用 Terraform,dev 和 prod 的设置是相同的。
我首先认为在 prod 中运行的管道可能需要能够向开发人员发送事件(https://aws.amazon.com/about-aws/whats-new/2017/06/cloudwatch-events-adds-cross -account-event-delivery-support/),但这不太可能,因为我已经可以在 CloudTrail dev 中看到这些事件。
可能是因为管道本身正在生产中运行吗?
管道 1:应用程序 git -> Docker 构建并推送到 dev ECR - 如果在 dev 中部署成功:手动批准 -> 推送到 prod ECR
管道 2(未触发) Alibi git 源 -> 从 ECR 开发人员获取最新图像标签,输出 imagedefinitions.json -> 输入 imagedefinitions.json,部署到 ECS 开发人员
管道 3(手动批准后正确触发)Alibi git 源 -> 从 ECR pro 获取最新图像标签,输出 imagedefinitions.json -> 输入 imagedefinitions.json,部署到 ECS prod
我们使用的是不在场证明的 git 源代码,因为 Codepipeline 在开始时需要一个源代码;所以我们正在检查一个 repo,但是从 ECR 获取最新的图像标签是这里重要的一步。
适用于 prod 但不适用于 dev的 Cloudwatch 事件规则:
resource "aws_cloudwatch_event_rule" "latest_image" {
name = "latest-image"
description = "Capture push to ECR"
event_pattern = <<PATTERN
{
"source": [
"aws.ecr"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"ecr.amazonaws.com"
],
"eventName": [
"PutImage"
],
"awsRegion": [
"${var.region}"
],
"requestParameters": {
"repositoryName": [
"${var.application_name}"
],
"registryId": [
"${var.account_id}"
]
}
}
}
非常感谢您的帮助!
解决方案
推荐阅读
- mongodb - 试图让 Mongo Compass 在 CENTOS 7 上工作
- python - Python Meteostat 站不断抛出错误
- python - 整体嵌套边缘检测 OpenCv Python 中的 hed[0,0] 是什么?
- wordpress - Woocommerce:如何在结帐页面上显示唯一一种付款方式的输入收音机?
- java - 设置 JPackage 安装程序,它不会覆盖较新版本中的配置文件
- javascript - 在前端下载ANSI zip文件,由C#后端生成
- javascript - slug 后生成新页面
- c - 从文本文件中读取字符并存储到结构数组中
- vba - 访问 VBA 查询提取并命名
- list - 如何在飞镖中深度复制嵌套列表?