You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK使用CfnOutput导出时丢失下划线,如何适配Amplify配置?

问题根因

CloudFormation 会自动归一化 CfnOutput 的逻辑ID(即构造函数第一个入参),移除所有非字母数字字符,你定义的aws_cognito_region会被自动转为awscognitoregion,这是导出JSON不符合预期的核心原因。

Amplify 分类范围配置规范要求:配置需按服务类别分层嵌套,例如认证相关的Cognito配置需要放在Auth.Cognito层级下,对应字段使用驼峰命名,如region、userPoolId、userPoolClientId等。


方案1:CDK直接生成Amplify配置文件(最优)

完全避开CfnOutput的导出限制,在CDK栈部署阶段直接生成符合规范的配置文件:

import * as fs from 'fs';
import * as path from 'path';
import * as cdk from 'aws-cdk-lib';
// 其他资源引入

export class YourStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 你的其他资源定义,比如Cognito用户池、客户端等
    // const userPool = new cognito.UserPool(this, 'UserPool');
    // const userPoolClient = new cognito.UserPoolClient(this, 'UserPoolClient');

    // 栈构造函数末尾添加以下代码
    const amplifyConfig = {
      Auth: {
        Cognito: {
          region: cdk.Stack.of(this).region,
          // 按需添加其他配置项
          // userPoolId: userPool.userPoolId,
          // userPoolClientId: userPoolClient.userPoolClientId,
        }
      }
    };

    // 写入到前端项目的对应路径
    const outputPath = path.resolve(__dirname, '../../debug-frontend/src/amplifyconfiguration.json');
    fs.writeFileSync(outputPath, JSON.stringify(amplifyConfig, null, 2));
  }
}

不需要再使用--outputs-file参数,部署后直接生成可用的Amplify配置。


方案2:调整CfnOutput命名+转换脚本

如果需要保留CfnOutput导出能力,可按以下步骤操作:

  1. 调整CfnOutput的逻辑ID,避免使用特殊字符:
new cdk.CfnOutput(this, 'cognitoRegion', {
  value: cdk.Stack.of(this).region,
})
  1. 部署导出后,执行转换脚本将导出的JSON转为Amplify要求的结构:
    在前端项目根目录新建convert-cdk-output.js:
const fs = require('fs');
const cdkOutputs = require('./src/cdk-config.json');
const stackOutputs = cdkOutputs[Object.keys(cdkOutputs)[0]];

const amplifyConfig = {
  Auth: {
    Cognito: {
      region: stackOutputs.cognitoRegion,
      // 其他配置项对应映射即可
    }
  }
};

fs.writeFileSync('./src/amplifyconfiguration.json', JSON.stringify(amplifyConfig, null, 2));
  1. 可以把部署和转换合并为一条命令:
cdk deploy --outputs-file ../debug-frontend/src/cdk-config.json && cd ../debug-frontend && node convert-cdk-output.js

内容的提问来源于stack exchange,提问作者Armen Babakanian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:06