CloudFrontとRoute 53を使ってAWSでサブディレクトリを設定する
AWS CloudFrontとRoute 53を使って、/docs サブディレクトリでドキュメントをホストします。
GitBookサイトの設定
GitBook 組織で、サイドバーのドキュメントサイト名をクリックし、次に サイトを管理 をクリックするか、 設定 タブを開きます。 ドメインとリダイレクト セクションを開き、「Subdirectory」の下で サブディレクトリを設定.
ドキュメントをホストしたいURLを入力します。次に、ドキュメントへのアクセス用のサブディレクトリを指定します。例: example.com/docs、そして 設定.
の下で 追加設定をクリックすると、プロキシ URL が表示されます。これは次の手順で Lambda 関数を設定するときに使用します。クリップボードにコピーしてください。
Lambda@Edge 関数を作成する
AWS コンソールにサインインして、 Lambda.
クリックして 関数の作成 ボタンをクリックしてください。
を選択します 一から作成、そして次のようにします:
関数に説明的な名前を付けます。たとえば
gitbook-subpath-proxy。選択 Node.js をランタイムとして使用します(利用可能な最新バージョンを使用してください)。
アーキテクチャとその他の設定はデフォルトのままにします。
クリック 関数の作成.
Lambda 関数コードを更新する
Lambda 関数エディタで、デフォルトのコードを次の内容に置き換えます:
export const handler = async (event) => {
const request = event.Records[0].cf.request;
// サブディレクトリが /docs でない場合は更新してください
const subdirectory = '/docs';
// 下のプロキシ URL に更新してください
const target = new URL('<GitBook から取得した proxy URL>');
// rewrite: /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 を 8 行目で、最初の手順で GitBook から取得したプロキシ URL に更新してください。これは次のようになります https://proxy.gitbook.site/sites/site_XXXX
また、 subdirectory も、別のサブディレクトリのパスを使っている場合は 5 行目で更新してください。 /docs.
クリック デプロイ して変更を保存します。
Lambda@Edge 用の Lambda 権限を設定する
CloudFront で Lambda 関数を使用する前に、実行ロールが 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 をコピーします(末尾にバージョン番号が含まれます。たとえば)
Lambda@Edge 関数は us-east-1 (N. Virginia)リージョンで作成する必要があります。別のリージョンで関数を作成した場合は、us-east-1 で再作成する必要があります。
CloudFront ディストリビューションを作成する
次へ移動します CloudFront を AWS コンソールで開き、 ディストリビューションを作成.
をクリックします。以下の設定を構成します。指定されていない設定は、デフォルトのままにしてください。
オリジンを指定
オリジンの種類
その他
カスタムオリジン
メインの Web サイトのドメイン(例: example.com)
キャッシュ設定
キャッシュポリシー
CachingDisabled
オリジンリクエストポリシー
AllViewerExceptHostHeader
クリック 次に、 お好みのセキュリティ保護を選択し、 次へ をもう一度クリックします。
クリック ディストリビューションを作成.
ディストリビューションのデプロイを待ちます(ステータスは「処理中」から「有効」に変わります)。これには数分かかる場合があります。
Lambda@Edge を CloudFront に関連付ける
CloudFront ディストリビューションがデプロイされたら:
ディストリビューション ID をクリックして設定を開きます
に移動します ビヘイビア タブ
デフォルトのビヘイビアを選択し、 編集
までスクロールして 関数の関連付け
の下で オリジンリクエストに移動し、 Lambda@Edge
内で、 Lambda 関数 ARN フィールドに、公開した Lambda 関数の ARN(手順 5 のもの)を貼り付けます
確認する 本文を含める 必要に応じて関数がリクエスト本文にアクセスできるようにします
クリック 変更を保存
ドメインと DNS レコードを設定する
CloudFront ディストリビューションのメインページで、 一般 タブをクリックし、 代替ドメイン名の下で、 ドメインを追加
サブディレクトリを設定しているドメインを入力します。例:
example.comをクリックし、 次へ既存の TLS 証明書を選択するか、必要に応じて新しいものを作成し、 次へ をもう一度クリックします
CloudFront から Route 53 の DNS レコードを設定する
DNS に Route 53 を使用している場合は、DNS レコードを作成または更新して CloudFront ディストリビューションを指すようにする必要があります。
CloudFront ディストリビューションのメインページに留まり、 一般 タブにいることを確認してから、で設定した URL の下の 代替ドメイン名 をクリックします ドメインを CloudFront にルーティングします。
次をクリックします ルーティングを自動的に設定 して、ドメイン用の A および AAAA DNS レコードを作成します
構成をテストする
すべての変更が反映されたら(これには 10〜15 分かかることがあります):
ブラウザを開き、サブディレクトリのパスを含めたドメインに移動します(例:
https://example.com/docs)GitBook のドキュメントサイトが表示されるはずです!
サイトがすぐに読み込まれない場合は、次を試してください:
DNS の伝播を数分待つ
ブラウザのキャッシュをクリアするか、シークレットウィンドウを試す
を実行する
nslookup yourdomain.comターミナルで DNS が正しく解決されていることを確認しますCloudFront ディストリビューションのステータスが「有効」であり、「処理中」ではないことを確認する
おめでとうございます!これで 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 リージョンで作成する必要があります
サブディレクトリが動作しない:
Lambda 関数内の
SUBDIRECTORYの値が GitBook で設定した内容と一致していることを確認しますLambda 関数内の
targetが正しいことを確認してくださいCloudFront ログを確認して、リクエストがディストリビューションに到達しているか確認します
最終更新
役に立ちましたか?