如何使用 AWS CDK 更新现有的 SSM 参数
How to update existing SSM Parameter with AWS CDK
我想使用 AWS CDK 更新 SSM 参数。
我的用例:在第一个堆栈中,我正在创建 SSM 参数。在第二个堆栈中想要更新(更改)它。我遇到的一种解决方案是使用 lambda,我想避免使用它。
是一种通过 CDK 更新现有参数的方法,也许是 cfn_param.set_value
第一个堆栈:
class ParamSetupStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
ssm.StringParameter( self,
f'PIPELINE-PARAM-1',
parameter_name="parma-1",
string_value="SOME STRING VALUE",
description="Desctiption of ...."
)
第二个堆栈:
class UpdateParamStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
template = cfn_inc.CfnInclude(self, "Template",
template_file="PATH/TO/ParamSetupStack.json",
preserve_logical_ids=False)
cfn_param = template.get_resource("PIPELINE-PARAM-1")
cfn_param.set_value("NEW VALUE")
您最好的选择是避免此要求。 Cross-stack 资源修改使您的 IaaC 难以推理并引入 deploy-time side-effects。并且让CDK best-practice 神交叉
如果绝对肯定,您可以使用 Custom Resource to change a resource defined in another stack. The AwsCustomResource 构造(在幕后使用 lambda)可以在部署生命周期中执行任意 SDK 命令。
备注:
- Class 方法如
from_string_parameter_name
是 import read-only versions of existing resources 的惯用方法。这些对你的情况没有帮助。
- 解析一个 CDK-generated 模板,就像在 OP 中一样,是一个 anti-pattern,无论如何都不能解决你的问题。
我想使用 AWS CDK 更新 SSM 参数。
我的用例:在第一个堆栈中,我正在创建 SSM 参数。在第二个堆栈中想要更新(更改)它。我遇到的一种解决方案是使用 lambda,我想避免使用它。
是一种通过 CDK 更新现有参数的方法,也许是 cfn_param.set_value
第一个堆栈:
class ParamSetupStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
ssm.StringParameter( self,
f'PIPELINE-PARAM-1',
parameter_name="parma-1",
string_value="SOME STRING VALUE",
description="Desctiption of ...."
)
第二个堆栈:
class UpdateParamStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
template = cfn_inc.CfnInclude(self, "Template",
template_file="PATH/TO/ParamSetupStack.json",
preserve_logical_ids=False)
cfn_param = template.get_resource("PIPELINE-PARAM-1")
cfn_param.set_value("NEW VALUE")
您最好的选择是避免此要求。 Cross-stack 资源修改使您的 IaaC 难以推理并引入 deploy-time side-effects。并且让CDK best-practice 神交叉
如果绝对肯定,您可以使用 Custom Resource to change a resource defined in another stack. The AwsCustomResource 构造(在幕后使用 lambda)可以在部署生命周期中执行任意 SDK 命令。
备注:
- Class 方法如
from_string_parameter_name
是 import read-only versions of existing resources 的惯用方法。这些对你的情况没有帮助。 - 解析一个 CDK-generated 模板,就像在 OP 中一样,是一个 anti-pattern,无论如何都不能解决你的问题。