AWS(CloudFront と Route 53)でのサブディレクトリ設定

AWS CloudFrontとRoute 53を使用して/docsサブディレクトリでドキュメントをホストする

この機能は以下で利用可能です: Ultimate サイトプランに登場します.

このガイドでは、AWS CloudFront と Lambda@Edge を使用してサブディレクトリを設定する手順を説明します。これは AWS ユーザー向けの一つのアプローチです。もしロードバランサーと NGINX を実行する EC2 インスタンスなど、別の AWS 設定を使用している場合は、リバースプロキシの構成を別途行う必要があるかもしれません。相談が必要な場合は サポート にお問い合わせください。

1

GitBookサイトの設定

GitBook の組織で、サイドバーのドキュメントサイト名をクリックし、次に サイトを管理 をクリックするか、 設定 タブを開きます。 ドメインとリダイレクト セクションを開き、「Subdirectory(サブディレクトリ)」の下で サブディレクトリを設定.

ドキュメントをホストしたいURLを入力します。次にドキュメントアクセス用のサブディレクトリを指定します。例: example.com/docs、そしてクリックします 設定.

の下に 追加の設定をクリックすると、プロキシ URL が表示されます。これは次のステップで Lambda 関数を設定するときに使用します。クリップボードにコピーしてください。

2

Lambda@Edge 関数を作成する

AWS コンソールにサインインし、次に移動します: Lambda.

をクリックします 関数の作成 ボタン。

選択 Author from scratch(ゼロから作成)、その後:

  • 関数に説明的な名前を付けます(例: gitbook-subpath-proxy)。

  • を開きます ランタイムには Node.js

  • を選択します(利用可能な最新バージョンを使用してください)。

クリック 関数の作成.

3

アーキテクチャやその他の設定はデフォルトのままにします。

Lambda 関数のコードを更新する

Lambda 関数エディタで、デフォルトのコードを以下の内容に置き換えます:
	export const handler = async (event) => {
	
	const request = event.Records[0].cf.request;
	// サブディレクトリが /docs でない場合はここを更新してください
	
	const subdirectory = '/docs';
	// 下の proxy 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 }];
};

クリック /docs 「デプロイ」をクリックして変更を保存します。

4

Lambda@Edge 用の Lambda 権限を設定する

Lambda 関数を CloudFront と共に使用する前に、Lambda@Edge が実行ロールを引き受けられるように実行ロールの設定を行う必要があります。

  1. Lambda 関数の画面で、 設定 タブをクリックします

  2. クリック 権限 (左サイドバー)

  3. の下に 実行ロールをクリックし、ロール名をクリックして IAM で開きます

  4. をクリックします 信頼関係 タブをクリックします

  5. クリック 信頼ポリシーの編集

  6. 信頼ポリシーを以下の内容に置き換えます:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "edgelambda.amazonaws.com",
                    "lambda.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

クリック 「ポリシーの更新」をクリックして保存します。 Lambda 関数を公開する

5

Lambda@Edge では公開バージョンが必要です(単に

$LATEST では不可)。).

  1. Lambda 関数の画面で、右上の 操作 ドロップダウンをクリックし

  2. を開きます 「新しいバージョンを公開」を選択します。

  3. 任意で「CloudFront 用の初期バージョン」のような説明を追加します。

  4. クリック 公開

  5. 重要: ページ上部に表示される公開バージョンの ARN をコピーしてください(末尾にバージョン番号が含まれます。例: arn:aws:lambda:us-east-1:123456789:function:gitbook-subpath-proxy:1)

6

CloudFront ディストリビューションを作成する

に移動します AWS コンソールで CloudFront に移動し、.

「ディストリビューションを作成」をクリックします。

以下の設定を構成します。指定がない設定はデフォルトのままにしてください。

オリジンの指定
先ほど作成したシークレットの

設定

オリジンタイプ

その他

カスタムオリジン あなたのメインのウェブサイトドメイン(例:)

example.com

オリジンの指定
先ほど作成したシークレットの

キャッシュ設定

キャッシュポリシー

CachingDisabled

オリジンリクエストポリシー

クリック AllViewerExceptHostHeader 次に、希望するセキュリティ保護を選択し、再度 次へ をクリックします。

クリック に移動し、.

ディストリビューションがデプロイされるのを待ちます(ステータスが「In Progress」から「Enabled」に変わります)。数分かかる場合があります。

7

Lambda@Edge を CloudFront に関連付ける

CloudFront ディストリビューションがデプロイされたら:

  1. ディストリビューション ID をクリックしてその設定を開きます

  2. Behaviors(ビヘイビア)」に移動します タブをクリックします

  3. デフォルトのビヘイビアを選択して 編集

  4. をクリックします 下にスクロールして

  5. の下に Function associations(関数の関連付け)を選択し、バックエンドとして Okta を選びます。 Origin request(オリジンリクエスト)

  6. で、 Lambda@Edge Lambda 関数 ARN

  7. を確認してください のフィールドに、公開した Lambda 関数の ARN(ステップ 5 のもの)を貼り付けます Include body(ボディを含める)

  8. クリック を有効にして、必要な場合に関数がリクエストボディにアクセスできるようにします

8

変更を保存します

  1. ドメインと DNS レコードを設定する 一般 CloudFront ディストリビューションのメインページで、 タブをクリックし、「Alternate domain names(代替ドメイン名)」の下で 「ドメインを追加」をクリックします

  2. サブディレクトリを設定するドメインを入力します(例: あなたのメインのウェブサイトドメイン(例: を開いて 次へ

  3. 既存の TLS 証明書を選択するか、必要に応じて新しく作成し、再度 次へ をクリックします

9

CloudFront から Route 53 の DNS レコードを設定する

DNS に Route 53 を使用している場合は、CloudFront ディストリビューションを指すように DNS レコードを作成または更新する必要があります。

  1. CloudFront ディストリビューションのメインページにいるまま、 一般 タブにいることを確認し、次に「Alternate domain names」に設定した URL の下で、 をクリックします。 「Route ドメインを CloudFront にルーティング」 をクリックします。

  2. クリックしてください ルーティングを自動設定する を選択すると、ドメイン用の A および AAAA レコードが作成されます

Route 53 を使用していない場合は、DNS プロバイダの設定を更新してドメインが CloudFront ディストリビューションのドメイン名を指すようにしてください。CloudFront の詳細で「Distribution domain name(ディストリビューションドメイン名)」に記載されています。

10

設定をテストする

すべての変更が伝播されたら(通常 10~15 分かかります):

  1. ブラウザを開き、サブディレクトリ付きのあなたのドメインにアクセスします(例: https://example.com/docs)

  2. GitBook のドキュメントサイトが表示されるはずです!

サイトがすぐに読み込まれない場合は、次を試してください:

  • DNS の伝播のためにさらに数分待つ

  • ブラウザのキャッシュをクリアするか、シークレットウィンドウで試す

  • ターミナルで次を実行する: nslookup yourdomain.com で DNS が正しく解決されているか確認する

  • CloudFront のステータスが「Enabled」であり「In Progress」ではないことを確認する

トラブルシューティング

Lambda 関数がトリガーされない場合:

  • Lambda 関数のバージョンを公開したことを確認してください(単に では不可)。)

  • を使用していないこと)

  • 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 関数内の値が正しいことを確認してください(英語原文の該当箇所)

最終更新

役に立ちましたか?