

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.

# Tutoriel : Déploiement sur Amazon EKS avec CodePipeline
<a name="tutorials-eks-deploy"></a>

Ce didacticiel vous aide à créer une action de déploiement CodePipeline qui déploie votre code sur un cluster que vous avez configuré dans Amazon EKS.

L'action EKS soutient les clusters EKS publics et privés. Les clusters privés sont le type recommandé par EKS ; toutefois, les deux types sont pris en charge.

**Note**  
Dans le cadre de la création d'un pipeline dans la console, un compartiment d'artefacts S3 sera utilisé par CodePipeline pour les artefacts. (Ceci est différent du compartiment utilisé pour une action source S3.) Si le compartiment d'artefacts S3 se trouve dans un compte différent de celui de votre pipeline, assurez-vous que le compartiment d'artefacts S3 appartient Comptes AWS à une personne sûre et fiable.

**Note**  
Cette action utilise le CodeBuild calcul CodePipeline géré pour exécuter des commandes dans un environnement de génération. L'exécution de l'action des commandes entraînera des frais distincts. AWS CodeBuild

**Note**  
L'action de `EKS` déploiement n'est disponible que pour les pipelines de type V2.

## Conditions préalables
<a name="tutorials-eks-deploy-prereqs"></a>

Avant de pouvoir créer votre pipeline de déploiement continu à l'aide de ce didacticiel, vous devez avoir mis en place certaines ressources. Voici ce dont vous avez besoin pour commencer :

**Note**  
Toutes ces ressources devraient être créées au sein de la même AWS région.
+ Un référentiel de contrôle de source (utilisé dans ce didacticiel GitHub) dans lequel vous ajouterez un exemple de `deployment.yaml` fichier.
+ Vous devez utiliser un rôle de CodePipeline service existant que vous mettrez à jour avec les autorisations pour cette action indiquées [Étape 3 : mettre à jour la politique des rôles de CodePipeline service dans IAM](#tutorials-eks-deploy-role) ci-dessous. Les autorisations nécessaires dépendent du type de cluster que vous créez. Pour de plus amples informations, veuillez consulter [Autorisations relatives à la politique des rôles de](action-reference-EKS.md#action-reference-EKS-service-role).
+ Image fonctionnelle et balise de référentiel que vous avez transmises à ECR ou à votre référentiel d'images.

Dès lors que ces prérequis sont respectés, vous pouvez commencer à créer votre pipeline de déploiement continu à l'aide du didacticiel.

## Étape 1 : (Facultatif) Création d'un cluster dans Amazon EKS
<a name="tutorials-eks-deploy-cluster"></a>

Vous pouvez choisir de créer un cluster EKS avec un point de terminaison public ou privé. 

Dans les étapes suivantes, vous allez créer un cluster public ou privé dans EKS. Cette étape est facultative si vous avez déjà créé votre cluster.

### Création d'un cluster public dans Amazon EKS
<a name="tutorials-eks-deploy-cluster-public"></a>

Au cours de cette étape, vous allez créer un cluster dans EKS.

**Création d'un cluster public**

1. Ouvrez la console EKS, puis choisissez **Create cluster**.

1. Dans **Nom**, nommez votre cluster. Choisissez **Suivant**.

1. Choisissez **Créer**.

### Création d'un cluster privé dans Amazon EKS
<a name="tutorials-eks-deploy-cluster-private"></a>

Si vous choisissez de créer un cluster avec un point de terminaison privé, assurez-vous de n'associer que les sous-réseaux privés et assurez-vous qu'ils disposent d'une connexion Internet.

Suivez les cinq sous-étapes suivantes pour créer un cluster avec un point de terminaison privé.

**Création d'un VPC dans la console**

1. Ouvrez la console VPC, puis choisissez Create **VPC**.

1. Sous **Paramètres VPC**, choisissez **VPC et plus encore**.

1. Choisissez de créer un sous-réseau public et 4 sous-réseaux privés. Sélectionnez **Create VPC** (Créer un VPC).

1. Sur la page des sous-réseaux, sélectionnez **Privé**. 

**Déterminez les sous-réseaux privés de votre VPC**

1. Accédez à votre VPC et choisissez l'ID du VPC pour ouvrir la page de détails du VPC.

1. Sur la page de détails du VPC, choisissez l'onglet **Carte des ressources**.

1. Consultez le schéma et notez vos sous-réseaux privés. Les sous-réseaux s'affichent avec des étiquettes indiquant leur statut public ou privé, et chaque sous-réseau est mappé à une table de routage.  
![\[\]](http://docs.aws.amazon.com/fr_fr/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Notez qu'un cluster privé comportera tous les sous-réseaux privés.

1. Créez un sous-réseau public pour héberger la passerelle NAT. Vous ne pouvez attacher qu'une seule passerelle Internet à un VPC à la fois.

**Création d'une passerelle NAT dans le sous-réseau public**

1. Dans le sous-réseau public, créez une passerelle NAT. Accédez à la console VPC, puis choisissez les passerelles **Internet**. Choisissez **Créer une passerelle Internet**.

1. Dans Nom, entrez le nom de votre passerelle Internet. Choisissez **Créer une passerelle Internet**.

Mettez à jour la table de routage du sous-réseau privé afin de diriger le trafic vers la passerelle NAT.

**Ajoutez la passerelle NAT à vos tables de routage pour vos sous-réseaux privés**

1. **Accédez à la console VPC, puis choisissez Subnets.**

1. Pour chaque sous-réseau privé, choisissez-le, puis choisissez la table de routage pour ce sous-réseau sur la page de détails, Choisissez **Modifier la table de routage**. 

1. Mettez à jour la table de routage du sous-réseau privé afin de diriger le trafic Internet vers la passerelle NAT. Choisissez **Ajouter une route**. Choisissez la **passerelle NAT** parmi les options à ajouter. Choisissez la passerelle Internet que vous avez créée.

1. Pour le sous-réseau public, créez une table de routage personnalisée. Vérifiez que la liste de contrôle d'accès réseau (ACL) de votre sous-réseau public autorise le trafic entrant depuis le sous-réseau privé.

1. Sélectionnez **Enregistrer les modifications**.

Au cours de cette étape, vous allez créer un cluster dans EKS.

**Création d'un cluster privé**

1. Ouvrez la console EKS, puis choisissez **Create cluster**.

1. Dans **Nom**, nommez votre cluster. Choisissez **Suivant**.

1. Spécifiez votre VPC et d'autres informations de configuration. Choisissez **Créer**.

Votre cluster EKS peut être un cluster public ou privé. Cette étape concerne les clusters qui ont UNIQUEMENT un point de terminaison privé. Assurez-vous que si votre cluster est privé.

## Étape 2 : configurer votre cluster privé dans Amazon EKS
<a name="tutorials-eks-deploy-cluster-private-configure"></a>

Cette étape n'est applicable que si vous avez créé un cluster privé. Cette étape concerne les clusters qui ont UNIQUEMENT un point de terminaison privé. 

**Configurez votre cluster**

1. Attachez des sous-réseaux privés uniquement dans le cluster EKS sous l'onglet **Mise en réseau**. Joignez les sous-réseaux privés capturés dans la section **Déterminez les sous-réseaux privés de votre VPC ci-dessous**. [Étape 1 : (Facultatif) Création d'un cluster dans Amazon EKS](#tutorials-eks-deploy-cluster)

1. Assurez-vous que les sous-réseaux privés ont accès à Internet, car ils CodePipeline stockent et récupèrent les artefacts du compartiment d'artefacts S3 pour votre pipeline.

## Étape 3 : mettre à jour la politique des rôles de CodePipeline service dans IAM
<a name="tutorials-eks-deploy-role"></a>

Au cours de cette étape, vous allez mettre à jour un rôle de CodePipeline service existant`cp-service-role`, par exemple avec les autorisations requises CodePipeline pour vous connecter à votre cluster. Si vous n'avez pas de rôle existant, créez-en un nouveau.

Mettez à jour votre rôle de CodePipeline service en suivant les étapes suivantes.

**Pour mettre à jour votre politique relative CodePipeline aux rôles de service**

1. Ouvrez la console IAM à l'adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)).

1. Dans le tableau de bord de la console, choisissez **Rôles**.

1. Recherchez votre rôle CodePipeline de service, par exemple`cp-service-role`.

1. Ajoutez une nouvelle politique en ligne.

1. Dans l'**éditeur de stratégie**, entrez ce qui suit.
   + Pour un cluster public, ajoutez les autorisations suivantes.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             }
         ]
     }
     ```

------
   + Pour un cluster privé, ajoutez les autorisations suivantes. Les clusters privés nécessiteront des autorisations supplémentaires pour votre VPC, le cas échéant.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterfacePermission",
                 "Resource": "*",
                 "Condition": {
                     "ArnEquals": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

1. Choisissez **Mettre à jour une politique**.

## Étape 4 : créer une entrée d'accès pour le rôle CodePipeline de service
<a name="tutorials-eks-deploy-access-entry"></a>

Au cours de cette étape, vous créez une entrée d'accès sur votre cluster qui ajoutera le rôle de CodePipeline service que vous avez mis à jour à l'étape 3, ainsi qu'une politique d'accès géré.

1. Ouvrez la console EKS et accédez à votre cluster.

1. Choisissez l’onglet **Access**.

1. Sous **Entrées d'accès IAM**, choisissez **Créer une entrée d'accès**.

1. Dans l'**ARN principal IAM**, entrez le rôle que vous venez de mettre à jour pour l'action, par exemple`cp-service-role`. Choisissez **Suivant**.

1. Sur la page **Étape 2 : Ajouter une politique d'accès**, dans **Nom de la politique**, choisissez la politique gérée pour l'accès, telle que`AmazonEKSClusterAdminPolicy`. Choisissez **Add policy (Ajouter la politique)**. Choisissez **Suivant**.
**Note**  
Il s'agit de la politique que l' CodePipeline action utilise pour communiquer avec Kubernetes. La meilleure pratique consiste à associer une politique personnalisée pour limiter les autorisations dans votre politique avec le moindre privilège plutôt que dans la politique administrative.

1. Sur la page de révision, choisissez **Créer**.

## Étape 5 : Création d'un référentiel source et ajout des fichiers de `helm chart` configuration
<a name="tutorials-eks-deploy-source"></a>

Au cours de cette étape, vous créez un fichier de configuration adapté à votre action (fichiers manifestes Kubernetes ou diagramme de Helm) et vous stockez le fichier de configuration dans votre référentiel source. Utilisez le fichier approprié à votre configuration. Pour plus d'informations, consultez [https://kubernetes. ](https://kubernetes.io/docs/reference/kubectl/quick-reference/)io/docs/reference/kubectl/quick[-reference/ ou https://helm. sh/docs/topics/charts](https://helm.sh/docs/topics/charts/)/.
+ Pour Kubernetes, utilisez un fichier manifeste.
+ Pour Helm, utilisez un graphique Helm.

1. Créez ou utilisez un GitHub référentiel existant.

1. Créez une nouvelle structure dans votre référentiel pour vos fichiers de diagramme de barre, comme indiqué dans l'exemple ci-dessous.

   ```
   mychart
   |-- Chart.yaml
   |-- charts
   |-- templates
   |   |-- NOTES.txt
   |   |-- _helpers.tpl
   |   |-- deployment.yaml
   |   |-- ingress.yaml
   |   `-- service.yaml
   `-- values.yaml
   ```

1. Ajoutez le fichier au niveau racine de votre dépôt.

## Étape 6 : Création de votre pipeline
<a name="tutorials-eks-deploy-pipeline"></a>

Utilisez l' CodePipeline assistant pour créer les étapes de votre pipeline et connecter votre référentiel source.

**Pour créer le pipeline**

1. Ouvrez la CodePipeline console à l'adresse [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Sur la page **Bienvenue**, la page **Démarrez** ou la page **Pipelines**, choisissez **Créer un pipeline**.

1. Sur la page **Étape 1 : Choisir une option de création**, sous **Options de création**, choisissez l'option **Créer un pipeline personnalisé**. Choisissez **Suivant**.

1. À **l'étape 2 : Choisissez les paramètres du pipeline**, dans **Nom du pipeline**, entrez**MyEKSPipeline**.

1. CodePipeline fournit des pipelines de type V1 et V2, dont les caractéristiques et le prix diffèrent. Le type V2 est le seul type que vous pouvez choisir dans la console. Pour plus d'informations, consultez la section [Types de pipelines](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Pour plus d'informations sur la tarification CodePipeline, consultez la section [Tarification](https://aws.amazon.com/codepipeline/pricing/).

1. Dans **Rôle de service**, choisissez le rôle de service que vous avez mis à jour à l'étape 3.

1. Laissez les paramètres sous **Advanced settings (Paramètres avancés)** à leurs valeurs par défaut, puis choisissez **Suivant**.

1. Sur la page **Étape 3 : Ajouter une source**, pour **Source provider**, choisissez **de créer une connexion à votre GitHub référentiel**.

1. Sur la page **Étape 4 : Ajouter une phase de construction**, choisissez **Ignorer**.

1. Sur la page **Étape 5 : Ajouter une étape de déploiement**, sélectionnez **Amazon EKS**.  
![\[Deploy configuration form with Helm selected, showing fields for release name and chart location.\]](http://docs.aws.amazon.com/fr_fr/codepipeline/latest/userguide/images/eks-action-example.png)

   1. Sous **Type de configuration de déploiement**, choisissez **Helm**.

   1. Dans **Emplacement du graphique Helm**, entrez le nom de la version, tel que`my-release`. Pour l'**emplacement du graphique de barre** de barre, entrez le chemin de vos fichiers de graphique de barre, tel que`mychart`.

   1. Choisissez **Suivant**.

1. Sur la page **Étape 6 : Vérification**, vérifiez la configuration de votre pipeline, puis choisissez **Créer un pipeline** pour créer le pipeline.  
![\[\]](http://docs.aws.amazon.com/fr_fr/codepipeline/latest/userguide/images/eks-deploy-pipeline.png)

1. Une fois le pipeline exécuté avec succès, choisissez **Afficher les détails** pour afficher les journaux de l'action afin de visualiser le résultat de l'action.