Akamai Edge DNSで始めるTerraform

# Akamai Edge DNSで始めるTerraform

Akamaiの主要な製品の多くは、Terraformに対応しています。
今回はTerraformの導入とEdge DNSでの管理を簡単にご紹介します。
Edge DNSはグローバルに分散構成された、堅牢な権威DNSサービスです。

# 配信Propertyの設定の記事ついてはこちら

https://qiita.com/isss802/items/895bd604fdf67c0fc55c

https://qiita.com/isss802/items/8201595651f285061e0f

## 対応しているリソースの確認

最新のドキュメントから対応しているサービスを確認することができます。

https://registry.terraform.io/providers/akamai/akamai/latest/docs

## Terraformのインストール

インストール手順を参考に、各環境でTerraformが利用できるようにします。

https://learn.hashicorp.com/tutorials/terraform/install-cli

Macの場合
```
$ brew install terraform
$ terraform version
Terraform v1.2.1
on darwin_amd64
```

## API Keyの用意

Akamai Control Center (ACC) のハンバーガーメニューからIdentity and Access Managementを選択し、API Keyの作成を行います。
詳細はこちらを参考に作成します。

https://www.akamai.com/ja/blog/developers/akamai-api-part1-api-client-edgegrid#000003



## Credentialsの記載

~/.edgerc に作成したAPI Keyの登録を行います。

```
$ vim ~/.edgerc

[default]
; Akamai {OPEN} API credentials
client_secret = xxxxxxxxxxxxxxxxxxxxx
host = akab-xxxxxxxxxxxxxxxxxxxxxxxxxx.luna.akamaiapis.net
access_token = akab-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
client_token = akab-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

## Contract IDとGroup IDの確認

Terraformでリソースを作成する際に作成先となるContract IDとGroup IDが必要です。

ACCからEdgeDNSのメニューを選択し、Group IDとContract IDを控えます。

<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4aabdcf0-c453-fc13-cbee-b21158ba58f7.png">

<img width="460" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/2c26f505-a83e-f733-9c5d-e29cb4503390.png">

Contract IDはBillingのページからも確認が可能です。

<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4688ae8b-2ef9-e020-c106-9c7f12df5727.png">

<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/b9f44e66-0546-7ff9-16aa-0d4cf45890c2.png">


## Terrformの記載

サンプルとして1つのファイルにTerraformのコードを記載しております。
今回はDNSゾーンの作成とレコードの作成を行うコードになります。
Variablesには先ほど控えた情報を記載します。

```
$ vim edgedns.tf

##################
# Providers
##################
terraform {
  required_providers {
    akamai = {
      source  = "akamai/akamai"
    }
  }
}

provider "akamai" {
  edgerc         = "~/.edgerc"
  config_section = "default"
}

##################
# Variables
##################

# 先ほど控えたContract IDを入力する
variable "contract_id" {
  type = string
  default = "X-XXXXXX"
}

# 先ほど控えたGroup IDを入力する
variable "group_id" {
  type = string
  default = 111111
}

# 作成したいゾーンのドメイン名を記載する
variable "zone_name" {
  type = string
  default = "xxxxxxxx.com"
}

# コメントは任意
variable "comment" {
  type = string
  default = "main zone"
}

##################
# Edge DNS
##################

resource "akamai_dns_zone" "main" {
    contract = var.contract_id
    group = var.group_id
    zone = var.zone_name
    type =  "primary"
    sign_and_serve = false
    comment =  var.comment
}

resource "akamai_dns_record" "www" {
  zone = var.zone_name
  name = join(".", ["www",var.zone_name])
  recordtype =  "A"
  ttl =  30
  target = ["1.1.1.1"]
  active = true
  depends_on = [akamai_dns_zone.main]
}
```

## Terraformの実行

Terraformを実行します。

```
# 初期設定
$ terraform init
# 実行
$ terraform apply
```

## 確認

ACCからDNSゾーンとレコードが作成されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c1c9e76b-1079-b9e0-dc38-13573e7cb9c9.png)


## まとめ

Akamai Edge DNSをTerraformにて簡単に管理することができます。
コード化することによりProperty設定やその他サービスとの連携を行うことも可能となります。

## 関連記事

https://qiita.com/isss802/items/895bd604fdf67c0fc55c

https://qiita.com/isss802/items/8201595651f285061e0f