> For the complete documentation index, see [llms.txt](https://gitbook.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gitbook.com/docs/documentation/ja-gitbook-documentation/docs-site/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-aws.md).

# AWSでCloudFrontとRoute 53を使ってサブディレクトリを設定する

{% hint style="info" %}
この機能は〜で利用できます [アルティメットサイトプラン](https://www.gitbook.com/pricing).
{% endhint %}

{% hint style="info" %}
このガイドでは、AWS CloudFront と Lambda\@Edge を使用してサブディレクトリを設定する方法について説明します。これは AWS ユーザー向けの一つの方法です。別の AWS 構成（NGINX を実行する EC2 インスタンスを備えたロードバランサーなど）を使用している場合は、リバースプロキシを異なる方法で設定する必要がある場合があります。お問い合わせは [サポート](/docs/documentation/ja-gitbook-documentation/rissu/support.md) 代替構成に関する案内が必要な場合。
{% endhint %}

{% stepper %}
{% step %}
**GitBook サイトの設定**

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

ドキュメントをホストする URL を入力します。次に、ドキュメントへアクセスするためのサブディレクトリを指定します。例： `example.com/docs`を入力し、 **設定**.

「 **追加設定**」の下に、プロキシ URL が表示されます。次の手順で Lambda 関数を設定する際に使用します。クリップボードにコピーしてください。
{% endstep %}

{% step %}
**Lambda\@Edge 関数を作成する**

AWS コンソールにサインインし、次の場所に移動します： **Lambda**.

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

次を選択します： **一から作成**、次に：

* 関数に、次のような分かりやすい名前を付けます： `gitbook-subpath-proxy。`
* 次を選択します： **Node.js** をランタイムとして選択します（利用可能な最新バージョンを使用）。
* アーキテクチャおよびその他の設定はデフォルトのままにします。

クリック **関数を作成**.
{% endstep %}

{% step %}
**Lambda 関数コードを更新する**

Lambda 関数エディタで、デフォルトのコードを以下の内容に置き換えます：

{% code lineNumbers="true" %}

```javascript
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;
};
```

{% endcode %}

{% hint style="warning" %}
必ず `target` を 8 行目で、最初の手順で GitBook から取得したプロキシ URL に更新してください。次のようになります： `https://proxy.gitbook.site/sites/site_XXXX`
{% endhint %}

{% hint style="warning" %}
また、必ず `subdirectory` を 5 行目で、以下とは異なるサブディレクトリパスを使用している場合に更新してください： `/docs`.
{% endhint %}

クリック **デプロイ** して変更を保存します。
{% endstep %}

{% step %}
**Lambda\@Edge 用の Lambda 権限を設定する**

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

1. Lambda 関数で、 **設定** タブ
2. クリック **アクセス許可** 左側のサイドバーにある
3. 「 **実行ロール**で、ロール名をクリックして IAM で開きます
4. をクリックします。 **信頼関係** タブ
5. クリック **信頼ポリシーを編集**
6. 信頼ポリシーを以下の内容に置き換えます：

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

クリック **ポリシーを更新** して保存します。
{% endstep %}

{% step %}
**Lambda 関数を公開する**

Lambda\@Edge では、公開済みのバージョンが必要です（単なる `$LATEST`).

1. Lambda 関数で、 **アクション** 右上のドロップダウンをクリックします
2. 次を選択します： **新しいバージョンを発行**
3. 必要に応じて「CloudFront 用の初期バージョン」などの説明を追加します
4. クリック **発行**
5. **重要：** ページ上部に表示される公開済みバージョンの ARN をコピーします（末尾に次のようなバージョン番号が含まれます： `arn:aws:lambda:us-east-1:123456789:function:gitbook-subpath-proxy:1`)

{% hint style="warning" %}
Lambda\@Edge 関数は、次のリージョンで作成する必要があります： **us-east-1** （バージニア北部）リージョン。別のリージョンで関数を作成した場合は、us-east-1 で再作成する必要があります。
{% endhint %}
{% endstep %}

{% step %}
**CloudFront ディストリビューションを作成する**

次の場所に移動します： **CloudFront** AWS コンソールで、次をクリックします： **ディストリビューションを作成**.

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

**オリジンを指定**

| 設定           | 値                                |
| ------------ | -------------------------------- |
| **オリジンタイプ**  | その他                              |
| **カスタムオリジン** | メインウェブサイトのドメイン（例： `example.com`) |

**キャッシュ設定**

| 設定                | 値                         |
| ----------------- | ------------------------- |
| **キャッシュポリシー**     | CachingDisabled           |
| **オリジンリクエストポリシー** | AllViewerExceptHostHeader |

クリック **次に、** 希望するセキュリティ保護を選択してから、 **次へ** をもう一度クリックします。

クリック **ディストリビューションを作成**.

ディストリビューションがデプロイされるまで待ちます（ステータスが「In Progress」から「Enabled」に変わります）。数分かかる場合があります。
{% endstep %}

{% step %}
**Lambda\@Edge を CloudFront に関連付ける**

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

1. ディストリビューション ID をクリックして設定を開きます
2. 次に移動します： **ビヘイビア** タブ
3. デフォルトのビヘイビアを選択して、次をクリックします： **編集**
4. 下にスクロールして、次の項目に移動します： **関数の関連付け**
5. 「 **オリジンリクエスト**で、次を選択します： **Lambda\@Edge**
6. で、 **Lambda 関数 ARN** フィールドに、公開済み Lambda 関数の ARN（手順 5）を貼り付けます
7. 確認する **本文を含める** を選択して、必要に応じて関数がリクエスト本文にアクセスできるようにします
8. クリック **変更を保存**
   {% endstep %}

{% step %}
**ドメインと DNS レコードを設定する**

1. CloudFront ディストリビューションのメインページで、 **一般** タブをクリックし、 **代替ドメイン名**を開き、 **ドメインを追加**
2. サブディレクトリを設定するドメインを入力します。例： `example.com` を入力し、 **次へ**
3. 既存の TLS 証明書を選択するか、必要に応じて新しい証明書を作成してから、 **次へ** もう一度
   {% endstep %}

{% step %}
**CloudFront から Route 53 DNS レコードを設定する**

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

1. CloudFront ディストリビューションのメインページを開いたまま、 **一般** タブを表示していることを確認し、 **代替ドメイン名** で設定した URL の下にある **ドメインを CloudFront にルーティング**
2. 次をクリックします： **ルーティングを自動的に設定** して、ドメイン用の A および AAAA DNS レコードを作成します

{% hint style="info" %}
Route 53 を使用していない場合は、ドメインが CloudFront ディストリビューションのドメイン名を指すよう、DNS プロバイダーの設定を更新する必要があります。これは CloudFront ディストリビューションの詳細の「Distribution domain name」で確認できます。
{% endhint %}
{% endstep %}

{% step %}
**構成をテストする**

すべての変更が反映されたら（10～15 分かかる場合があります）：

1. ブラウザを開き、サブディレクトリパス付きのドメインにアクセスします（例： `https://example.com/docs`)
2. GitBook のドキュメントサイトが表示されるはずです！

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

* DNS 変更が反映されるまでさらに数分待つ
* ブラウザのキャッシュをクリアする、またはシークレットウィンドウを試す
* 次を実行します： `nslookup yourdomain.com` をターミナルで実行し、DNS が正しく名前解決されていることを確認する
* CloudFront ディストリビューションのステータスが「In Progress」ではなく「Enabled」であることを確認する

{% hint style="success" %}
おめでとうございます！GitBook のドキュメントに、カスタムサブディレクトリ経由でアクセスできるようになりました。
{% endhint %}
{% endstep %}
{% endstepper %}

### トラブルシューティング

**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 リージョンで作成する必要があります

**サブディレクトリが機能しない：**

* 次のことを確認します： `SUBDIRECTORY` Lambda 関数内の値が、GitBook で設定した値と一致していること
* 次のことを確認します： `target` が Lambda 関数内で正しいこと
* CloudFront ログを確認し、リクエストがディストリビューションに到達しているかを確認する


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://gitbook.com/docs/documentation/ja-gitbook-documentation/docs-site/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-aws.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
