> 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/publish/custom-domain/setting-a-custom-subdirectory/configuring-a-subdirectory-with-aws.md).

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

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

{% hint style="info" %}
このガイドでは、AWS CloudFront と Lambda\@Edge を使ってサブディレクトリを設定する方法を説明します。これは AWS ユーザー向けの一つの方法です。別の AWS 構成（たとえば、NGINX を実行している EC2 インスタンスを持つロードバランサーなど）を使っている場合は、リバースプロキシの設定を別に行う必要があるかもしれません。お問い合わせ [サポート](broken://pages/55ca09da2fc64db3d290bfa3cf9175afa45c2bdc) 代替構成についての案内が必要な場合は。
{% endhint %}

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

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

ドキュメントをホストしたい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 から取得した proxy 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** （米国東部 1（バージニア北部））リージョンで作成する必要があります。別のリージョンで関数を作成した場合は、us-east-1 で作り直す必要があります。
{% endhint %}
{% endstep %}

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

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

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

**オリジンを指定**

| 設定           | 値                                   |
| ------------ | ----------------------------------- |
| **オリジンの種類**  | その他                                 |
| **カスタムオリジン** | メインの Web サイトのドメイン（例: `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 を使用している場合は、DNS レコードを作成または更新して CloudFront ディストリビューションを指すようにする必要があります。

1. CloudFront ディストリビューションのメインページのまま、 **全般** タブを開き、その下の、で設定した URL の下に **代替ドメイン名、** をクリックします **Route ドメインを CloudFront にルーティングします。**
2. をクリックします **ルーティングを自動的に設定** して、ドメインの A および AAAA の DNS レコードを作成します

{% hint style="info" %}
Route 53 を使っていない場合は、DNS プロバイダーの設定を更新して、ドメインを CloudFront ディストリビューションのドメイン名に向ける必要があります。これは 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
