通过 CDK 创建 CfnDeployment 时如何检索 apiId?

How do I retrieve the apiId when creating a CfnDeployment via CDK?

我正在使用 aws-cdk-lib 版本 2 创建 CloudFormation 堆栈。我定义我的 API 如下:

const api = new apigatewayv2.CfnApi(this, 'MyApi', { body: YAML.parse(apiSpec), failOnWarnings: true });

这在部署时成功创建了我的 API。现在我想自动为此 API 创建一个舞台。这就是我正在尝试的:

new apigatewayv2.CfnStage(this, 'dev-stage', {
  stageName: 'dev',
  apiId: '???????', // <--- How do I find this value?
  autoDeploy: true,
});

如您所见,创建 CfnStage 时所需的参数之一是 apiId,它似乎无法通过之前创建的 CfnApi 对象使用(有一个 logicalId 属性,但这不是 CfnStage 期望的值)。

CDK 脚本运行我可以在 AWS 控制台上找到正确的值,但是如果我尝试自动创建通过 CDK 的舞台全部在一次部署中。

所以:在创建 CfnStage 时如何确定正确的 apiId 而不必已经部署 API?

使用Ref.

AWS::ApiGatewayV2::Api CloudFormation docs: Ref: When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the API ID, such as a1bcdef2gh.

// synth-time token, deploy-time string
const apiId = cdk.Fn.ref(api.logicalId);