用于获取实例状态的脚本 1/2 或 2/2 通过 AMI 启动的实例,其实例 ID 在之前使用外部数据源在 terraform 中未知
script to get Instance Status 1/2 or 2/2 of instance launched via AMI whose instance id is not known before in terraform using external data source
在应用 terraform apply in terraform using external data source 之前,我能否使用脚本获取通过 AMI 启动的 1/2 或 2/2 实例的实例状态检查,其实例 ID 未知。
通过 AMI 启动的实例名称:QA-server-via-ami
亚美名称 : QA-ami
Error :
Error: failed to execute "bash":
An error occurred (InvalidInstanceID.Malformed) when calling the
DescribeInstanceStatus operation: Invalid id: "QA-server-via-ami.id"
on main.tf line 94, in data "external" "instance_status":
94: data "external" "instance_status"}
Main TF Code :
resource "aws_ami_from_instance" "QA-ami" {
name = "QA-ami"
source_instance_id = "i-00f4e52*****"
}
resource "aws_instance" "QA-server-via-ami" {
ami = aws_ami_from_instance.QA-ami.id
instance_type = "var.instance_type_QA"
}
data "external" "instance_status" {
program = ["bash", "${path.module}/get_instance_status.sh"]
query = {
id = "QA-server-via-ami.id"
}
}
get_instance_status.sh :
#!/bin/bash
set -e
eval "$(jq -r '@sh "INSTANCE_ID=\(QA-server-via-ami.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}'
自您创建实例以来使用:
resource "aws_instance" "QA-server-via-ami"
然后要获取其 ID,您可以使用:
aws_instance.QA-server-via-ami.id
所以要将其传递给您的 external
数据源:
data "external" "instance_status" {
program = ["bash", "${path.module}/get_instance_status.sh"]
query = {
id = aws_instance.QA-server-via-ami.id
}
}
在应用 terraform apply in terraform using external data source 之前,我能否使用脚本获取通过 AMI 启动的 1/2 或 2/2 实例的实例状态检查,其实例 ID 未知。
Error :
Error: failed to execute "bash":
An error occurred (InvalidInstanceID.Malformed) when calling the
DescribeInstanceStatus operation: Invalid id: "QA-server-via-ami.id"
on main.tf line 94, in data "external" "instance_status":
94: data "external" "instance_status"}
Main TF Code :
resource "aws_ami_from_instance" "QA-ami" {
name = "QA-ami"
source_instance_id = "i-00f4e52*****"
}
resource "aws_instance" "QA-server-via-ami" {
ami = aws_ami_from_instance.QA-ami.id
instance_type = "var.instance_type_QA"
}
data "external" "instance_status" {
program = ["bash", "${path.module}/get_instance_status.sh"]
query = {
id = "QA-server-via-ami.id"
}
}
get_instance_status.sh :
#!/bin/bash
set -e
eval "$(jq -r '@sh "INSTANCE_ID=\(QA-server-via-ami.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}'
自您创建实例以来使用:
resource "aws_instance" "QA-server-via-ami"
然后要获取其 ID,您可以使用:
aws_instance.QA-server-via-ami.id
所以要将其传递给您的 external
数据源:
data "external" "instance_status" {
program = ["bash", "${path.module}/get_instance_status.sh"]
query = {
id = aws_instance.QA-server-via-ami.id
}
}