我目前正在尝试通过CDK SSM参数库为我的管道获取参数,但我似乎面临一个奇怪的问题:
CfnParameter at 'nonProdAccountId.Parameter' should be created in the scope of a Stack, but no Stack found
但是,我非常确信我正在堆栈的作用域(BackendPipelineStack
(中获取Parameter值。
//cdk.ts aka my entrypoint
const app = new cdk.App()
...
new BackendPipelineStack(app, "BackendPipelineStack", {
nonProdAccountId: StringParameter.fromStringParameterName(app, "nonProdAccountId", "nonProdAccountId").stringValue,
apiStack,
commonInfraStack,
deploymentStack,
})
我是不是错过了什么?
TIA-
现在,您正在应用程序的范围中导入StringParameter。每个Stack
或Construct
中的第一个参数是作用域。
你可以在应用程序的范围内创建堆栈,但不能在应用程序范围内创建构造——它们必须在堆栈范围内创建。
您需要将导入移动到堆栈中,并使用堆栈作为导入的作用域(传递this
而不是app
(。
所以你会改变
nonProdAccountId: StringParameter.fromStringParameterName(app, "nonProdAccountId", "nonProdAccountId").stringValue,
至
nonProdAccountIdParamName: "nonProdAccountId",
并使用将参数导入堆栈内部
const nonProdAccountId = new StringParameter.fromStringParameterName(this, "nonProdAccountId", nonProdAccountIdParamName).stringValue;