1

原始要求

在 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 中提供什么服务以便它接受?

在此处输入图像描述

4

1 回答 1

2

根据评论,

事件的 URI 应该如下所示:

arn:aws:apigateway:${AWS::Region}:events:action/PutEvents

于 2021-02-19T13:06:09.633 回答