问题描述
我很难用 Beanstalk 和 Codepipeline 设置自动化...
我终于让它运行了,主要问题是触发 Codepipeline
开始的 S3 Cloudwatch 事件。我错过了必要的 Cloudtrail 部分,但在任何文档中都找不到。
所以当前的设置是: S3 文件被上传 -> CloudWatch 事件触发 Codepipeline -> Codepipeline 部署到 ElasticBeanstalk 环境。
正如我所说,要获得 CloudWatch 事件触发器,您需要一个 Cloudtrail
跟踪,例如:
resource "aws_cloudtrail" "example" {
# ... other configuration ...
name = "codepipeline-source-trail" #"codepipeline-${var.project_name}-trail"
is_multi_region_trail = true
s3_bucket_name = "codepipeline-cloudtrail-placeholder-bucket-eu-west-1"
event_selector {
read_write_type = "writeonly"
include_management_events = true
data_resource {
type = "AWS::S3::Object"
values = ["${data.aws_s3_bucket.bamboo-deploy-bucket.arn}/${var.project_name}/file.zip"]
}
}
}
但这只是为了创建一个新路径。问题是 AWS 最多只允许 5 个路径。在 AWS console
上,您可以向一条轨迹添加多个数据事件,但我无法在 terraform 中做到这一点。我尝试使用相同的名称,但这只会引发错误
“创建 CloudTrail 时出错:TrailAlreadyExistsException:客户的跟踪代码管道源跟踪已存在:XXXX”
我已尽力解释我的问题。不确定是否可以理解。
简而言之:我想在带有 terraform 的现有 cloudtrail 路径中添加一个 data events:S3
。
感谢帮助, 丹尼尔
解决方法
正如我所说,要获得 CloudWatch Event 触发器,您需要一个 Cloudtrail 跟踪,例如:
您不需要多个 CloudTrail
来调用 CloudWatch 事件。您也可以创建特定于服务的规则。
Create a CloudWatch Events rule for an Amazon S3 source (console)
从 CloudWatch
事件规则调用 CodePipeline
作为目标。假设您创建了此事件规则
{
"source": [
"aws.s3"
],"detail-type": [
"AWS API Call via CloudTrail"
],"detail": {
"eventSource": [
"s3.amazonaws.com"
],"eventName": [
"PutObject"
]
}
}
您添加 CodePipeline
作为此规则的目标,最终,Codepipeline 部署到 ElasticBeanstalk 环境。
您是否尝试将多个 data_resources 添加到当前跟踪而不是添加具有相同名称的新跟踪:
resource "aws_cloudtrail" "example" {
# ... other configuration ...
name = "codepipeline-source-trail" #"codepipeline-${var.project_name}-trail"
is_multi_region_trail = true
s3_bucket_name = "codepipeline-cloudtrail-placeholder-bucket-eu-west-1"
event_selector {
read_write_type = "WriteOnly"
include_management_events = true
data_resource {
type = "AWS::S3::Object"
values = ["${data.aws_s3_bucket.bamboo-deploy-bucket.arn}/${var.project_A}/file.zip"]
}
data_resource {
type = "AWS::S3::Object"
values = ["${data.aws_s3_bucket.bamboo-deploy-bucket.arn}/${var.project_B}/fileB.zip"]
}
}
}
您应该能够添加最多 250 个数据资源(在一个跟踪中的所有事件选择器中),以及最多 5 个事件选择器到您当前的跟踪 (CloudTrail quota limits)