terraform으로 ec2를 만들고 해당 액션을 실행한 환경(예를 들면 우리집)에서는 해당 ec2에 접근이 가능하게 하고 싶었는데
이 일련의 동작을 자동화 하는 방법을 몰라서 항상 curl ifconfig.co을 실행해서 글로벌IP를 특정후
aws console에 들어가서 세큐리티 그룹 인바운드에 ip를 추가하곤 했다.
stack overflow에 질문해서 이방법을 자동화 시키는 방법을 찾게되어 이포스트에서 소개해본다.
main.tf에서 특정 스크립트를 실행하는 방법
scripts/get_my_public_ip.sh
#!/bin/bash -xe
echo {\"ip\":\""`curl ipinfo.io/ip`"\"}
main.tf
data "external" "get_my_public_ip" {
program = ["sh", "scripts/get_my_public_ip.sh"]
}
module "security-group" {
source = "./modules/aws/compute/security-group/"
infra_name = "${var.infra_name}"
vpc_id = "${module.network.vpc_id}"
vpc_cidr = "${module.network.vpc_cidr}"
permitted_ips = "${var.permitted_ips}"
my_public_ip = "${data.external.get_my_public_ip.result.ip}/32"
}
script없이 public ip를 특정하는 방법
최근에 더 심플한 방법을 발견했다.
main.tf
data "http" "myip" {
url = "http://ipv4.icanhazip.com"
}
And whenever you want to place your IP just use data.http.myip.body, example:
ingress {
from_port = 5432
to_port = 5432
protocol = "tcp"
cidr_blocks = ["${chomp(data.http.myip.body)}/32"]
}
Reference Link
https://stackoverflow.com/questions/46763287/i-want-to-identify-the-public-ip-of-the-terraform-execution-environment-and-add/53782560#53782560