如何使用AWS-CDK将AWS堆栈的cfn输出获取到文件

时间:2020-03-11 09:54:13

标签: amazon-web-services amazon-ec2 aws-sdk amazon-cloudformation aws-cdk

我想将AWS-CDK中的Cfn输出存储到文件(Python)。

下面是在控制台上显示公共IP的代码。

my_ip = core.CfnOutput(
    scope=self,
    id="PublicIp",
    value=my_ec2.instance_public_ip, 
    description="public ip of my instance", 
    export_name="my-ec2-public-ip")

我尝试使用以下命令在Python中重定向输出:

cdk deploy * > file.txt

但没有成功。

请帮助

3 个答案:

答案 0 :(得分:4)

对于要在堆栈运行后保存的每个值,在代码中添加一个core.CfnOutput调用。

然后,当您部署堆栈时,请使用:

% cdk deploy {stack-name} --profile $(AWS_PROFILE) --require-approval never \
             --outputs-file {output-json-file}

这将部署堆栈,不停地寻求是/否批准(因此您可以将其放入Makefile或CI / CD脚本中),完成后,将每个CfnOutput的值保存在您的堆栈到JSON文件。

此处的详细信息:https://github.com/aws/aws-cdk/commit/75d5ee9e41935a9525fa6cfe5a059398d0a799cd

答案 1 :(得分:3)

基于this still open issue,最好的选择是使用AWS CLI描述堆栈并提取输出。例如:

aws cloudformation describe-stacks \
  --stack-name <my stack name> \
  --query "Stacks[0].Outputs[?OutputKey==`PublicIp`].OutputValue" \
  --output text

如果您使用的是Python,也可以使用boto3完成。

import boto3
outputs = boto3.Session().client("cloudformation").describe_stacks(StackName="<my stack here>")["Stacks"][0]["Outputs"]
for o in outputs:
  if o["OutputKey"] == "PublicIp":
    print(o["OutputValue"])
    break
else:
  print("Can't find output")

答案 2 :(得分:1)

不确定这是否是 cdk CLI 的最新更新,但 cdk deploy -O 会起作用。

-O, --outputs-file 堆栈输出将被写入为 JSON 的文件路径

这是一个选项。它将需要 cdk.CfnOutput 并放入 JSON 文件中。

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.CfnOutput.html

相关问题