ansible - 如何在 Ansible 脚本中使用 CloudFormation 输出值

标签 ansible aws-cloudformation

我正在尝试为学校项目设置一些自动化。其要点是:

  • 通过 CloudFormation 安装 EC2 实例。然后
    • 使用cfn-init
      • 安装非常基本的 Ansible 配置
      • 从 S3 下载 Ansible 剧本
      • 运行所述 playbook 以通过 CloudFormation 安装 Redshift 集群
      • 安装一些必要的软件包
      • 安装一些必要的Python模块
      • 下载一个 Python 脚本,该脚本将
      • 连接到 Redshift 数据库
      • 创建表格
      • 使用COPY命令将数据导入表中

一切都在执行脚本之前完成。手动执行此操作很方便,但这是因为我可以将创建的 Redshift 端点复制到数据库连接的脚本中。我遇到的问题是,我不知道如何从 CloudFormation 中提取该输出值,以便将其插入到脚本中以实现完全自动化(保存初始 EC2 部署)解决方案。

我发现 Ansible 至少有一种方法可以做到这一点(例如,cloudformation_facts),但我对如何实现它有点模糊。我看过一些例子,但并没有变得更清楚。如果没有上下文,我会迷失方向,到目前为止我所看到的只是独立的片段。

最佳答案

为了确保列出答案:

我找到了 aws cloudformation cli 命令的 describe-stacksdescribe-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/

相关文章:

ansible - 使用 Ansible ad-hoc 命令删除多个用户

ansible - 当 inventory_host 作为变量插入时,无法访问主机变量

python - 有没有办法使用 Jinja2/Ansible 设置整数的默认最小值?

node.js - 是否可以在我的 AWS 账户中创建堆栈以及在客户端 AWS 账户中创建的资源(例如(ec2、vpc、rds))?

amazon-web-services - 如何创建 SNS 订阅过滤策略

regex - 来自标准输出的ansible解析文本字符串

python - 有没有办法在循环 Ansible 剧本中的角色时设置环境变量?

amazon-web-services - 获取 Cloudformation 错误 : Embedded stack was not successfully created

amazon-web-services - AWS Cloudformation 支持 Direct Connect 连接

mysql - CloudFormation 更改集显示替换,尽管没有更改