gpt4 book ai didi

python - 如何评估 CDK `CfnOutput`(CloudFormation 输出)值?

转载 作者:行者123 更新时间:2023-12-03 07:14:06 32 4
gpt4 key购买 nike

我正在编写一个工具,它在 cdk 部署后利用 CloudFormation 输出,然后根据这些输出使用配置文件设置开发环境。

在每个核心基础设施组件(auth、db、webapp、存储等)的末尾,我有一个如下所示的 CfnOutput 构造:

cdk.CfnOutput(
self, 'UserPoolID',
value=self.user_pool.user_pool_id,
)

输出类似

Stack.AuthUserPoolIDABC1234 = s1lvgk44ul23ahfd91p4rdngnf

我的目标是将该值 (s1lvgk44ul23ahfd91p4rdngnf) 与其他 CloudFormation 输出中的其他值一起放入配置文件 config.js 中。

所以我围绕 CfnOutput 编写了一个包装器,如下所示:

import os

def cfn_output(scope, prefix, name, value):
cdk.CfnOutput(
scope, name,
value=value,
)

# Save name and value to flat files so that we can read them in other processes
os.makedirs('.tmp', exist_ok=True)
with open(os.path.join('.tmp', f'{prefix}{name}.txt'), 'w') as f:
f.write(value)

所以我用它来代替 CfnOutput ,如下所示:

cfn_output(
scope=self,
prefix='Auth',
name='UserPoolID',
value=self.user_pool.user_pool_id
)

当我运行cdk Synth时,生成的文件(.tmp/AuthUserPoolID.txt)具有以下内容:

${Token[TOKEN.249]}

这显然不是我预期的s1lvgk44ul23ahfd91p4rdngnf

有什么解决方案或变通方法可以将该 token 解析为可用的东西,或者可能是完全不同的解决方案?

最佳答案

相反,我决定使用 SDK 从 CloudFormation 堆栈获取评估的输出。

# Prepare
cloudformation = boto3.client('cloudformation')
stack_name = 'Stack'

# Get stack outputs
res = cloudformation.describe_stacks(StackName=stack_name)
outputs = res['Stacks'][0]['Outputs']

mp = {
'ApiURL': '',
'AuthUserPoolClientID': '',
'AuthUserPoolID': '',
'DatabaseName': '',
'StorageHostingBucketName': '',
'WebappURL': '',
}

# Parse stack output names
for output in outputs:
ok = output['OutputKey']
ov = output['OutputValue']

for k in mp:
if ok.startswith(k):
mp[k] = ov

# Generate config.js data
data = {
'endpoint': mp['ApiURL'],
'userPoolId': mp['AuthUserPoolID'],
'userPoolClientId': mp['AuthUserPoolClientID'],
}
json_data = json.dumps(data, separators=(',', ':'))
text = f'window.config={json_data}'

# Write ac.js
configjs = os.path.join(os.path.dirname(__file__), '../static/config.js')
with open(configjs, 'w') as f:
f.write(text)

关于python - 如何评估 CDK `CfnOutput`(CloudFormation 输出)值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68448446/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com