2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Terraformで作るAkamai配信設定とLinode Object Storage

Last updated at Posted at 2022-07-01

Terraformで作るAkamai配信設定とLinode Object Storage

Terraformでは複数のプロバイダーを指定して、同一のコード内で管理することができます。
今回は、LinodeのObject Storageに静的コンテンツを配置し、AkamaiのCDNで分散配信する構成をTerraformで作成する例を紹介します。

Linodeとは

Linodeはシンプル、低価格、使いやすさに定評のあるIaaSのサービスです。
2022年2月にAkamaiが買収を発表しました。(買収完了は本年3月)
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
Linodeは仮想サーバーのみの提供ではなく、S3互換製品であるObject Storageをサービスとして提供しています。
今回はそのObject StorageをオリジンとしたAkamaiの配信設定をTerraformのコードで管理する方法をご紹介します。

Akamaiの配信設定

今回はAkamaiの配信製品の一つであるDownload Deliveryを利用するTerraformのコードとなっています。
Download Deliveryは大容量のファイルベースのコンテンツ配信に最適化された、高性能のコンテンツ配信ソリューションです。

Terraformのコードと構成

Terraformのコードはこちらのサンプルを利用します。
https://github.com/isss802/linode-terraform-demo/tree/main/linode-objectstorage-akamai

構成図は以下となります。

image.png

コードの取得

Githubからコードを取得します。

$ git clone git@github.com:isss802/linode-terraform-demo.git
$ cd linode-objectstorage-akamai/

Akamai API Keyの設定

AkamaiとLinodeのAPI Keyを取得し、設定をします。
API Key取得の参考サイト
https://www.akamai.com/ja/blog/developers/akamai-api-part1-api-client-edgegrid#000003

~/.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

Linode API Keyの設定

LinodeのAPI Keyを取得し、設定をします。

$ export TF_VAR_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

コードの説明

記載している各コードに関しての説明となります。

$ tree ./
./
├── README.md
├── index.html → Linode Object Storageにアップロードするファイル
├── objectstorage.tf → Linode Object Storageの作成、アクセスキーの作成、ファイルアップ
├── property-snippets
│   └── main.json → Download Deliveryの設定ファイル
├── property.tf → Download DeliveryのProperty作成、CPコード作成、Edge Hostnameの作成
├── terraform.tf → プロバイダーの定義
└── variables.tf → 変数の指定

Variablesの指定

Variablesの指定をする際に、ContractIDとGroupNameが必要となります。
ACC(Akamai Control Center)より確認を行い、情報を控えておきます。

グループ名の中にContractIDが含まれている場合が多いです。

image.png image.png

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

image.png image.png

variables.tfを編集し、作成する際の値を入力します。

$ vim variables.tf

#########################
# Linode
#########################
variable "token" {}

# Linode Object Storageを立ち上げるリージョンを指定

variable "region" {
  default = "us-southeast-1"
}

# Linode Object Storageの名前を記載

variable "label" {
  default = "example"
}

#########################
# Akamai Property
#########################

variable "edgerc_path" {
  type    = string
  default = "~/.edgerc"
}

variable "config_section" {
  type    = string
  default = "default"
}

variable "env" {
  type    = string
  default = "staging"
}

# Group NameとContract ID(先頭にはctr_が必要)を記載する

variable "akamai_group" {
  default = {
    group_name = "example-group"
    contract_id = "ctr_XXXXXXXXXX"
  }
}

# CP Code Nameに任意の名前を設定する

variable "cpcode_name" {
  default = "example"
}

# Akamaiに割り当てるHostnameを指定する

variable "cname" {
  default = "hoge.example.com"
}

# Emailを記載

variable "email" {
  default = "hoge@example.com"
}

# EdgeHostnameを記載する

variable "edge_hostname" {
  default = "hoge-example-com.edgesuite.net"
}

Terraformの実行

Terraformを実行し、各環境へリソースの作成を行います。
尚、今回のサンプルではAkamaiへのステージング環境に設定を適用するため4分ほど実行にかかります。
コーヒーでも作って待ちます。

$ terraform init
$ terraform apply

akamai_property_activation.dd: Still creating... [3m40s elapsed]
akamai_property_activation.dd: Creation complete after 3m44s [id=:STAGING]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

作成完了したらAkamaiのACCからPropertyが作成されていることを確認します。

image.png

設定ではS3互換ストレージであるLinode Object Storageが設定されています。

image.png

また、Edge Hostnameが利用可能になるまで15分程度かかります。
作ったコーヒーでも飲んで待ちます。

image.png

接続確認

Edge Hostnameの作成が完了したら、ステージング環境へのアクセス確認を行います。
Akamaiのステージング環境にアクセスするにはSpoofing(スプーフィング)を行います。
詳しくはこちらのサイトを参考にしてください。
https://community.akamai.com/customers/s/article/Stagingrxdxn?language=en_US

$ dig xxxxxxxxxx.edgesuite-staging.net +short
axxx.dscd.akamai-staging.net.
xx.xx.xx.xx #IPをコピーする
xx.xx.xx.xx

$ sudo vim /etc/hosts
xx.xx.xx.xx hoge.example.com #IPとドメインをHostsに記載する

Webブラウザからhoge.example.comにアクセスし、ページが表示されるか確認する。

image.png

運用のTips_1

Akamaiの配信設定をTerraformで管理する場合、jsonファイルの管理が必要です。

$ tree ./
./
├── property-snippets
│   └── main.json → Download Deliveryの設定ファイル

このjsonファイルの可読性が低く、またどのような設定を記載すればいいかが悩ましいところです。

このjsonファイルはData Sourcesのakamai_property_rulesにより管理をしやすくすることができます。
jsonファイルをテンプレート化したい場合に、指定の箇所を変数化することができ、他の環境にも流用しやすくなります。

$ view property.tf

data "akamai_property_rules_template" "rules" {
  template_file = abspath("${path.module}/property-snippets/main.json")
# 変数を指定可能、この場合はLinodeのObject Storageを指定している
  variables {
    name = "hostname"
    value = "${linode_object_storage_bucket.mybucket.label}.${linode_object_storage_bucket.mybucket.cluster}.linodeobjects.com"
    type = "string"
  }

main.json内に "${env.hostname}" として記載している。

$ view property-snippets/main.json

 34         "behaviors": [
 35                 {
 36                   "name": "origin",
 37                   "options": {
 38                    "cacheKeyHostname": "REQUEST_HOST_HEADER",
 39                    "compress": true,
 40                    "enableTrueClientIp": true,
 41                    "forwardHostHeader": "ORIGIN_HOSTNAME",
 42                    "hostname": "${env.hostname}",
 43                    "httpPort": 80,

運用Tips_2

Akamai Propertyに新規設定を1つ追加したい場合、このmain.jsonの追記が必要となります。
しかし、このjsonをどのように記載したら差分がでないようになるか悩ましいところです。
ACCからProperty Managerを操作し、追加したい設定を入れた後に View JSONから参照が可能となります。
また、ダウンロードも行えるので、作成したい、もしくは追加したいjsonがどのような記載か確認し、Terraformへ反映する運用を行うことでコード化の手間を簡略化してみましょう。

image.png

まとめ

Terraformで作るAkamai配信設定とLinode Object Storage、いかがでしょうか。
Akamaiは様々なリソースがTerraformに対応しているため、Infrastructure as Code(IaC)の対応を迅速に進めていくことができます。

関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?