原始要求:
在 AWS Api Gateway 上创建一个路由/路径,将 API Gateway 直接连接到 AWS Event Bridge (Cloudwatch Events) 并将事件放置/推送到它的事件总线上。
从 AWS 控制台完成后,能够创建并执行得很好。
实际问题:
在为此 API Gateway 编写 AWS Cloudformation 脚本时,它看起来像这样:
EventsPostMethod:
Type: AWS::ApiGateway::Method
Properties:
ResourceId:
Ref: EventsResource
RestApiId:
Ref: RestAPI
HttpMethod: POST
AuthorizationType: NONE
Integration:
Type: AWS
IntegrationHttpMethod: POST
Uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:cloudwatchEvents:action/PutEvents
RequestParameters:
integration.request.header.X-Amz-Target: "'AWSEvents.PutEvents'"
RequestTemplate:
some-script-here...
注意 Uri 值:
"arn:aws:apigateway:${AWS::Region}:cloudwatchEvents:action/PutEvents"
arn:aws:apigateway:{region}:{subdomain.service|service}:path|action/{service_api}
根据 AWS Docs的值 uri 应该如下:
对于 AWS 或 AWS_PROXY 集成,URI 的格式为 arn:aws:apigateway:{region}:{subdomain.service|service}:path|action/{service_api}。这里,{Region} 是 API 网关区域(例如,us-east-1);{service} 是集成 AWS 服务的名称(例如 s3);{subdomain} 是特定 AWS 服务支持的指定子域,用于快速查找主机名。action 可用于基于 AWS 服务操作的 API,使用 Action={name}&{p1}={v1}&p2={v2}... 查询字符串。随后的 {service_api} 指的是支持的操作 {name} 以及任何必需的输入参数。或者,路径可用于基于 AWS 服务路径的 API。随后的 service_api 指的是 AWS 服务资源的路径,包括集成 AWS 服务的区域(如果适用)。例如,为了与 GetObject 的 S3 API 集成,
您一定已经注意到我在上面提到的 uri 中将服务替换为cloudwatchEvents。
现在,AWS Cloudformation 控制台在 API 网关发布期间给出的错误:
不支持 cloudwatchEvents 类型的 AWS 服务(服务:AmazonApiGateway;状态代码:400;错误代码:BadRequestException;请求 ID:07bae22c-d198-4595-8de9-6ea23763eff5;代理:null)
现在我尝试用
- 云表
- 事件桥
- cloudwatch事件
- 事件总线
这是真正的问题。我应该在 uri 中提供什么服务以便它接受?