Fel*_*lix 9 amazon-web-services aws-cdk
使用 aws cdk 生成 cloudformation 模板时:
\ncdk synth\n
Run Code Online (Sandbox Code Playgroud)\n我总是得到:
\n "Parameters": {\n "BootstrapVersion": {\n "Type": "AWS::SSM::Parameter::Value<String>",\n ...\n
Run Code Online (Sandbox Code Playgroud)\n这里是代码:
\nimport * as cdk from 'aws-cdk-lib';\nimport { Stack } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport * as sqs from 'aws-cdk-lib/aws-sqs';\n\nexport class MyStack extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n \n const queue = new sqs.Queue(this, 'Example', {\n visibilityTimeout: cdk.Duration.seconds(300)\n });\n }\n};\n\nconst app = new cdk.App();\nnew MyStack(app, 'MyStack');\n\n
Run Code Online (Sandbox Code Playgroud)\n完整输出(一些缩短......):
\n$ cdk synth \nResources:\n ExampleA925490C:\n Type: AWS::SQS::Queue\n Properties:\n VisibilityTimeout: 300\n UpdateReplacePolicy: Delete\n DeletionPolicy: Delete\n Metadata:\n aws:cdk:path: MyStack/Example/Resource\n CDKMetadata:\n Type: AWS::CDK::Metadata\n Properties:\n Analytics: v2:deflate64:H4sIAAAAAAAA/zPSM9EzUEwsL9ZNTsnWzclM0qsOLklMztYBCsUXFxbrVQeWppam6jin5YEZtSBWUGpxfmlRMljUOT8vJbMkMz+vVicvPyVVL6tYv8zQTM8YaGpWcWamblFpXklmbqpeEIQGAChZc6twAAAA\n Metadata:\n aws:cdk:path: MyStack/CDKMetadata/Default\n Condition: CDKMetadataAvailable\nConditions:\n CDKMetadataAvailable:\n Fn::Or:\n - Fn::Or:\n - Fn::Equals:\n - Ref: AWS::Region\n - af-south-1\n ...\n - Fn::Or:\n - Fn::Equals:\n - Ref: AWS::Region\n - us-west-1\n ...\nParameters:\n BootstrapVersion:\n Type: AWS::SSM::Parameter::Value<String>\n Default: /cdk-bootstrap/hnb659fds/version\n Description: Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]\nRules:\n CheckBootstrapVersion:\n Assertions:\n - Assert:\n Fn::Not:\n - Fn::Contains:\n - - "1"\n - "2"\n - "3"\n - "4"\n - "5"\n - Ref: BootstrapVersion\n AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.\n
Run Code Online (Sandbox Code Playgroud)\n这里的环境:
\n$ cdk doctor\n\xe2\x84\xb9\xef\xb8\x8f CDK Version: 2.8.0 (build 8a5eb49)\n\xe2\x84\xb9\xef\xb8\x8f AWS environment variables:\n - AWS_PAGER = \n - AWS_DEFAULT_PROFILE = sbxb.admin\n - AWS_STS_REGIONAL_ENDPOINTS = regional\n - AWS_NODEJS_CONNECTION_REUSE_ENABLED = 1\n - AWS_SDK_LOAD_CONFIG = 1\n\xe2\x84\xb9\xef\xb8\x8f No CDK environment variables\n\n
Run Code Online (Sandbox Code Playgroud)\n如何摆脱那个cloudformation参数?\n我只想使用CDK来创建一个cloudformation模板。
\n后来我想将该模板与服务目录一起使用,并且不希望BootstrapVersion
暴露参数,也不需要它。
Fel*_*lix 14
这里修改后的代码有效:
import * as cdk from 'aws-cdk-lib';
import { DefaultStackSynthesizer, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as sqs from 'aws-cdk-lib/aws-sqs';
export class MyStack extends Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const queue = new sqs.Queue(this, 'Example', {
visibilityTimeout: cdk.Duration.seconds(300)
});
}
};
const app = new cdk.App();
new MyStack(app, 'MyStack' , {
synthesizer: new DefaultStackSynthesizer({
generateBootstrapVersionRule: false
})
});
Run Code Online (Sandbox Code Playgroud)
正如另一个答案所提到的,必须使用 覆盖 DefaultStackSynthesizer generateBootstrapVersionRule: false
。
编辑:更新了答案以提及generateBootstrapVersionRule
参数。有关代码,请参阅@Felix 的答案。
默认情况下,使用时,所有模板中都包含以下内容DefaultStackSynthesizer
:
"Parameters": {
"BootstrapVersion": {
"Type": "AWS::SSM::Parameter::Value<String>",
"Default": "/cdk-bootstrap/hnb659fds/version",
"Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
}
},
"Rules": {
"CheckBootstrapVersion": {
"Assertions": [
{
"Assert": {
"Fn::Not": [
{
"Fn::Contains": [
[
"1",
"2",
"3",
"4",
"5"
],
{
"Ref": "BootstrapVersion"
}
]
}
]
},
"AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
BootstrapVersion
CDK 使用该参数和关联规则来检查您环境中部署的Bootstrap 堆栈的版本。如果您确信您的堆栈不需要引导或者您拥有正确的BootstrapVersion
. 该参数不在堆栈中的其他任何地方使用。
默认情况下,CDK v2 使用,DefaultStackSynthesizer
因此该参数将始终包含在内。避免这种情况的一种方法是创建一个generateBootstrapVersionRule
参数值为 false 的自定义对象(请参阅 Felix 的代码答案)。或者,也可以在实例化 CDK 时指定LegacyStackSynthesizer
以避免创建参数,但这会对堆栈的综合方式以及引导堆栈的使用方式进行一些更改。下面的 v1 文档链接中给出了差异表。
CDK v1 则相反,LegacyStackSynthesizer
默认使用。
参考
归档时间: |
|
查看次数: |
5042 次 |
最近记录: |