uchida
Table of Contents
Provierを指定
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
datadog = {
source = "DataDog/datadog"
}
}
}
provider "aws" {
region = "ap-northeast-3"
}
provider "datadog" {
validate = false
}
まずは、利用するProviersを定義します。
SecurityGroupを作成
resource "aws_security_group" "allow_datadog_ips" {
name = "allow_datadog_ips"
description = "Allow Datadog Synthetics Ips"
vpc_id = "vpc-xxxxxxxx"
egress = [
{
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = []
description = "Allow all outbound trafic"
prefix_list_ids = []
security_groups = []
self = false
}
]
tags = {
Name = "allow_datadog_ips"
}
}
まずは、Outboundのみを許可したSecurityGroupを作成します
DataDogのIPを取得し、SecurityGroupのingressに追加
data "datadog_ip_ranges" "this" {}
まずは、TerraformでData Sourceを定義します。
Datadog Provier を読み込んで datadog_ip_ranges
を定義すると、ここにDatadogに関する情報が格納されます。
resource "aws_security_group" "allow_datadog_ips" {
name = "allow_datadog_ips"
description = "Allow Datadog Synthetics Ips"
vpc_id = "vpc-7f80ba18"
dynamic "ingress" {
for_each = data.datadog_ip_ranges.this.synthetics_ipv4
content {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = [ingress.value]
ipv6_cidr_blocks = []
description = "Allow tcp datadog trafic"
prefix_list_ids = []
security_groups = []
self = false
}
}
egress = [
{
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = []
description = "Allow all outbound trafic"
prefix_list_ids = []
security_groups = []
self = false
}
]
tags = {
Name = "allow_datadog_ips"
}
}
先ほど書いていたSecurityGroupにingress要素を追加します。
dataで定義したdatadog_ip_ranges.thisから、synthetics_ipv4の値を取り出し、for_eachで一括で定義できます。
synthetics_ipv4 で外形監視のときに利用されるIPの一覧をDatadog側から常に取得出来るようになっています。
なので、しばらくplanを実行しなかったりするとIPが増えてたります。
これで terraform apply
を実行するとガッと出来てくれます。
その他にも、logsやwebhooks向けのIPなども取得可能です。
datadog_ip_ranges (Data Source)
おわり
Terraform便利ですね。 個人的にはCloudFormationよりも好きです。
まだまだ使ったことないProviersもあるので、色々さがしていってみたいと思います。
uchida
福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。