Amazon web services Boto3脚本使用外部数据源在terraform中获取实例状态1/2或2/2

Amazon web services Boto3脚本使用外部数据源在terraform中获取实例状态1/2或2/2,amazon-web-services,terraform,terraform-provider-aws,Amazon Web Services,Terraform,Terraform Provider Aws,您能否帮助我让Boto3脚本使用外部数据源获取terraform中的实例状态1/2或2/2签入。我对python和terraform不太熟悉。使用如中所示的bash可能更容易 获取实例状态。sh #!/bin/bash set -e eval "$(jq -r '@sh "INSTANCE_ID=\(.id)"')" status=$(aws ec2 describe-instance-status --instance-ids ${INSTANCE

您能否帮助我让Boto3脚本使用外部数据源获取terraform中的实例状态1/2或2/2签入。我对python和terraform不太熟悉。

使用如中所示的bash可能更容易

获取实例状态。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"
})

如中所示,使用bash可能更容易

获取实例状态。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"
})

执行地形规划时出现此错误:错误:未能执行“bash”:/get_instance_status.sh:第5行:jq:未找到命令。/get_instance_status.sh:第9行:jq:未找到命令found@AnkitK您必须安装
jq
。如果我们将实例id作为i-08EFDFFB3传递,它工作正常,但是我们能否将实例id作为QA-server-via-ami.id传递,因为在terraform应用之前我们不知道实例id?@AnkitK是它的自定义数据源。您可以根据您的用例修改它。您的问题没有具体说明实例选择,因此我显示了最常用的实例id。我提出了一个新问题,.在执行terraform plan时出现此错误:错误:未能执行“bash”:./get\u instance\u status.sh:第5行:未找到jq:命令。/get\u instance\u status.sh:第9行:未找到jq:命令found@AnkitK您必须安装
jq
。如果我们将实例id作为i-08EFDFFB3传递,那么它工作正常,但是我们是否可以将实例id作为QA-server-via-ami.id传递,因为我们在terraform应用之前不知道实例id?@AnkitK是它的自定义数据源。您可以根据您的用例修改它。您的问题没有具体说明实例选择,因此我显示了最常用的实例id。我提出了一个新问题。