要在 AWS CDK 中获取在另一个栈中定义的 API 的 HttpRoute,可以使用 StackReference 和 Fn.importValue 方法。以下是示例代码:
首先,在要导入 HttpRoute 的栈中,将其输出为导出值:
from aws_cdk import (
core,
aws_apigatewayv2 as apigw
)
class MyStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
apigw.HttpApi(self, "MyHttpApi") # Example HttpApi
apigw_output = core.CfnOutput(self, "MyHttpApiOutput", value=my_api.http_api_id)
apigw_output.export_name = "MyHttpApiId"
接下来,在另一个栈中导入该输出值,然后使用 StackReference 和 Fn.importValue 方法获取 HttpRoute:
from aws_cdk import (
core,
aws_apigatewayv2 as apigw,
aws_cloudformation as cfn
)
class MyOtherStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
http_api_id = cfn.Fn.import_value("MyHttpApiId")
http_api_stack = cfn.StackReference(self, "MyHttpApiStack", stack_name="MyHttpApiStack")
http_api = apigw.HttpApi.from_api_id(self, "MyHttpApi", http_api_id, http_api_stack)
http_api_route = http_api.get_route("MyRoute") # Example route name
在代码中,我们首先从 CloudFormation 中导入输出值 "MyHttpApiId",它是在 MyStack 中定义的 HttpApi 的 ID。然后,我们使用 StackReference 和该 ID 获取 HttpApi。最后,我们使用 HttpApi 的 get_route 方法获取所需的 HttpRoute。