CloudFront Agent
概要
NetFUNNEL CloudFront エージェントは、AWS Lambda@Edge から NetFUNNEL サーバーと通信する NetFUNNEL 専用クライアントです。
IAM 設定
IAM ロールの作成
- AWS の IAM コンソールに移動します。
- [ロール] をクリックし、[ロールの作成] をクリックします。
- 信頼されたエンティティで AWS サービスを選択し、ユースケースで Lambda を選択します。
- [次: アクセス許可] をクリックします。
Trust Entity の設定
- ロール作成後、[Trust Entity] タブに移動します。
- Trust Entity を編集し、以下の JSON を貼り付けます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
ポリシーのアタッチ
- ロールの [アクセス許可] タブに移動します。
- [アクセス許可を追加] をクリックし、[インラインポリシーを作成] をクリックします。
- JSON タブに以下のポリシーを貼り付けます。(このポリシーにより Lambda 関数が CloudWatch ログを作成・書き込みできます。)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
Lambda 関数の作成
Lambda 関数は us-east-1(バージニア北部)リージョンで作成する必要があります。 これは AWS の要件で、このリージョンが関数をグローバルに複製するための拠点となるためです。
- us-east-1 リージョンの Lambda コンソールに移動します。
- [関数の作成] をクリックします。
- [一から作成] を選択します。
- 関数名を入力します。(例: "netfunnel-agent")
- ランタイムで Node.js を選択します。
- Step 1 で、上で作成した IAM ロールを選択します。
- [関数の作成] をクリックします。
Lambda 関数の設定
- https://agent-lib.stclab.com/agents/cdn/cloudfront/netfunnel-cloudfront-agent-latest.js から netfunnel-cloudfront-agent.js ファイルをダウンロードしてください。
- [コード] タブのコードソースに netfunnel-cloudfront-agent.js を配置します。
- index.mjs を開き、以下のコードを記述してください。
CLIENT_ID は NetFUNNEL コンソールで確認できます。
import handleEvent from './netfunnel-cloudfront-agent.js';
const config = {
clientID: "{{CLIENT_ID}}",
}
export const handler = async (event) => {
return await handleEvent(event, config)
};
- package.json を作成し、以下のコードを貼り付けます。
{
"name": "cloudfront-agent",
"type": "module",
"dependencies": {}
}
- 記述が終わったら [Deploy] をクリックします。
- [バージョン] タブで [新しいバージョンを発行] をクリックします。
CloudFront 設定
CloudFront に Lambda@Edge を接続
- Lambda@Edge を適用する CloudFront の ID を選択します。
- [ビヘイビア] タブで項目を選択し、[編集] をクリックします。
- 一番下の関数の関連で、ビューアーリクエストとビューアーレスポンスに、上で作成した Lambda 関数の ARN を入力します。末尾にバージョン番号を必ず付けてください。(バージョンが 1 の場合は :1 を追加します。)
- [変更の保存] をクリックします。
CloudFront の無効化
- [無効化] タブに移動し、[無効化の作成] をクリックします。
- オブジェクトパスに /* を入力し、[無効化の作成] をクリックします。
- 無効化が完了すると、CloudFront に Lambda@Edge の関連が適用されます。
追加機能
Good Bot の例外処理
Lambda 設定により、特定の User-Agent が含まれる場合にエージェントの動作から除外できます。
Lambda 設定
- NetFUNNEL エージェントを適用した Lambda 関数を開きます。
- index.mjs を開きます。
- 以下のコードを参考に、
configオブジェクトのgoodBotsに、除外したい Good Bot のUser-Agentを配列で追加します。
Google、Microsoft、Yahoo、Apple、Facebook のボットを除外した例です。
const config = {
...
goodBots: ["Googlebot", "Bingbot", "Slurp", "Applebot", "facebookexternalhit"],
}
- 記述が終わったら [Deploy] をクリックします。
- [バージョン] タブで [新しいバージョンを発行] をクリックし、バージョンを更新します。
CloudFront 設定
- Lambda@Edge を適用した CloudFront の ID を選択します。
- [ビヘイビア] タブで項目を選択し、[編集] をクリックします。
- 下の関数の関連で、ビューアーリクエストとビューアーレスポンスを新しいバージョンに更新します。
- [変更の保存] をクリックします。
進入キーの自動返却
NetFUNNEL CloudFront エージェントは、進入後に NetFUNNEL キーを自動で返却し、次の待機者が進入できるようにしています。 NetFUNNEL キーを即座に返却せず、セグメントで設定したタイムアウト時に返却したい場合にこの機能を使用できます。
Lambda 設定
- NetFUNNEL エージェントを適用した Lambda 関数を開きます。
- index.mjs を開きます。
- 以下の
configオブジェクトのreturnKeyに、進入キー自動返却の有無を設定します。
const config = {
...
returnKey: true,
}
true(既定値)の場合、待機完了・進入後にエージェントが NetFUNNEL キーを自動で返却します。 false の場合、セグメントで設定したタイムアウト時にキーが返却されます。
- 記述が終わったら [Deploy] をクリックします。
- [バージョン] タブで [新しいバージョンを発行] をクリックし、バージョンを更新します。
CloudFront 設定
- Lambda@Edge を適用した CloudFront の ID を選択します。
- [ビヘイビア] タブで項目を選択し、[編集] をクリックします。
- 下の関数の関連で、ビューアーリクエストとビューアーレスポンスを新しいバージョンに更新します。
- [変更の保存] をクリックします。
待機室ドメインの変更
NetFUNNEL 待機室ページのドメインは agent-lib.stclab.com です。サービスで使用するドメインに変更する場合は、NetFUNNEL サービスチームに希望ドメインを伝え、Lambda 設定を変更してください。
Lambda 設定
- viewer-request に適用した Lambda 関数を開きます。
- index.mjs を開きます。
configオブジェクトのvwrPageDomainに、変更したい待機室の URL を設定します。
待機室ドメインを wait.stclab.com に変更する例です。
const config = {
...
vwrPageDomain: "https://wait.stclab.com",
}
- 記述が終わったら [Deploy] をクリックします。
- [バージョン] タブで [新しいバージョンを発行] をクリックし、バージョンを更新します。
CloudFront 設定
- Lambda@Edge を適用した CloudFront の ID を選択します。
- [ビヘイビア] タブで項目を選択し、[編集] をクリックします。
- 下の関数の関連で、ビューアーリクエストとビューアーレスポンスを新しいバージョンに更新します。
- [変更の保存] をクリックします。
クッキードメインの設定
NetFUNNEL サーバーから発行されたキーは、現在のページのドメインを基準にクッキーに保存されます。 サブドメイン間でキーを共有する必要がある場合は、メインドメインがクッキーに保存されるよう設定します。
develop.stclab.com と staging.stclab.com のようにサブドメインが異なるページでクッキーを共有するには、.stclab.com と設定します。
Lambda 設定
- viewer-request に適用した Lambda 関数を開きます。
- index.mjs を開きます。
- 以下の
configオブジェクトのcookieDomainに、.MAIN_DOMAIN形式で設定します。
クッキードメインを .stclab.com に変更する例です。
const config = {
...
cookieDomain: ".stclab.com",
}
- 記述が終わったら [Deploy] をクリックします。
- [バージョン] タブで [新しいバージョンを発行] をクリックし、バージョンを更新します。
CloudFront 設定
- Lambda@Edge を適用した CloudFront の ID を選択します。
- [ビヘイビア] タブで項目を選択し、[編集] をクリックします。
- 下の関数の関連で、ビューアーリクエストとビューアーレスポンスを新しいバージョンに更新します。
- [変更の保存] をクリックします。