Amplify自定义资源中CDK引用REST API如何获取rootResourceId
获取API Gateway rootResourceId的实现方法
同CDK应用内创建的API
如果目标REST API是在当前CDK应用中定义的,不需要手动查询ID:
- 同一栈内引用:直接访问RestApi实例自带的
restApiRootResourceId属性即可,示例代码:
// 你的API创建逻辑 const createdRestApi = new apigateway.RestApi(this, 'RestApi', { // 原有API配置 }); // 直接读取属性,无需额外查询 const rootResId = createdRestApi.restApiRootResourceId;
- 跨栈引用:在API所在的栈将
restApiId和restApiRootResourceId通过CfnOutput导出,在消费栈中导入这两个值传入fromRestApiAttributes即可。
已存在的独立API(非当前CDK应用创建)
两种获取方式:
- 直接使用固定值:所有API Gateway REST API的根路径(
/)对应的资源ID固定为字符串root,直接传入即可正常调用root相关方法,示例:
const restApi = apigateway.RestApi.fromRestApiAttributes(this, 'RestApi', { restApiId: dependencies.api.rest.ApiId, rootResourceId: 'root' }); // 后续创建/webhooks路径的逻辑可以正常执行 const queueResource = restApi.root.resourceForPath('/webhooks');
- CLI查询方式(极少数固定值不生效的场景使用):执行以下命令,替换占位符为实际的API ID即可拿到根资源ID:
aws apigateway get-resources --rest-api-id 替换为你的REST_API_ID --query "items[?path=='/'].id" --output text
拿到完整的RestApi引用后,即可正常给/webhooks路径创建SQS集成,把端点直接指向SQS而不需要Lambda中转。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

