You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过EventBridge传递S3触发元数据至ECS Fargate任务遇空值问题

问题:EventBridge传递S3桶名和对象键到ECS Fargate任务为空,导致Python脚本执行失败

尝试通过EventBridge将触发事件的S3存储桶名称和对象键传递给ECS Fargate任务时,获取到的环境变量为空字符串,导致Python脚本调用S3接口时参数验证失败,最终通过修改InputPathsMap中的路径解决问题。

错误配置代码

aws events put-targets --rule s3-to-rds --targets '{"Id": "", "Arn": "ecs cluster ARN", "RoleArn": "eventbridge role ARN with permissions", "EcsParameters": {"TaskDefinitionArn": "task ARN", "TaskCount": 1, "LaunchType": "FARGATE", "NetworkConfiguration": {"awsvpcConfiguration": {"Subnets": [""], "AssignPublicIp": "DISABLED"}}, "Group": "default"}, "InputTransformer": {"InputPathsMap": {"s3-bucket": "$.detail.requestParameters.bucketName", "s3-key": "$.detail.requestParameters.key"}, "InputTemplate": "{\"containerOverrides\": [{\"name\": \"containername\", \"environment\": [{\"name\": \"S3_BUCKET_NAME\", \"value\": \"<s3-bucket>\"}, {\"name\": \"S3_OBJECT_KEY\", \"value\": \"<s3-key>\"}]}]}"}}'

Python代码片段

import os
import logging
import boto3

S3_BUCKET_NAME = os.environ.get('S3_BUCKET_NAME')
logging.info(f"S3_BUCKET_NAME: {S3_BUCKET_NAME}")
S3_OBJECT_KEY = os.environ.get('S3_OBJECT_KEY')
logging.info(f"S3_OBJECT_KEY: {S3_OBJECT_KEY}")

s3 = boto3.client('s3')
response = s3.get_object(Bucket=S3_BUCKET_NAME, Key=S3_OBJECT_KEY)

(注:原代码中第二个日志打印的变量名存在错误,已修正为S3_OBJECT_KEY)

CloudTrail报错日志

August 30, 2023 at 17:03 (UTC+2:00) response = handler(**kwargs)    tess
...
botocore.exceptions.ParamValidationError: Parameter validation failed:  tess
Invalid bucket name "<$s3-bucket>": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:(s3|s3-object-lambda):[a-z\-0-9]*:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$"    tess
...
2023-08-30 15:03:52,840 - INFO - S3_BUCKET_NAME:    tess
2023-08-30 15:03:52,840 - INFO - S3_BUCKET_NAME:    tess

解决方法

将InputPathsMap中的路径修改为S3事件正确的JSON结构路径:

  • 原路径:"s3-bucket": "$.detail.requestParameters.bucketName" → 修改为 "s3-bucket": "$.detail.bucket.name"
  • 原路径:"s3-key": "$.detail.requestParameters.key" → 修改为 "s3-key": "$.detail.object.key"

修正后的配置代码:

aws events put-targets --rule s3-to-rds --targets '{"Id": "", "Arn": "ecs cluster ARN", "RoleArn": "eventbridge role ARN with permissions", "EcsParameters": {"TaskDefinitionArn": "task ARN", "TaskCount": 1, "LaunchType": "FARGATE", "NetworkConfiguration": {"awsvpcConfiguration": {"Subnets": [""], "AssignPublicIp": "DISABLED"}}, "Group": "default"}, "InputTransformer": {"InputPathsMap": {"s3-bucket": "$.detail.bucket.name", "s3-key": "$.detail.object.key"}, "InputTemplate": "{\"containerOverrides\": [{\"name\": \"containername\", \"environment\": [{\"name\": \"S3_BUCKET_NAME\", \"value\": \"<s3-bucket>\"}, {\"name\": \"S3_OBJECT_KEY\", \"value\": \"<s3-key>\"}]}]}"}}'

内容的提问来源于stack exchange,提问作者Vandalism

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:33:12