

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 les artefacts. (Ce compartiment 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 société 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 dans 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 allez ajouter un exemple de `deployment.yaml` fichier.
+ Vous devez utiliser un rôle de CodePipeline service existant que vous mettrez à jour avec les autorisations [Étape 3 : mettre à jour la politique CodePipeline de rôle de service dans IAM](#tutorials-eks-deploy-role) ci-dessous pour cette action. Les autorisations nécessaires dépendent du type de cluster que vous créez. Pour de plus amples informations, veuillez consulter [Autorisations relatives aux politiques de rôle de service](action-reference-EKS.md#action-reference-EKS-service-role).
+ Une image de travail et une 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é. 

Au cours des é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 ** Créer un cluster**.

1. Dans ** Nom**, donnez un nom à 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 connecter uniquement 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éez 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 quatre sous-réseaux privés. Sélectionnez **Create VPC** (Créer un VPC).

1. Sur la page des sous-réseaux, choisissez ** 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 des détails du VPC, choisissez l'**onglet ** Resource map.

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.  
![Schéma de console illustrant les sous-réseaux et la carte des ressources d'un VPC.](https://docs.aws.amazon.com/fr_fr/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Notez qu'un cluster privé contiendra 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 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 en provenance du 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 ** Créer un cluster**.

1. Dans ** Nom**, donnez un nom à votre cluster. Choisissez **Suivant**.

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

Votre cluster EKS peut être public ou privé. Cette étape concerne les clusters qui ont UNIQUEMENT un point de terminaison privé. Assurez-vous que 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 ** 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 CodePipeline de rôle de 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 politiques**, saisissez les informations suivantes.
   + 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éation d'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 d'**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 d'accès gérée, telle que`AmazonEKSClusterAdminPolicy`. Choisissez **Add policy (Ajouter la politique)**. Choisissez **Suivant**.
**Note**  
Il s'agit de la politique utilisée par l' CodePipeline action pour parler à Kubernetes. Il est recommandé de limiter les autorisations de votre politique avec le minimum de privilèges plutôt que la politique administrative, associez plutôt une stratégie personnalisée.

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

## Étape 5 : Créez un référentiel source et ajoutez les fichiers de `configuration du graphique` Helm
<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 graphique Helm) et vous stockez le fichier de configuration dans votre référentiel source. Utilisez le fichier adapté à votre configuration. Pour plus d’informations, consultez [https://kubernetes.io/docs/reference/kubectl/quick-reference/](https://kubernetes.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 diagrammes Helm, 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 à la racine de votre référentiel.

## É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 : Choisissez l'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 que vous pouvez choisir dans la console. Pour plus d’informations, consultez [types de pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Pour plus d'informations sur la tarification de 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 étape source, pour Fournisseur ** source**, choisissez ** de créer une connexion à votre GitHub référentiel**.

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

1. Sur la ** page ** Étape 5 : Ajouter une phase de déploiement, choisissez ** Amazon EKS**.  
![Déployez le formulaire de configuration avec Helm sélectionné, affichant les champs relatifs au nom de la version, à l'emplacement du graphique et à d'autres options.](https://docs.aws.amazon.com/fr_fr/codepipeline/latest/userguide/images/eks-action-example.png)

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

   1. Dans Emplacement du graphique ** Helm**, entrez le nom de la version, par exemple`my-release`. Pour l'emplacement de la carte ** Helm**, entrez le chemin de vos fichiers de cartes Helm, par exemple`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.  
![Schéma de console illustrant l'exécution réussie d'un pipeline avec l'action de déploiement ajoutée à votre pipeline.](https://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 et voir le résultat de l'action.