AWS、CloudFront、Route 53 を使ったサブディレクトリの設定
AWS CloudFront と Route 53 を使って、/docs サブディレクトリでドキュメントをホストします。
Lambda 関数コードを更新する
Lambda 関数エディタで、デフォルトのコードを次の内容に置き換えます:
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// サブディレクトリが /docs でない場合は更新してください
const subdirectory = '/docs';
// 以下をプロキシ URL で更新してください
const target = new URL('<GitBook から取得したプロキシ URL>');
// 書き換え: /docs* -> proxy.gitbook.site
if (request.uri.startsWith(subdirectory)) {
request.uri = target.pathname + request.uri.substring(subdirectory.length);
// 末尾のスラッシュがあれば削除
if (request.uri.endsWith('/')) {
request.uri = request.uri.slice(0, -1);
}
request.origin = {
custom: {
domainName: target.host,
port: 443,
protocol: 'https',
path: '',
sslProtocols: ['TLSv1.2'],
readTimeout: 30,
keepaliveTimeout: 5,
customHeaders: {},
},
};
request.headers['host'] = [{ key: 'host', value: target.host }];
request.headers['x-forwarded-host'] = [{ key: 'x-forwarded-host', value: target.host }];
}
return request;
};必ず更新してください target 1 つ目の手順で GitBook から取得したプロキシ URL を、8 行目で設定してください。これは次のようになります https://proxy.gitbook.site/sites/site_XXXX
また、必ず更新してください subdirectory 使用しているサブディレクトリのパスが次と異なる場合は、5 行目を更新してください /docs.
クリック デプロイ をクリックして変更を保存します。
Lambda@Edge 用に Lambda の権限を設定する
Lambda 関数を CloudFront で使用する前に、Lambda@Edge がその実行ロールを引き受けられるように設定する必要があります。
Lambda 関数で、 設定 タブ
クリック 権限 を左サイドバーでクリックします
の下で 実行ロール、ロール名をクリックして IAM で開きます
次のボタンをクリックします 信頼関係 タブ
クリック 信頼ポリシーを編集
信頼ポリシーを次の内容に置き換えます:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}クリック ポリシーを更新 して保存します。
Lambda 関数を公開する
Lambda@Edge では、公開済みバージョンが必要です(単なる $LATEST).
Lambda 関数で、 アクション 右上のドロップダウン
選択してください 新しいバージョンを公開
必要に応じて、「CloudFront 用の初期バージョン」のような説明を追加します
クリック 公開
重要: ページ上部に表示される公開済みバージョンの ARN をコピーしてください(末尾にバージョン番号が含まれます。例:
arn:aws:lambda:us-east-1:123456789:function:gitbook-subpath-proxy:1)
Lambda@Edge 関数は、 us-east-1 (バージニア北部)リージョンで作成する必要があります。別のリージョンで関数を作成した場合は、us-east-1 で作り直す必要があります。
CloudFront ディストリビューションを作成する
次へ移動し CloudFront を AWS コンソールで開き、 ディストリビューションを作成.
次の設定を行います。指定されていない設定はデフォルトのままにしてください。
オリジンを指定
オリジンタイプ
その他
カスタムオリジン
メインのウェブサイトドメイン(例: example.com)
キャッシュ設定
キャッシュポリシー
CachingDisabled
オリジンリクエストポリシー
AllViewerExceptHostHeader
クリック 次に、 希望するセキュリティ保護を選択し、次に 次へ を再度クリックします。
クリック ディストリビューションを作成.
ディストリビューションがデプロイされるまで待ちます(ステータスが「In Progress」から「Enabled」に変わります)。これには数分かかる場合があります。
Lambda@Edge を CloudFront に関連付ける
CloudFront ディストリビューションがデプロイされたら:
ディストリビューション ID をクリックして設定を開きます
次の場所へ移動します Behaviors タブ
デフォルトのビヘイビアを選択し、 編集
までスクロールします 関数の関連付け
の下で オリジンリクエスト、選択し Lambda@Edge
の中で Lambda 関数 ARN フィールドに、公開済み Lambda 関数の ARN(手順 5 のもの)を貼り付けます
チェックを入れます Include body 必要に応じて関数がリクエストボディにアクセスできるようにするためです
クリック 変更を保存
CloudFront から Route 53 DNS レコードを設定する
DNS に Route 53 を使用している場合は、CloudFront ディストリビューションを指すように DNS レコードを作成または更新する必要があります。
CloudFront ディストリビューションのメインページにとどまったまま、 一般 タブにいることを確認し、 Alternate domain names, の下に設定した URL の下で、 Route domains to CloudFront.
クリックします ルーティングを自動的に設定 を選択して、ドメイン用の A および AAAA DNS レコードを作成します
設定をテストする
すべての変更が反映されたら(10~15 分かかる場合があります):
ブラウザを開き、サブディレクトリパス付きのドメインにアクセスします(例:
https://example.com/docs)GitBook のドキュメントサイトが表示されるはずです!
サイトがすぐに読み込まれない場合は、次を試してください:
DNS の反映を待つために、さらに数分待つ
ブラウザのキャッシュをクリアするか、シークレットウィンドウを試す
実行する
nslookup yourdomain.comDNS が正しく名前解決されていることを確認するために、ターミナルで実行しますCloudFront ディストリビューションのステータスが「In Progress」ではなく「Enabled」になっていることを確認する
おめでとうございます!これで GitBook のドキュメントはカスタムサブディレクトリ経由でアクセス可能になりました。
トラブルシューティング
Lambda 関数がトリガーされない:
Lambda 関数のバージョンを公開していることを確認してください(使用しているのが
$LATEST)Lambda 関数が us-east-1 リージョンにあることを確認してください
信頼ポリシーに次が含まれていることを確認してください
edgelambda.amazonaws.com
DNS が名前解決されない:
DNS の変更が反映されるまで時間がかかることがあります(最大 48 時間、通常はもっと速いです)
Route 53 レコードが正しい CloudFront ディストリビューションを指していることを確認してください
古い競合する DNS レコードを削除したことを確認してください
SSL 証明書エラー:
AWS Certificate Manager の SSL 証明書にカスタムドメインが含まれていることを確認してください
CloudFront 用の証明書は us-east-1 リージョンで作成する必要があります
サブディレクトリが機能しない:
次を確認してください
SUBDIRECTORYLambda 関数内の値が、GitBook で設定した内容と一致していること次を確認してください
targetLambda 関数内の が正しいことリクエストがディストリビューションに到達しているかどうかを確認するために CloudFront ログを確認してください
最終更新
役に立ちましたか?