首页 > 解决方案 > 使用外部数据源在 terraform 中获取实例状态 1/2 或 2/2 的 Boto3 脚本

问题描述

你能帮我让 Boto3 脚本使用外部数据源在 terraform 中获取实例状态 1/2 或 2/2 吗?我是 python 和 Terraform 的新手。

标签: amazon-web-servicesterraformterraform-provider-aws

解决方案


使用文档中显示的 bash可能更容易

get_instance_status.sh

#!/bin/bash

set -e

eval "$(jq -r '@sh "INSTANCE_ID=\(.id)"')"

status=$(aws ec2 describe-instance-status --instance-ids ${INSTANCE_ID} --output json --query 'InstanceStatuses[0]')

instance_status=$(echo ${status} | jq -r '.InstanceStatus.Details[0].Status')
system_status=$(echo ${status} | jq -r '.SystemStatus.Details[0].Status')

jq -n --arg inst_status "$instance_status" \
      --arg sys_status "$system_status" \
      '{"instance_status":$inst_status,"system_status":$sys_status}'

然后在你的 TF 中:

data "external" "instance_status" {

  program = ["bash", "${path.module}/get_instance_status.sh"]

  query = {
    id = "i-08efdfdffb3"
  }
}

output "test" {
  value = data.external.instance_status.result
}

示例输出:

test = tomap({
  "instance_status" = "passed"
  "system_status" = "passed"
})

推荐阅读