我正在尝试为学校项目设置一些自动化。其要点是:
- 通过 CloudFormation 安装 EC2 实例。然后
- 使用
cfn-init
来- 安装非常基本的 Ansible 配置
- 从 S3 下载 Ansible 剧本
- 运行所述 playbook 以通过 CloudFormation 安装 Redshift 集群
- 安装一些必要的软件包
- 安装一些必要的Python模块
- 下载一个 Python 脚本,该脚本将
- 连接到 Redshift 数据库
- 创建表格
- 使用
COPY
命令将数据导入表中
- 使用
一切都在执行脚本之前完成。手动执行此操作很方便,但这是因为我可以将创建的 Redshift 端点复制到数据库连接的脚本中。我遇到的问题是,我不知道如何从 CloudFormation 中提取该输出值,以便将其插入到脚本中以实现完全自动化(保存初始 EC2 部署)解决方案。
我发现 Ansible 至少有一种方法可以做到这一点(例如,cloudformation_facts
),但我对如何实现它有点模糊。我看过一些例子,但并没有变得更清楚。如果没有上下文,我会迷失方向,到目前为止我所看到的只是独立的片段。
最佳答案
为了确保列出答案:
我找到了 aws cloudformation
cli 命令的 describe-stacks
和 describe-stack-resources
子命令。使用这些,我能够找到我需要的信息。特别是,我需要访问一个角色。这是我使用的命令:
aws cloudformation describe-stacks --stack-name=StackName --region=us-west-2 \
--query 'Stacks[0].Outputs[?OutputKey==`RedshiftClusterEndpointAddress`].OutputValue' \
--output text
我首先使用describe-stacks
子命令来获取我的堆栈列表。相关堆栈是列表中的第一个(数组),因此我在 describe-stack-recources
子命令的查询顶部使用了 Stacks[0]
。然后我使用了Outputs
,因为我对 CloudFormation 输出列表中的值感兴趣。我知道 key 的名称 (RedshiftClusterEndpointAddress),因此我使用它作为参数。然后,我使用 OutputValue
返回 RedshiftClusterEndpointAddress 的值。
关于ansible - 如何在 Ansible 脚本中使用 CloudFormation 输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762732/