我需要在CDK堆栈下部署到AWS的每个资源上添加deployment_env
标记,其可能值为dev
,test
和prod
,除此之外,所有资源都应该具有相同的属性。我试图使用DEPLOYMENT_ENV
的环境变量,这是很好的工作,除非任何值以外的可能值仍然通过和CDK仍然可以合成和部署任何提供的值。不仅如此,当没有定义环境变量时,typescript编译器不会验证undefined
或null
的值,并且在将值赋给Tag must have a value
的标记时收到错误,这预计会提前失败。下面是代码
#!/usr/bin/env node
import { App, Tags } from 'aws-cdk-lib';
import { EnvInitStack } from '../lib/foo-stack';
const deploymentEnv : 'dev' | 'test' | 'prod' = process.env.DEPLOYMENT_ENV as 'dev' | 'test' | 'prod';
const app = new App();
const fooStack = new FooStack(app, 'FooStack', {});
Tags.of(envInitStack).add('deployment_env', deploymentEnv as string);
- 使用
DEPLOYMENT_ENV=foo cdk synth
命令成功地合成并部署了cdk - 使用
cdk synth
命令收到Error: Tag must have a value
错误
你需要通过js代码而不是类型脚本定义来验证你的值'deploymentEnv'。尝试添加:
if (!['dev','test','prod'].includes(deploymentEnv))
throw ('invalid deploymentEnv tag');