当前位置: 首页 > 知识库问答 >
问题:

如何使用AWS CDK查找现有的ApiGateway

伍光济
2023-03-14

我正在使用AWS CDK来构建我的lambda,我想从lambda的CDK堆栈中注册endpoint。

我发现我可以使用fromRestApiId(scope,id,restApiId)获得现有的ApiGateway构造(这里有文档)

所以目前这工作得很好:

    //TODO how to look up by ARN instead of restApiId and rootResourceId??
    const lambdaApi = apiGateway.LambdaRestApi
                                .fromRestApiAttributes(this, generateConstructName("api-gateway"), {
                                    restApiId: <API_GATEWAY_ID>,
                                    rootResourceId: <API_GATEWAY_ROOT_RESOURCE_ID>,
                                });

    const lambdaApiIntegration = new apiGateway.LambdaIntegration(lambdaFunction,{
        proxy: true,
        allowTestInvoke: true,
    })

    const root = lambdaApi.root;

    root.resourceForPath("/v1/meeting/health")
        .addMethod("GET", lambdaApiIntegration);

但我想部署到许多AWS帐户和许多地区。我不想为每个帐户区域对硬编码API\U GATEWAY\U ID或API\U GATEWAY\U ROOT\U RESOURCE\U ID。

是否有更通用的方法来获取现有的ApiGateway构造(例如通过名称或ARN)?

先谢谢你。

共有1个答案

柴华灿
2023-03-14

让我们使用一个简单的Api和一个资源

const restApi = new apigw.RestApi(this, "my-api", {
  restApiName: `my-api`,
});
const mockIntegration = new apigw.MockIntegration();
const someResource = new apigw.Resource(this, "new-resource", {
  parent: restApi.root,
  pathPart: "somePath",
  defaultIntegration: mockIntegration,
});
someResource.addMethod("GET", mockIntegration);

假设我们想在另一个堆栈中使用这个api和资源,我们首先需要导出

new cdk.CfnOutput(this, `my-api-export`, {
  exportName: `my-api-id`,
  value: restApi.restApiId,
});

new cdk.CfnOutput(this, `my-api-somepath-export`, {
  exportName: `my-api-somepath-resource-id`,
  value: someResource.resourceId,
});

现在我们需要导入新的堆栈

const restApi = apigw.RestApi.fromRestApiAttributes(this, "my-api", {
  restApiId: cdk.Fn.importValue(`my-api-id`),
  rootResourceId: cdk.Fn.importValue(`my-api-somepath-resource-id`),
});

只需添加额外的资源和方法

const mockIntegration = new apigw.MockIntegration();
new apigw.Resource(this, "new-resource", {
  parent: restApi.root,
  pathPart: "new",
  defaultIntegration: mockIntegration,
});
 类似资料:
  • 问题内容: 当我在.java文件中时,未使用的代码通常显示为灰色或带有绿色下划线,表示该代码可能(可能由于某些奇怪的JNI / Reflection极端情况)未使用。但是我有一个包含成千上万个Java文件的项目,我想找到所有此类可能未使用的代码的实例。如何在IntelliJ IDEA中做到这一点? 问题答案: 只需在启用适当检查的情况下 使用即可 ( “声明冗余” 组下的 “ 未使用的声明 ” )

  • 问题内容: 我正在尝试从具有命名空间的Word文档中查找所有内容,但我不知道语法到底是什么。 这些文档仅涵盖了非常简单的情况,并加入了URN和VML组合,我似乎无法从网上看到我能看到的任何示例。有人碰巧知道这是什么吗? 我正在尝试做这样的事情: 编辑:@aneroid写的是1000%正确的答案,超级有帮助。您应该对此投票。就是说,在理解了所有内容之后- 我接受了BS4的答案,因为它完全按照我的要求

  • 以下数据存储在我的收藏中 我为find和这是我从req获得的数据。我在这里提到的身体是一个疑问 我希望这个res.json应该只返回这两个文档 在mongoDB我们可以这样写 我想要nodejs中的解决方案,因为根据请求我们需要找到帮助我

  • 问题内容: 我有以下代码: 在同一工作区,我有以下课程 如果我单击鼠标右键(首先提到)并选择“打开呼叫层次结构”,那么我什么也看不到。 如何在Eclipse中找到这种用法? 问题答案: 右键单击Myclass,在project | workspace中找到引用。 打开调用层次结构,打开继承层次结构。

  • 问题内容: 我有一个类的变量。我希望调用以返回相应的元素以及this的所有父元素。我该怎么做呢? 问题答案: 如果我正确理解了您的问题,则需要先找到元素,然后再找到父元素,直到找到根为止。 您可以使用XPath来获取父元素,直到到达页面根目录为止。所以像这样: (可选)您可以在元素上停下来,而不是一个。 还要注意,这是相当慢的,特别是如果其嵌套的元素很深。更快的替代方法是使用运行使用相同逻辑的ja

  • 我写了一个二叉查找树 二进制节点: 二叉树: 姓名: 现在我可以很容易地在Main中创建一个二叉树,如下所示: 但如果我想做一些事情,比如: 然后我会得到一个编译错误,除非我在BinaryNode和BinaryTree类中更改Comparable to Comparable,我觉得我对泛型没有很好的理解,所以如果有人能澄清我所做的是什么错误的话。还有任何能帮助我更好、正确使用泛型的东西,那就太好了