

Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Résolution des problèmes courants liés au AWS CDK
<a name="troubleshooting"></a>

Cette rubrique explique comment résoudre les problèmes suivants liés au AWS CDK.
+  [Après avoir mis à jour le AWS CDK, le AWS CDK Toolkit (CLI) signale une incompatibilité avec la bibliothèque Construct AWS](#troubleshooting-toolkit) 
+  [Lors du déploiement de ma pile AWS CDK, je reçois un message d'erreur NoSuchBucket ](#troubleshooting-nobucket) 
+  [Lors du déploiement de ma pile AWS CDK, je reçois un message « forbidden : null »](#troubleshooting-forbidden-null) 
+  [Lors de la synthèse d'une pile AWS CDK, je reçois le message --app is required soit en ligne de commande dans cdk.json, soit dans \~/.cdk.json](#troubleshooting-app-required) 
+  [Lors de la synthèse d'une pile AWS CDK, je reçois une erreur car le AWS CloudFormation modèle contient trop de ressources](#troubleshooting-resource-count) 
+  [J'ai spécifié trois zones de disponibilité (ou plus) pour mon groupe Auto Scaling ou mon VPC, mais celui-ci n'a été déployé que dans deux](#troubleshooting-availability-zones) 
+  [Mon compartiment S3, ma table DynamoDB ou une autre ressource n'est pas supprimée lorsque j'envoie cdk destroy.](#troubleshooting-resource-not-deleted) 

## Après la mise à jour du AWS CDK, le AWS CDK Toolkit (CLI) signale une incompatibilité avec la bibliothèque Construct AWS
<a name="troubleshooting-toolkit"></a>

La version du kit d'outils AWS CDK (qui fournit la `cdk` commande) doit être au moins égale à la version du module principal de AWS Construct Library,`aws-cdk-lib`. Le kit d'outils est destiné à être rétrocompatible. La dernière version 2.x de la boîte à outils peut être utilisée avec n'importe quelle version 1.x ou 2.x de la bibliothèque. Pour cette raison, nous vous recommandons d'installer ce composant globalement et de le maintenir à jour.

```
npm update -g aws-cdk
```

Si vous devez travailler avec plusieurs versions du kit d'outils AWS CDK, installez une version spécifique du kit d'outils localement dans le dossier de votre projet.

Si vous utilisez TypeScript ou JavaScript, le répertoire de votre projet contient déjà une copie locale versionnée du kit d'outils CDK.

Si vous utilisez une autre langue, utilisez-la `npm` pour installer le kit d'outils AWS CDK, en omettant le `-g` drapeau et en spécifiant la version souhaitée. Par exemple :

```
npm install aws-cdk@2.0
```

Pour exécuter un kit d'outils AWS CDK installé localement, utilisez la commande `npx aws-cdk` au lieu de uniquement`cdk`. Par exemple :

```
npx aws-cdk deploy MyStack
```

 `npx aws-cdk`exécute la version locale du kit d'outils AWS CDK s'il en existe une. Il revient à la version globale lorsqu'un projet n'a pas d'installation locale. Vous trouverez peut-être pratique de configurer un alias de shell pour vous assurer qu'il `cdk` est toujours invoqué de cette façon.

**Example**  

```
alias cdk="npx aws-cdk"
```

```
doskey cdk=npx aws-cdk $*
```

## Lors du déploiement de ma pile AWS CDK, je reçois un message d'erreur `NoSuchBucket`
<a name="troubleshooting-nobucket"></a>

Votre AWS environnement n'a pas été amorcé et ne dispose donc pas d'un compartiment Amazon S3 pour stocker les ressources pendant le déploiement. Vous pouvez créer le bucket intermédiaire et les autres ressources requises à l'aide de la commande suivante :

```
cdk bootstrap aws://ACCOUNT-NUMBER/REGION
```

Pour éviter de générer AWS des frais inattendus, le AWS CDK ne démarre automatiquement aucun environnement. Vous devez amorcer explicitement chaque environnement dans lequel vous allez effectuer le déploiement.

Par défaut, les ressources bootstrap sont créées dans la ou les régions utilisées par les piles dans l'application AWS CDK actuelle. Ils sont également créés dans la région spécifiée dans votre AWS profil local (définie par`aws configure`), en utilisant le compte de ce profil. Vous pouvez spécifier un compte et une région différents sur la ligne de commande comme suit. (Vous devez spécifier le compte et la région si vous ne vous trouvez pas dans le répertoire d'une application.)

```
cdk bootstrap aws://ACCOUNT-NUMBER/REGION
```

Pour plus d'informations, consultez la section [AWS Démarrage du CDK.](bootstrapping.md)

## Lors du déploiement de ma pile AWS CDK, je reçois un message `forbidden: null`
<a name="troubleshooting-forbidden-null"></a>

Vous déployez une pile qui nécessite des ressources d'amorçage, mais vous utilisez un rôle ou un compte IAM qui n'est pas autorisé à y écrire. (Le bucket intermédiaire est utilisé lors du déploiement de piles contenant des actifs ou synthétisant un AWS CloudFormation modèle supérieur à 50 000.) Utilisez un compte ou un rôle autorisé à effectuer l'action sur `s3:*` le bucket mentionné dans le message d'erreur.

## Lors de la synthèse d'une pile de AWS CDK, je reçois le message `--app is required either in command-line, in cdk.json or in ~/.cdk.json`
<a name="troubleshooting-app-required"></a>

Ce message signifie généralement que vous n'êtes pas dans le répertoire principal de votre projet AWS CDK lorsque vous le `cdk synth` publiez. Le fichier `cdk.json` de ce répertoire, créé par la `cdk init` commande, contient la ligne de commande nécessaire pour exécuter (et ainsi synthétiser) votre application AWS CDK. Pour une TypeScript application, par exemple, la valeur par défaut `cdk.json` ressemble à ceci :

```
{
  "app": "npx ts-node bin/my-cdk-app.ts"
}
```

Nous vous recommandons d'émettre des `cdk` commandes uniquement dans le répertoire principal de votre projet, afin que le kit d'outils AWS CDK puisse `cdk.json` y trouver et exécuter correctement votre application.

Si cela n'est pas pratique pour une raison ou une autre, le AWS CDK Toolkit recherche la ligne de commande de l'application à deux autres emplacements :
+ `cdk.json`Dans votre répertoire personnel
+ Sur la `cdk synth` commande elle-même en utilisant l'`-a`option

Par exemple, vous pouvez synthétiser une pile à partir d'une TypeScript application comme suit.

```
cdk synth --app "npx ts-node my-cdk-app.ts" MyStack
```

## Lors de la synthèse d'une pile AWS CDK, je reçois une erreur car le AWS CloudFormation modèle contient trop de ressources
<a name="troubleshooting-resource-count"></a>

Le AWS CDK génère et déploie des modèles. AWS CloudFormation AWS CloudFormation impose une limite stricte au nombre de ressources qu'une pile peut contenir. Avec le AWS CDK, vous pouvez atteindre cette limite plus rapidement que vous ne le pensez.

**Note**  
La limite de AWS CloudFormation ressources est de 500 au moment d'écrire ces lignes. Voir [AWS CloudFormation les quotas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) pour la limite de ressources actuelle.

Les constructions de niveau supérieur basées sur l'intention de la bibliothèque AWS Construct fournissent automatiquement toutes les ressources auxiliaires nécessaires à la journalisation, à la gestion des clés, à l'autorisation et à d'autres fins. Par exemple, l'octroi d'un accès à une ressource à une autre génère tous les objets IAM nécessaires à la communication des services concernés.

D'après notre expérience, l'utilisation dans le monde réel de constructions basées sur l'intention génère 1 à 5 AWS CloudFormation ressources par construction, bien que cela puisse varier. Pour les applications sans serveur, 5 à 8 AWS ressources par point de terminaison d'API sont typiques.

Les modèles, qui représentent un niveau d'abstraction plus élevé, vous permettent de définir encore plus de AWS ressources avec encore moins de code. Le code AWS CDK dans [Example : Create an AWS Fargate service à l'aide AWS du](ecs-example.md) CDK, par exemple, génère plus de AWS CloudFormation 50 ressources tout en ne définissant que trois constructions \!

Le dépassement de la limite de AWS CloudFormation ressources constitue une erreur lors de AWS CloudFormation la synthèse. Le AWS CDK émet un avertissement si votre pile dépasse 80 % de la limite. Vous pouvez utiliser une limite différente en définissant la `maxResources` propriété sur votre pile, ou désactiver la validation en la définissant `maxResources` sur 0.

**Astuce**  
Vous pouvez obtenir un décompte exact des ressources présentes dans votre sortie synthétisée à l'aide du script utilitaire suivant. (Comme chaque développeur de AWS CDK a besoin de Node.js, le script y est écrit JavaScript.)  

```
// rescount.js - count the resources defined in a stack
// invoke with: node rescount.js <path-to-stack-json>
// e.g. node rescount.js cdk.out/MyStack.template.json

import * as fs from 'fs';
const path = process.argv[2];

if (path) fs.readFile(path, 'utf8', function(err, contents) {
  console.log(err ? `${err}` :
  `${Object.keys(JSON.parse(contents).Resources).length} resources defined in ${path}`);
}); else console.log("Please specify the path to the stack's output .json file");
```

Lorsque le nombre de ressources de votre pile approche de la limite, envisagez de réorganiser l'architecture pour réduire le nombre de ressources que contient votre pile : par exemple, en combinant certaines fonctions Lambda ou en divisant votre pile en plusieurs piles. Le CDK prend en charge [les références entre les piles](resources.md#resource-stack), ce qui vous permet de séparer les fonctionnalités de votre application en différentes piles de la manière qui vous convient le mieux.

**Note**  
 AWS CloudFormation les experts suggèrent souvent l'utilisation de piles imbriquées comme solution à la limite des ressources. Le AWS CDK soutient cette approche via la [NestedStack](stacks.md#stack-nesting)construction.

## J'ai spécifié trois zones de disponibilité (ou plus) pour mon groupe Auto Scaling ou mon VPC, mais celui-ci n'a été déployé que dans deux
<a name="troubleshooting-availability-zones"></a>

Pour obtenir le nombre de zones de disponibilité que vous demandez, spécifiez le compte et la région dans les `env` propriétés de la pile. Si vous ne spécifiez pas les deux, le AWS CDK, par défaut, synthétise la pile comme étant indépendante de l'environnement. Vous pouvez ensuite déployer la pile dans une région spécifique à l'aide de AWS CloudFormation. Certaines régions n'ayant que deux zones de disponibilité, un modèle indépendant de l'environnement n'en utilise pas plus de deux.

**Note**  
Dans le passé, les régions se lançaient parfois avec une seule zone de disponibilité. Les piles AWS CDK indépendantes de l'environnement ne peuvent pas être déployées dans de telles régions. Cependant, au moment d'écrire ces lignes, toutes les AWS régions en ont au moins deux AZs.

Vous pouvez modifier ce comportement en remplaçant la propriété [AvailabilityZones (](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html#availabilityzones)Python :`availability_zones`) de votre pile pour spécifier explicitement les zones que vous souhaitez utiliser.

Pour plus d'informations sur la spécification du compte et de la région d'une pile au moment de la synthèse, tout en conservant la flexibilité nécessaire au déploiement dans n'importe quelle région, consultez [Environnements pour le AWS CDK](environments.md).

## Mon compartiment S3, ma table DynamoDB ou toute autre ressource n'est pas supprimé lorsque je publie `cdk destroy`
<a name="troubleshooting-resource-not-deleted"></a>

Par défaut, les ressources qui peuvent contenir des données utilisateur ont une propriété `removalPolicy` (Python :`removal_policy`) de`RETAIN`, et la ressource n'est pas supprimée lorsque la pile est détruite. Au lieu de cela, la ressource devient orpheline de la pile. Vous devez ensuite supprimer la ressource manuellement une fois la pile détruite. Tant que vous ne le faites pas, le redéploiement de la pile échoue. Cela est dû au fait que le nom de la nouvelle ressource créée lors du déploiement est en conflit avec le nom de la ressource orpheline.

Si vous définissez la politique de suppression d'une ressource sur`DESTROY`, cette ressource sera supprimée lorsque la pile sera détruite.

**Example**  

```
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class CdkTestStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const bucket = new s3.Bucket(this, 'Bucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
    });
  }
}
```

```
const cdk = require('aws-cdk-lib');
const s3 = require('aws-cdk-lib/aws-s3');

class CdkTestStack extends cdk.Stack {
  constructor(scope, id, props) {
    super(scope, id, props);

    const bucket = new s3.Bucket(this, 'Bucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY
    });
  }
}

module.exports = { CdkTestStack }
```

```
import aws_cdk as cdk
from constructs import Construct
import aws_cdk.aws_s3 as s3

class CdkTestStack(cdk.stack):
    def __init__(self, scope: Construct, id: str, **kwargs):
        super().__init__(scope, id, **kwargs)

        bucket = s3.Bucket(self, "Bucket",
            removal_policy=cdk.RemovalPolicy.DESTROY)
```

```
software.amazon.awscdk.*;
import software.amazon.awscdk.services.s3.*;
import software.constructs;

public class CdkTestStack extends Stack {
    public CdkTestStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public CdkTestStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Bucket.Builder.create(this, "Bucket")
                .removalPolicy(RemovalPolicy.DESTROY).build();
    }
}
```

```
using Amazon.CDK;
using Amazon.CDK.AWS.S3;

public CdkTestStack(Construct scope, string id, IStackProps props) : base(scope, id, props)
{
    new Bucket(this, "Bucket", new BucketProps {
        RemovalPolicy = RemovalPolicy.DESTROY
    });
}
```

**Note**  
 AWS CloudFormation Impossible de supprimer un compartiment Amazon S3 non vide. Si vous définissez la politique de suppression d'un compartiment Amazon S3 de manière à `DESTROY` ce qu'il contienne des données, toute tentative de destruction de la pile échouera car le compartiment ne peut pas être supprimé. Vous pouvez demander au AWS CDK de supprimer les objets du compartiment avant de tenter de le détruire en réglant l'`autoDeleteObjects`accessoire du compartiment sur. `true`