Top View


Author uchida

TerraformでDatagogの監視IPを一括で設定する

2021/08/26

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

uchida

福岡でWebエンジニアやってます。PHP, クラウド, インフラあたりが好き。