如何在CloudFormation的CloudWatch Dashboard中动态引用AWS HTTP API(v2)的ID
解决Serverless框架中动态引用HTTP API ID到CloudWatch Dashboard的问题
问题场景
使用Serverless框架构建AWS HTTP API(API Gateway v2)时,需通过CloudFormation模板创建CloudWatch Dashboard展示该API的监控指标。但HTTP API的CloudWatch指标仅支持通过API ID查询,而API ID在每次部署时可能变更,无法硬编码到模板中,需要动态获取并传递这个ID。
解决方案
Serverless框架在创建HTTP API时,会自动生成名为HttpApi的CloudFormation资源。可以通过CloudFormation的字符串替换函数Fn::Sub动态引用该资源的ID,实现部署时自动注入当前API的ID,无需硬编码。
修改后的完整代码示例
provider: httpApi: metrics: true resources: Resources: MyDashboard: Type: AWS::CloudWatch::Dashboard Properties: DashboardName: MyDashboard DashboardBody: !Sub | { "widgets": [ { "type": "metric", "properties": { "metrics": [ [ "AWS/ApiGateway", "4xx", "Resource", "/{proxy+}", "Stage", "$default", "Method", "ANY", "ApiId", "${HttpApi}", { "yAxis": "left" } ] ], "view": "bar", "stacked": false, "region": "us-west-2", "period": 300, "stat": "Sum", "setPeriodToTimeRange": true } } ] }
关键说明
!Sub函数会自动将字符串中的${HttpApi}替换为Serverless创建的HTTP API的实际ID。- 使用
|符号保留JSON字符串的格式,避免因换行或空格导致语法错误。 - 确保
provider.httpApi.metrics设为true,保证HTTP API自动向CloudWatch推送指标数据。
内容的提问来源于stack exchange,提问作者Roco CTZ
相关产品推荐
相关产品推荐

