# Configurer un sous-répertoire avec AWS à l’aide de CloudFront et Route 53

{% hint style="info" %}
Ce guide couvre la configuration d’un sous-répertoire à l’aide d’AWS CloudFront et Lambda\@Edge. Il s’agit d’une approche possible pour les utilisateurs d’AWS. Si vous avez une configuration AWS différente (comme un équilibreur de charge avec des instances EC2 exécutant NGINX), vous devrez შესაძლოა configurer votre proxy inverse différemment. Contactez [l’assistance](https://gitbook.com/docs/help-center/further-help/how-do-i-contact-support) si vous avez besoin d’aide pour des configurations alternatives.
{% endhint %}

{% stepper %}
{% step %}
**Configuration de votre site GitBook**

Dans votre organisation GitBook, cliquez sur le nom de votre site de documentation dans la barre latérale, puis cliquez sur **Gérer le site** ou ouvrez l’onglet **Paramètres** Ouvrez la section **Domaine et redirections** et sous « Sous-répertoire », cliquez sur **Configurer un sous-répertoire**.

Saisissez l’URL où vous souhaitez héberger votre documentation. Ensuite, spécifiez le sous-répertoire d’accès à la documentation, par ex. `example.com/docs`, puis cliquez sur **Configurer**.

Sous **Configuration supplémentaire**, vous verrez maintenant une URL de proxy. Vous l’utiliserez à l’étape suivante lors de la configuration de votre fonction Lambda. Copiez-la dans votre presse-papiers.
{% endstep %}

{% step %}
**Créez votre fonction Lambda\@Edge**

Connectez-vous à votre console AWS et accédez à **Lambda**.

Cliquez sur le bouton **Créer une fonction** .

Choisissez **Créer à partir de zéro**, puis :

* Donnez à votre fonction un nom descriptif, comme `gitbook-subpath-proxy.`
* Sélectionnez **Node.js** comme runtime (utilisez la dernière version disponible).
* Laissez l’architecture et les autres paramètres par défaut.

Cliquez sur **Créer une fonction**.
{% endstep %}

{% step %}
**Mettez à jour le code de la fonction Lambda**

Dans l’éditeur de fonction Lambda, remplacez le code par défaut par le suivant :

{% code lineNumbers="true" %}

```javascript
export const handler = async (event) => {
	const request = event.Records[0].cf.request;
	
	// mettez à jour si votre sous-répertoire n’est pas /docs
	const subdirectory = '/docs';
	
	// mettez à jour avec votre URL de proxy ci-dessous
	const target = new URL('<URL de proxy obtenue depuis GitBook>');

	// réécriture : /docs* -> proxy.gitbook.site
	if (request.uri.startsWith(subdirectory)) {
		request.uri = target.pathname + request.uri.substring(subdirectory.length);

		// Supprimez la barre oblique finale si elle est présente
		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" %}
Assurez-vous de mettre à jour `target` à la ligne 8 avec l’URL de proxy que vous avez obtenue depuis GitBook à la première étape. Elle ressemblera à `https://proxy.gitbook.site/sites/site_XXXX`
{% endhint %}

{% hint style="warning" %}
Assurez-vous également de mettre à jour `subdirectory` à la ligne 5 si vous utilisez un chemin de sous-répertoire différent de `/docs`.
{% endhint %}

Cliquez sur **Déployer** pour enregistrer vos modifications.
{% endstep %}

{% step %}
**Configurer les autorisations Lambda pour Lambda\@Edge**

Avant de pouvoir utiliser votre fonction Lambda avec CloudFront, vous devez configurer le rôle d’exécution afin d’autoriser Lambda\@Edge à l’assumer.

1. Dans votre fonction Lambda, cliquez sur l’onglet **Configuration** onglet
2. Cliquez sur **Autorisations** dans la barre latérale gauche
3. Sous **Rôle d’exécution**, cliquez sur le nom du rôle pour l’ouvrir dans IAM
4. Cliquez sur le bouton **Relations d’approbation** onglet
5. Cliquez sur **Modifier la politique d’approbation**
6. Remplacez la politique d’approbation par ce qui suit :

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

Cliquez sur **Mettre à jour la politique** pour enregistrer.
{% endstep %}

{% step %}
**Publiez votre fonction Lambda**

Lambda\@Edge nécessite une version publiée (pas seulement `$LATEST`).

1. Dans votre fonction Lambda, cliquez sur le menu déroulant **Actions** en haut à droite
2. Sélectionnez **Publier une nouvelle version**
3. Ajoutez éventuellement une description comme « Version initiale pour CloudFront »
4. Cliquez sur **Publier**
5. **Important :** Copiez l’ARN de la version publiée qui apparaît en haut de la page (il inclura un numéro de version à la fin, comme `arn:aws:lambda:us-east-1:123456789:function:gitbook-subpath-proxy:1`)

{% hint style="warning" %}
Les fonctions Lambda\@Edge doivent être créées dans la région **us-east-1** (Virginie du Nord). Si vous avez créé votre fonction dans une autre région, vous devrez la recréer dans us-east-1.
{% endhint %}
{% endstep %}

{% step %}
**Créez votre distribution CloudFront**

Accédez à **CloudFront** dans la console AWS et cliquez sur **Créer une distribution**.

Configurez les paramètres suivants. Lorsque des paramètres ne sont pas précisés, conservez les paramètres par défaut.

**Spécifier l’origine**

| Paramètre                 | Valeur                                                      |
| ------------------------- | ----------------------------------------------------------- |
| **Type d’origine**        | Autre                                                       |
| **Origine personnalisée** | Le domaine de votre site principal (par ex., `example.com`) |

**Paramètres du cache**

| Paramètre                          | Valeur                    |
| ---------------------------------- | ------------------------- |
| **Politique de cache**             | CachingDisabled           |
| **Politique de requête d’origine** | AllViewerExceptHostHeader |

Cliquez sur **Ensuite,** sélectionnez vos protections de sécurité préférées, puis cliquez sur **Suivant** à nouveau.

Cliquez sur **Créer une distribution**.

Attendez que la distribution soit déployée (le statut passera de « En cours » à « Activé »). Cela peut prendre plusieurs minutes.
{% endstep %}

{% step %}
**Associer Lambda\@Edge à CloudFront**

Une fois votre distribution CloudFront déployée :

1. Cliquez sur l’ID de votre distribution pour ouvrir ses paramètres
2. Accédez à l’onglet **Comportements** onglet
3. Sélectionnez le comportement par défaut et cliquez sur **Modifier**
4. Faites défiler jusqu’à **Associations de fonctions**
5. Sous **Requête d’origine**, sélectionnez **Lambda\@Edge**
6. Dans le champ **ARN de la fonction Lambda** , collez l’ARN de votre fonction Lambda publiée (de l’étape 5)
7. Cochez **Inclure le corps** pour permettre à la fonction d’accéder aux corps des requêtes si nécessaire
8. Cliquez sur **Enregistrer les modifications**
   {% endstep %}

{% step %}
**Configurer le domaine et les enregistrements DNS**

1. Sur la page principale de votre distribution CloudFront, cliquez sur l’onglet **Général** et sous **Noms de domaine alternatifs**, cliquez sur **Ajouter un domaine**
2. Saisissez le domaine pour lequel vous configurez votre sous-répertoire, par ex. `example.com` et cliquez sur **Suivant**
3. Sélectionnez votre certificat TLS existant, ou créez-en un nouveau si nécessaire, puis cliquez sur **Suivant** à nouveau
   {% endstep %}

{% step %}
**Configurer les enregistrements DNS Route 53 depuis CloudFront**

Si vous utilisez Route 53 pour le DNS, vous devrez créer ou mettre à jour vos enregistrements DNS pour qu’ils pointent vers votre distribution CloudFront.

1. Tout en restant sur la page principale de votre distribution CloudFront, assurez-vous d’être sur l’onglet **Général** , puis sous l’URL que vous avez configurée dans **Noms de domaine alternatifs,** cliquez sur **Acheminer les domaines vers CloudFront.**
2. Cliquez sur **Configurer le routage automatiquement** pour créer des enregistrements DNS A et AAAA pour votre domaine

{% hint style="info" %}
Si vous n’utilisez pas Route 53, vous devrez mettre à jour les paramètres de votre fournisseur DNS afin que votre domaine pointe vers le nom de domaine de votre distribution CloudFront. Vous pouvez le trouver dans les détails de la distribution CloudFront sous « Nom de domaine de la distribution ».
{% endhint %}
{% endstep %}

{% step %}
**Testez votre configuration**

Une fois que toutes les modifications se sont propagées (cela peut prendre 10 à 15 minutes) :

1. Ouvrez un navigateur et accédez à votre domaine avec le chemin du sous-répertoire (par ex., `https://example.com/docs`)
2. Vous devriez voir votre site de documentation GitBook !

Si le site ne se charge pas immédiatement, essayez :

* Attendre quelques minutes de plus pour la propagation DNS
* Vider le cache de votre navigateur ou essayer une fenêtre de navigation privée
* Exécuter `nslookup yourdomain.com` dans le terminal pour vérifier que le DNS se résout correctement
* Vérifier que le statut de la distribution CloudFront est « Activé » et non « En cours »

{% hint style="success" %}
Félicitations ! Votre documentation GitBook est désormais accessible via votre sous-répertoire personnalisé.
{% endhint %}
{% endstep %}
{% endstepper %}

### Dépannage

**La fonction Lambda ne se déclenche pas :**

* Assurez-vous d’avoir publié une version de votre fonction Lambda (sans utiliser `$LATEST`)
* Vérifiez que la fonction Lambda se trouve dans la région us-east-1
* Vérifiez que la politique d’approbation inclut `edgelambda.amazonaws.com`

**Le DNS ne se résout pas :**

* Les modifications DNS peuvent prendre du temps à se propager (jusqu’à 48 heures, bien que ce soit généralement beaucoup plus rapide)
* Vérifiez que vos enregistrements Route 53 pointent vers la bonne distribution CloudFront
* Vérifiez que vous avez supprimé tous les anciens enregistrements DNS en conflit

**Erreurs de certificat SSL :**

* Assurez-vous que votre certificat SSL dans AWS Certificate Manager inclut votre domaine personnalisé
* Les certificats pour CloudFront doivent être créés dans la région us-east-1

**Le sous-répertoire ne fonctionne pas :**

* Vérifiez que la valeur `SUBDIRECTORY` dans votre fonction Lambda correspond à ce que vous avez configuré dans GitBook
* Vérifiez que le `target` dans votre fonction Lambda est correct
* Consultez les journaux CloudFront pour voir si les requêtes atteignent la distribution


---

# Agent Instructions: 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:

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

The question should be specific, self-contained, and written in natural language.
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.
