【发布时间】:2021-07-08 06:57:01
【问题描述】:
我有 2 个 terraform 模块,一个用于从自定义 AMI 启动实例(AMI 备份),另一个用于测试通过此自定义 AMI 启动的实例的状态(1/2 或 2/2 状态)。
我正在使用外部数据源调用 Bash 脚本来获取实例状态。
模块 1(实例 id)的输出可以用作模块 2 的输入吗?因为外部模块中需要实例 id。
[root@ip-172-16-1-168 devops]# vim main.tf
module "mymodule" {
source = "/terraform/devops/modules/AMI_Creation_module"
qa_instance_type = "t3.medium"
qa_subnet_id = "subnet-0ab**9a916***4cc"
qa_key_name = "terraform"
Environment = "QA"
module "mymodule2" {
source = "/terraform/devops/modules/AMI_Status_module"
qa_instance_type = "module.mymodule2.qa_instance_type"
qa_subnet_id = "module.mymodule2.qa_subnet_id"
qa_key_name = "module.mymodule2.qa_key_name"
Environment = "QA"
#QA-server-via-ami = ["${module.mymodule.QA-server-via-ami}"]
}
AMI_Status_Module:
data "external" "instance_status" {
program = ["bash", "${path.module}/get_instance_status.sh"]
query = {
id = QA-server-via-ami.id
}
}
output "test" {
value = data.external.instance_status.result
}
Bash 脚本:
#!/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}'
我们可以在两个模块之间设置睡眠吗?因为我想要一段时间后的实例状态。
AMI_Creation_Module main.tf :
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
provider "aws" {
region = "us-east-1"
access_key = "A*************"
secret_key = "k**************"
}
resource "aws_ami_from_instance" "QA-ami" {
name = "QA-ami"
source_instance_id = "i-00f4*******"
} //line20
resource "aws_instance" "QA-server-via-ami" {
ami = aws_ami_from_instance.QA-ami.id
instance_type = var.qa_instance_type
subnet_id = var.qa_subnet_id
key_name = var.qa_key_name
tags = {
Name = "QA-server-via-ami"
}
}
output "instance_id" {
value = aws.ec2_instance.QA-server-via-ami.id
}
【问题讨论】:
-
这个问题是怎么解决的?
标签: amazon-web-services terraform terraform-provider-aws