Я использую terraform для создания триггера события CloudWatch с типом запуска ECS Fargate, источником которого является S3. Когда я использую поле input_transformer
для передачи сегмента и ключа в задачу ECS, мое правило события приводит к неудачному вызову.
Это aws_cloudwatch_event_rule
:
resource "aws_cloudwatch_event_rule" "event_rule" {
name = "dev-gnss-source-put-rule-tf"
description = "Capture S3 events on uploads bucket"
event_pattern = <<PATTERN
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject"
],
"requestParameters": {
"bucketName": [
"example-bucket-name"
]
}
}
}
PATTERN
}
Это aws_cloudwatch_event_target
:
resource "aws_cloudwatch_event_target" "event_target" {
target_id = "dev-gnss-upload-event-target-tf"
arn = "example-cluster-arn"
rule = aws_cloudwatch_event_rule.event_rule.name
role_arn = aws_iam_role.uploads_events.arn
ecs_target {
launch_type = "FARGATE"
task_count = 1 # Launch one container / event
task_definition_arn = "example-task-definition-arn"
network_configuration {
subnets = ["example-subnet"]
security_groups = []
}
}
input_transformer {
input_paths = {
s3_bucket = "$.detail.requestParameters.bucketName"
s3_key = "$.detail.requestParameters.key"
}
input_template = <<TEMPLATE
{
"containerOverrides": [
{
"name": "myproject-task",
"environment": [
{ "name": "S3_BUCKET", "value": <s3_bucket> },
{ "name": "S3_KEY", "value": <s3_key> }
]
}
]
}
TEMPLATE
}
}
Если я удалю раздел input_transformer
, он будет работать нормально, но мне нужно передать ведро s3 и ключ для обработки конкретного файла.
Мое обоснование для этого состоит в том, чтобы устранить необходимость в промежуточной лямбде, и я руководствовался этим сообщением на Medium: https://medium.com/@bowbaq / trigger-an-ecs-job-when-an-s3-upload-completetes -3559c44c37d1
Любые советы приветствуются.