0
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.

Akamai Visitor Prioritization Cloudlet をTerraformで管理する

Posted at

Akamai Visitor Prioritization とは

イベントやチケットサイトは突発的なアクセスが発生しオリジンの処理負荷が増加して、サーバーがダウンしてしまうことがあります。
Visitor PrioritizationはAkamai CDN上に導入できる機能で、アクセスに応じて一定の割合を待合室画面に転送し、トラフィック量が急増した場合でも、サイトの応答性を維持することができます。
設定値はTerraformやAPIで設定変更を行うことができるため、アクセス数に応じて即座に調整することが可能です。
image.png

Visitor Prioritization CloudletによるVirtual Waiting RoomのFIFO (First In First Out)機能は執筆時点ではBetaテスト中です。本稿では正式サポート済みの「接続待ちの中から一定の確率(抽選)でオリジンに接続する方式」で制御します。
https://techdocs.akamai.com/cloudlets/docs/what-visitor-prioritization-fifo

Visitor Prioritization を設定する

Akamai Control Center(ACC)のハンバーガーメニューからEdge logic Cloudletsを選択します。

image.png

Create New Policyを選択します。

image.png

Cloudlet TypeでVisitor Prioritizationを選択してポリシーを作成します。

image.png

Add Ruleを選択して待機ページへ向けるトラフィックを設定します。

image.png

1つ目のルールは、vp_force=trueが付与されているクエリ ストリングの場合には待合室を表示させるように設定します。これは表示のテスト用のための設定になります。

image.png

2つ目のルールは、すべてのPathを対象にVisitor Prioritizationを適用する設定です。割合としてはオリジンに3割のアクセスが行くように設定しています。

image.png

その他、マッチ条件に関しては以下を参照ください。

Review available match types for Visitor Prioritization

設定を保存します。

image.png

Active PolicyからStagingとProductionにRuleを展開します。適用先のPropertyを指定する必要があります。

image.png

NetStorageにコンテンツをアップロードする

待合室のページをNetStorageにアップロードします。

HTMLサンプルは以下からダウンロードが可能です。

Set up waiting room page

ディレクトリについては決まりがあり、vpディレクトリ配下に作成する必要があります。
また、HTMLのファイル名もvpwatingroom.htmlで固定となります。

image.png

今回はRcloneを利用してNetStorageにコンテンツをアップロードしています。

rclone copy vpwaitingroom.html ns:vp/wr/

CDNのPropertyにVisitor Prioritization Cloudletの設定を追加する

対象のAkamai CDN のPropertyにVisitor Prioritization CloudletのBehaviorを追加します。

image.png

詳細な設定値は以下を参照ください。

Configure the Visitor Prioritization behavior

設定を保存して、Stagingに展開します。(必要に応じてProductionにも展開します。)

設定の確認

サイトのURLへアクセスし、設定したクエリ ストリングを付与してアクセスすると待合室が表示されていることが確認できます。

image.png

上記HTMLページはサンプルからロゴ等を表示するために修正しています。
修正した内容はこちらになります。
https://gist.github.com/isss802/9c644f46b86c0a8dfd4437319fbcb7de

Visitor Prioritization を Terraform で管理する

Visitor Prioritizationで設定したオリジンへアクセスを転送する割合は、総アクセス数の増加やオリジンの処理負荷など状況に応じて変更することがあります。
Terraformなどの構成管理ツールを利用することで、変更を実行しやすくし、サーバー負荷などのモニター値をトリガーに調整を自動化するようなワークフローにも組み込みやすくなります。

先程ACCから設定した内容をAkamai Terraform CLIを利用してエクスポートします。

akamai --section default terraform export-cloudlets-policy [policy_name]

設定したポリシーから自動的にTerraformのファイルが作成されます。

➜ tree
.
├── import.sh
├── match-rules.tf
├── policy.tf
└── variables.tf

importコマンドが記載されているファイルを実行します。

chmod +x import.sh
./import.sh

例としてpass_through_percentの設定値を30から60に変更します。

 vim match-rules.tf

  1 data "akamai_cloudlets_visitor_prioritization_match_rule" "match_rules_vp" {
~~~~~~~~~~~~中略~~~~~~~~~~~~~~
 15     pass_through_percent = 30→60に変更
 16     disabled             = false
 17   }

Terraformを実行して設定を反映させます。

# Stagingの場合
terraform apply -var 'env=staging'
# Producationの場合
terraform apply -var 'env=production'

設定値が変更されていることをACCから確認します。

image.png

まとめ

Akamai Visitor Prioritizationは、オリジンサーバーのパフォーマンスと安定性を確保するために必要な機能を備えています。

Terraformを利用することにより構成変更も迅速に行えるようになり、DevOpsにも組み込むことができます。

0
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
0
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?