我有一个从 SSM 参数读取值的代码,该参数将在 codebuild 项目中构建。第一次运行时,该值尚不存在,因此我编写了一个逻辑来捕获错误并且应该继续,但即使有了逻辑,我仍然得到
SSM parameter not available in account 1234, region us-east-1: /api-endpoint error stops the codebuild project error
下面是代码
let apiEndpoint: string;
try {
apiEndpoint = ssm.StringParameter.valueFromLookup(this, `api-endpoint`)
} catch (error: any) {
if (error.message.includes('ParameterNotFound')) {
// Handle the case where the parameter doesn't exist yet
console.warn('SSM parameter "api-endpoint" not found. Using default value.');
apiEndpoint = 'default-value';
} else {
// Handle other errors
throw error;
}
}
这是行不通的。 请注意,
ssm.StringParameter.valueFromLookup(this, 'api-endpoint')
行不需要 await
语句。这是因为该行实际上并不执行任何对 AWS 的请求来验证参数是否存在。因此,它实际上不会抛出任何错误。您的 CDK 进程仅构建一个 CloudFormation 模板,该模板插入包含对此参数的引用。那么实际的错误来自于完全超出您控制范围的整个独立过程。
如果要在堆栈中导入 SSM 值,该值必须事先存在。实现此目的的一种方法可能是创建一个完整的单独堆栈来初始化参数,以便您可以在此处导入它。