それcurlが使えるよ。
curl_curl | Data Sources | anschoewe/curl | Terraform | Terraform Registry
前回マネージドプリフィクスリストを使用する例を載せてましたが、Local値にGitHub WebHookのCIDRを直書きしていたため、GitHub側でCIDRが変更されたときに対応が面倒くさいという欠点がありました。
今回はこの値を直書きでなくcurlでAPIから取得してそれを利用する例を紹介します。
IPv4アドレスのものだけフィルターするコードが適当なので、このあたりもっと良い手があれば教えてください。
data "curl" "github_meta" { http_method = "GET" uri = "https://api.github.com/meta" } locals { github_meta = jsondecode(data.curl.github_meta.response) github_webhook_cidr = local.github_meta.hooks github_webhook_cidr_ipv4 = [for x in local.github_meta.hooks : x if length(split(".", x)) == 4] github_webhook_cidr_ipv6 = [for x in local.github_meta.hooks : x if length(split(":", x)) > 1] } resource "aws_ec2_managed_prefix_list" "main" { name = "GitHub Hooks" address_family = "IPv4" max_entries = length(local.github_webhook_cidr_ipv4) dynamic "entry" { for_each = local.github_webhook_cidr_ipv4 content { cidr = entry.value } } } resource "aws_security_group" "main" { name = "Allow GitHub Webhooks" vpc_id = var.vpc_id } resource "aws_vpc_security_group_ingress_rule" "main" { security_group_id = aws_security_group.main.id ip_protocol = "tcp" from_port = 443 to_port = 443 prefix_list_id = aws_ec2_managed_prefix_list.main.id } output "github_webhook_cidr_ipv4" { value = local.github_webhook_cidr_ipv4 } output "github_webhook_cidr_ipv6" { value = local.github_webhook_cidr_ipv6 }