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

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

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

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

GitBook 組織で、サイドバーの docs サイト名をクリックし、次に **サイトを管理** をクリックするか、 **設定** タブを開きます。 **ドメインとリダイレクト** セクションを開き、『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 から取得したプロキシ 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 権限を設定する**

Lambda 関数を CloudFront で使用する前に、実行ロールを設定して 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** （N. Virginia）リージョンで作成する必要があります。関数を別のリージョンで作成した場合は、us-east-1 で作り直す必要があります。
{% endhint %}
{% endstep %}

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

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

次の設定を行います。設定が指定されていない場合は、既定の設定のままにしてください。

**オリジンを指定**

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

**キャッシュ設定**

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

クリックして **次に、** お好みのセキュリティ保護を選択し、次に **「次へ」** をもう一度クリックします。

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

ディストリビューションのデプロイが完了するまで待ちます（ステータスは「処理中」から「有効」に変わります）。これには数分かかる場合があります。
{% 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 の下で **ルートドメインを 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 ディストリビューションのステータスが「有効」であり、「処理中」ではないことを確認します

{% 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/gong-kai/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.
