来自 Uri 属性documentation:
如果您为 Type 属性指定 AWS,请指定遵循以下格式的 AWS 服务:arn:aws:apigateway:region:subdomain.service|service:path|action/service_api。例如,Lambda 函数 URI 遵循以下形式:arn:aws:apigateway:region:lambda:path/path。该路径的格式通常为 /2015-03-31/functions/LambdaFunctionARN/invocations。有关更多信息,请参阅 Amazon API Gateway REST API 参考中的 Integration 资源的 uri 属性。
来自另一个 AWS documentation 的更多描述和示例:
从这些文档示例和描述中,似乎有 2 种类型的 API - 基于操作和基于路径。
使用基于动作的 API ?
我认为大多数人(如果不是全部)都支持这一点。虽然这些操作在 IAM 设置和所有 API 文档中都可用,但所有 AWS 服务都是 web 服务,也就是它们具有 API 接口并且这些接口使用操作。如果某些服务有误,请纠正我,但我认为通过遵循这种结构应该可以对任何与 API Gateway 服务集成的服务进行任何调用。
有时需要使用路径 API ?
正在尝试使用 PutObject 将文件上传到 S3,但出现错误:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<Method>PUT</Method>
<ResourceType>SERVICE</ResourceType>
<RequestId>....</RequestId>
<HostId>....=</HostId>
</Error>
替换为路径 API 格式并成功了。所以这里的学习是我将继续尝试首先使用操作 API,如果不能用于特定操作 - 切换到路径 API,同时我觉得操作 API 更具声明性。
示例结构 Action API:
arn:aws:apigateway:us-east-1:SERVICE_NAME:action/ACTION_NAME&Var1=Value1&Var2=Value2
对 S3 服务的调用示例。操作名称 - GetObject。此 API 操作的文档说有 2 个必需的属性 - 存储桶(存储桶名称)和密钥。如此完整的示例 URI:
arn:aws:apigateway:us-east-1:s3:action/GetObject&Bucket=myDemoBucket1&Key=some/path/to/file
与路径 API 相同:
arn:aws:apigateway:us-east-1:s3:path/myDemoBucket1/some/path/to/file
我找到了一种获取样品的方法。使用控制台 UI,制作端点,部署到某个阶段并进入阶段,选择导出选项卡,然后导出为 Yaml 格式的 Swagger + API Gateway Extensions。虽然我将 Yaml 与 cloudformation 一起使用。在那个 Yaml 里面有你需要的一切。如果没有“阶段”,请转到“资源”并从下拉列表中选择部署并在对话框中创建阶段。
以下是我为主要服务找到的一些不同示例:
调用 Lambda docs:
arn:aws:apigateway:api-region:lambda:path//2015-03-31/functions/arn:aws:lambda:lambda-region:account-id:function:lambda-function-name /调用
路径部分似乎映射到来自API docs 的 API 操作:
DynamoDB blog post
您需要通过 API Action 文档 + Api Action 名称 + IntegrationRequest 模板使用 HTTP 方法来调用 DynamoDB。
查询操作的示例 URI:
arn:aws:apigateway:us-east-1:dynamodb:action/Query
社交网络blog post
示例 URI:arn:aws:apigateway:region:sns:action/Publish
带地区:arn:aws:apigateway:us-east-1:sns:action/Publish
需要通过 URL Query String Parameters 传入 TopicArn 和 Message 等参数。该主题有很好的线程:https://stackoverflow.com/a/64268791/1737158
https://docs.aws.amazon.com/sns/latest/api/API_Publish.html#API_Publish_Examples