Tutoriel : Déploiement d'une application sur Amazon EKS - Amazon CodeCatalyst

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 d'une application sur Amazon EKS

Dans ce didacticiel, vous apprendrez à déployer une application conteneurisée dans Amazon Elastic Kubernetes Service à l'aide d'un flux de travail Amazon, CodeCatalyst d'Amazon EKS et de quelques autres services. AWS L'application déployée est une simple application « Hello, World ! » site Web construit sur une image Docker d'un serveur Web Apache. Le didacticiel explique les tâches de préparation requises, telles que la configuration d'une machine de développement et d'un cluster Amazon EKS, puis décrit comment créer un flux de travail pour créer l'application et la déployer dans le cluster.

Une fois le déploiement initial terminé, le didacticiel vous demande de modifier la source de votre application. Cette modification entraîne la création d'une nouvelle image Docker et son transfert vers votre référentiel d'images Docker avec de nouvelles informations de révision. La nouvelle version de l'image Docker est ensuite déployée dans Amazon EKS.

Astuce

Au lieu de suivre ce didacticiel, vous pouvez utiliser un plan qui effectue une configuration complète d'Amazon EKS pour vous. Vous devez utiliser le plan de déploiement de l'application EKS. Pour plus d’informations, consultez Création d'un projet à l'aide d'un plan.

Prérequis

Avant de commencer ce didacticiel :

Étape 1 : configurer votre machine de développement

La première étape de ce didacticiel consiste à configurer une machine de développement avec quelques outils que vous utiliserez tout au long de ce didacticiel. Ces outils sont les suivants :

  • l'eksctlutilitaire — pour la création de clusters

  • l'kubectlutilité — une condition préalable à eksctl

  • le AWS CLI — également une condition préalable pour eksctl

Vous pouvez installer ces outils sur votre machine de développement existante si vous en avez une, ou vous pouvez utiliser un CodeCatalyst environnement de développement basé sur le cloud. L'avantage d'un environnement CodeCatalyst de développement est qu'il est facile à installer et à démonter, et qu'il est intégré à d'autres CodeCatalyst services, ce qui vous permet de suivre ce didacticiel en moins d'étapes.

Ce didacticiel part du principe que vous utiliserez un CodeCatalyst environnement de développement.

Les instructions suivantes décrivent un moyen rapide de lancer un environnement de CodeCatalyst développement et de le configurer avec les outils requis, mais si vous souhaitez obtenir des instructions détaillées, consultez :

Pour lancer un environnement de développement
  1. Ouvrez la CodeCatalyst console à l'adresse https://codecatalyst.aws/.

  2. Accédez à votre projet,codecatalyst-eks-project.

  3. Dans le volet de navigation, choisissez Code, puis sélectionnez Référentiels sources.

  4. Choisissez le nom de votre dépôt source,codecatalyst-eks-source-repository.

  5. En haut, choisissez Create Dev Environment, puis choisissez AWS Cloud9 (dans le navigateur).

  6. Assurez-vous que les options Travailler dans la branche et la branche principale existantes sont sélectionnées, puis choisissez Créer.

    Votre environnement de développement s'ouvre dans un nouvel onglet du navigateur, et votre dépôt (codecatalyst-eks-source-repository) y est cloné.

Pour installer et configurer kubectl
  1. Dans le terminal Dev Environment, entrez :

    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl
  2. Entrez :

    chmod +x ./kubectl
  3. Entrez :

    mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
  4. Entrez :

    echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  5. Entrez :

    kubectl version --short --client
  6. Vérifiez qu'une version apparaît.

    Vous êtes maintenant installékubectl.

Pour installer et configurer eksctl
Note

eksctln'est pas strictement obligatoire car vous pouvez utiliser à la kubectl place. Cependant, il eksctl présente l'avantage d'automatiser une grande partie de la configuration du cluster, et c'est donc l'outil recommandé pour ce didacticiel.

  1. Dans le terminal Dev Environment, entrez :

    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  2. Entrez :

    sudo cp /tmp/eksctl /usr/bin
  3. Entrez :

    eksctl version
  4. Vérifiez qu'une version apparaît.

    Vous êtes maintenant installéeksctl.

Pour vérifier AWS CLI que le
  1. Dans le terminal Dev Environment, entrez :

    aws --version
  2. Vérifiez qu'une version apparaît pour vérifier qu'elle AWS CLI est installée.

    Effectuez les procédures restantes pour configurer le AWS CLI avec les autorisations d'accès nécessaires AWS.

Pour configurer le AWS CLI

Vous devez le configurer AWS CLI avec des clés d'accès et un jeton de session pour lui donner accès aux AWS services. Les instructions suivantes fournissent un moyen rapide de configurer les clés et le jeton, mais si vous souhaitez obtenir des instructions détaillées, reportez-vous AWS CLIà la section Configuration du guide de l'AWS Command Line Interface utilisateur.

  1. Créez un utilisateur IAM Identity Center, comme suit :

    1. Connectez-vous à la AWS IAM Identity Center console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/singlesignon/.

      (Vous devrez peut-être choisir Activer si vous ne vous êtes jamais connecté à IAM Identity Center auparavant.)

      Note

      Assurez-vous de vous connecter à l'aide de Compte AWS celui qui est connecté à votre CodeCatalyst espace. Vous pouvez vérifier quel compte est connecté en accédant à votre espace et en choisissant l'onglet Comptes AWS. Pour plus d’informations, consultez Création d'un espace.

    2. Dans le panneau de navigation, choisissez Users (Utilisateurs), puis Add user (Ajouter un utilisateur).

    3. Dans Nom d'utilisateur, entrez :

      codecatalyst-eks-user
    4. Sous Mot de passe, choisissez Générer un mot de passe à usage unique que vous pouvez partager avec cet utilisateur.

    5. Dans Adresse e-mail et Confirmer l'adresse e-mail, entrez une adresse e-mail qui n'existe pas encore dans IAM Identity Center.

    6. Dans Prénom, entrez :

      codecatalyst-eks-user
    7. Dans Nom de famille, entrez :

      codecatalyst-eks-user
    8. Dans Nom d'affichage, conservez :

      codecatalyst-eks-user codecatalyst-eks-user
    9. Choisissez Suivant.

    10. Sur la page Ajouter un utilisateur aux groupes, choisissez Next.

    11. Sur la page Vérifier et ajouter un utilisateur, passez en revue les informations et choisissez Ajouter un utilisateur.

      Une boîte de dialogue de mot de passe à usage unique s'affiche.

    12. Choisissez Copier, puis collez les informations de connexion dans un fichier texte. Les informations de connexion comprennent l'URL du portail d' AWS accès, un nom d'utilisateur et un mot de passe à usage unique.

    13. Choisissez Fermer.

  2. Créez un ensemble d'autorisations, comme suit :

    1. Dans le volet de navigation, choisissez Ensembles d'autorisations, puis choisissez Créer un ensemble d'autorisations.

    2. Choisissez Ensemble d'autorisations prédéfini, puis sélectionnez AdministratorAccess. Cette politique fournit des autorisations complètes à tous Services AWS.

    3. Choisissez Suivant.

    4. Dans Nom du jeu d'autorisations, supprimez AdministratorAccess et entrez :

      codecatalyst-eks-permission-set
    5. Choisissez Suivant.

    6. Sur la page Réviser et créer, passez en revue les informations et choisissez Créer.

  3. Attribuez l'ensemble d'autorisations àcodecatalyst-eks-user, comme suit :

    1. Dans le volet de navigation, choisissez Comptes AWS, puis cochez la case à côté de Compte AWS celle à laquelle vous êtes actuellement connecté.

    2. Choisissez Attribuer des utilisateurs ou des groupes.

    3. Sélectionnez l'onglet Utilisateurs.

    4. Cochez la case située à côté decodecatalyst-eks-user.

    5. Choisissez Suivant.

    6. Cochez la case située à côté decodecatalyst-eks-permission-set.

    7. Choisissez Suivant.

    8. Vérifiez les informations et choisissez Soumettre.

      Vous les avez maintenant assignés codecatalyst-eks-user et codecatalyst-eks-permission-set à votre Compte AWS, en les liant ensemble.

  4. Les clés codecatalyst-eks-user d'accès et le jeton de session d'Obtain, comme suit :

    1. Assurez-vous de disposer de l'URL du portail AWS d'accès, du nom d'utilisateur et du mot de passe à usage unique pourcodecatalyst-eks-user. Vous devriez avoir copié ces informations dans un éditeur de texte plus tôt.

      Note

      Si vous ne disposez pas de ces informations, rendez-vous sur la page de codecatalyst-eks-user détails dans IAM Identity Center, choisissez Réinitialiser le mot de passe, Générer un mot de passe à usage unique [...] , et Réinitialisez à nouveau le mot de passe pour afficher les informations à l'écran.

    2. Déconnectez-vous de AWS.

    3. Collez l'URL du portail d' AWS accès dans la barre d'adresse de votre navigateur.

    4. Connectez-vous avec :

      • Nom d'utilisateur :

        codecatalyst-eks-user
      • Mot de passe :

        one-time-password

    5. Dans Définir un nouveau mot de passe, entrez un nouveau mot de passe et choisissez Définir un nouveau mot de passe.

      Une Compte AWSboîte apparaît à l'écran.

    6. Choisissez Compte AWS, puis choisissez le nom de l'utilisateur Compte AWS auquel vous avez attribué l'codecatalyst-eks-userutilisateur et le jeu d'autorisations.

    7. À côté decodecatalyst-eks-permission-set, choisissez Ligne de commande ou accès par programmation.

    8. Copiez les commandes au milieu de la page. Ils ressemblent à ce qui suit :

      export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"

      ... où le jeton de session est une longue chaîne aléatoire.

  5. Ajoutez les clés d'accès et le jeton de session au AWS CLI, comme suit :

    1. Retournez à votre CodeCatalyst environnement de développement.

    2. À l'invite du terminal, collez les commandes que vous avez copiées. Appuyez sur Entrée.

      Vous avez maintenant configuré le AWS CLI avec des clés d'accès et un jeton de session. Vous pouvez désormais utiliser AWS CLI pour effectuer les tâches requises par ce didacticiel.

      Important

      Si, à tout moment au cours de ce didacticiel, vous voyez des messages similaires aux suivants :

      Unable to locate credentials. You can configure credentials by running "aws configure".

      Ou:

      ExpiredToken: The security token included in the request is expired

      ... c'est parce que votre AWS CLI session a expiré. Dans ce cas, n'exécutez pas la aws configure commande. Utilisez plutôt les instructions de l'étape 4 de cette procédure qui commence par Obtain codecatalyst-eks-user's access key and session token pour actualiser votre session.

Étape 2 : créer un cluster Amazon EKS

Dans cette section, vous allez créer un cluster dans Amazon EKS. Les instructions ci-dessous décrivent un moyen rapide de créer le cluster à l'aide deeksctl, mais si vous souhaitez obtenir des instructions détaillées, consultez :

Note

Les clusters privés ne sont pas pris en charge par l' CodeCatalyst intégration avec Amazon EKS.

Avant de commencer

Assurez-vous d'avoir effectué les tâches suivantes sur votre machine de développement :

  • L'eksctlutilitaire a été installé.

  • L'kubectlutilitaire a été installé.

  • Vous l'avez installé AWS CLI et configuré avec des clés d'accès et un jeton de session.

Pour plus d'informations sur la façon d'effectuer ces tâches, consultezÉtape 1 : configurer votre machine de développement.

Pour créer un cluster
Important

N'utilisez pas l'interface utilisateur du service Amazon EKS pour créer le cluster car celui-ci ne sera pas configuré correctement. Utilisez l'eksctlutilitaire, comme décrit dans les étapes suivantes.

  1. Accédez à votre environnement de développement.

  2. Créez un cluster et des nœuds :

    eksctl create cluster --name codecatalyst-eks-cluster --region us-west-2

    Où :

    • codecatalyst-eks-clusterest remplacé par le nom que vous souhaitez donner à votre cluster.

    • us-west-2 est remplacé par votre région.

    Après 10 à 20 minutes, un message semblable au suivant s'affiche :

    EKS cluster "codecatalyst-eks-cluster" in "us-west-2" region is ready

    Note

    Vous verrez plusieurs waiting for CloudFormation stack messages lors de la AWS création de votre cluster. Ceci est normal.

  3. Vérifiez que votre cluster a été créé avec succès :

    kubectl cluster-info

    Vous verrez un message similaire au suivant, indiquant une création de cluster réussie :

    Kubernetes master is running at https://long-string.gr7.us-west-2.eks.amazonaws.com CoreDNS is running at https://long-string.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Étape 3 : Création d'un référentiel d'images Amazon ECR

Dans cette section, vous allez créer un référentiel d'images privé dans Amazon Elastic Container Registry (Amazon ECR). Ce référentiel stocke l'image Docker pour le didacticiel.

Pour plus d'informations sur Amazon ECR, consultez le guide de l'utilisateur d'Amazon Elastic Container Registry.

Pour créer un référentiel d'images dans Amazon ECR
  1. Accédez à votre environnement de développement.

  2. Créez un référentiel vide dans Amazon ECR :

    aws ecr create-repository --repository-name codecatalyst-eks-image-repo

    codecatalyst-eks-image-repoRemplacez-le par le nom que vous souhaitez attribuer au référentiel Amazon ECR.

    Ce didacticiel part du principe que vous avez donné un nom à votre dépôtcodecatalyst-eks-image-repo.

  3. Affichez les détails du référentiel Amazon ECR :

    aws ecr describe-repositories \ --repository-names codecatalyst-eks-image-repo
  4. Notez la “repositoryUri”: valeur, par exemple,111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo.

    Vous en aurez besoin ultérieurement lors de l'ajout du référentiel à votre flux de travail.

Étape 4 : Ajouter des fichiers source

Dans cette section, vous allez ajouter les fichiers source de l'application à votre référentiel source (codecatalyst-eks-source-repository). Ils sont composés de :

  • Un index.html fichier — Affiche un message « Bonjour tout le monde ! » message dans le navigateur.

  • Un Dockerfile — Décrit l'image de base à utiliser pour votre image Docker et les commandes Docker à appliquer à celle-ci.

  • Un deployment.yaml fichier : le manifeste Kubernetes qui définit le service et le déploiement de Kubernetes.

La structure des dossiers est la suivante :

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

index.html

Le index.html fichier affiche un message « Bonjour tout le monde ! » message dans le navigateur.

Pour ajouter le fichier index.html
  1. Accédez à votre environnement de développement.

  2. Danscodecatalyst-eks-source-repository, créez un dossier appelépublic-html.

  3. Dans/public-html, créez un fichier appelé index.html avec le contenu suivant :

    <html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello, World!</h1> </body> </html>
  4. À l'invite du terminal, entrez :

    cd /projects/codecatalyst-eks-source-repository
  5. Ajoutez, validez et envoyez :

    git add . git commit -m "add public-html/index.html" git push

    Le index.html est ajouté à votre dépôt dans un public-html dossier.

Dockerfile

Le Dockerfile décrit l'image Docker de base à utiliser et les commandes Docker à lui appliquer. Pour plus d'informations sur le Dockerfile, consultez le Dockerfile Reference.

Le Dockerfile spécifié ici indique d'utiliser l'image de base d'Apache 2.4 ()httpd. Il inclut également des instructions pour copier un fichier source appelé index.html dans un dossier du serveur Apache qui sert aux pages Web. L'EXPOSEinstruction du Dockerfile indique à Docker que le conteneur écoute sur le port 80.

Pour ajouter le Dockerfile
  1. Danscodecatalyst-eks-source-repository, créez un fichier appelé Dockerfile avec le contenu suivant :

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80

    N'incluez pas d'extension de fichier.

    Important

    Le Dockerfile doit résider dans le dossier racine de votre dépôt. La Docker build commande du flux de travail s'attend à ce qu'il soit présent.

  2. Ajoutez, validez et envoyez :

    git add . git commit -m "add Dockerfile" git push

    Le Dockerfile est ajouté à votre dépôt.

deployment.yaml

Dans cette section, vous allez ajouter un deployment.yaml fichier à votre dépôt. Le deployment.yaml fichier est un manifeste Kubernetes qui définit deux types ou types de ressources Kubernetes à exécuter : un « service » et un « déploiement ».

  • Le « service » déploie un équilibreur de charge dans Amazon EC2. L'équilibreur de charge vous fournit une URL publique connectée à Internet et un port standard (port 80) que vous pouvez utiliser pour accéder à « Hello, World ! » application.

  • Le « déploiement » déploie trois pods, et chaque pod contiendra un conteneur Docker avec le message « Hello, World ! » application. Les trois pods sont déployés sur les nœuds créés lorsque vous avez créé le cluster.

Le manifeste présenté dans ce didacticiel est court ; toutefois, un manifeste peut inclure un certain nombre de types de ressources Kubernetes, tels que des pods, des jobs, des entrées et des politiques réseau. En outre, vous pouvez utiliser plusieurs fichiers manifestes si votre déploiement est complexe.

Pour ajouter un fichier de déploiement .yaml
  1. Danscodecatalyst-eks-source-repository, créez un dossier appeléKubernetes.

  2. Dans/Kubernetes, créez un fichier appelé deployment.yaml avec le contenu suivant :

    apiVersion: v1 kind: Service metadata: name: my-service labels: app: my-app spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: codecatalyst-eks-container # The $REPOSITORY_URI and $IMAGE_TAG placeholders will be replaced by actual values supplied by the build action in your workflow image: $REPOSITORY_URI:$IMAGE_TAG ports: - containerPort: 80
  3. Ajoutez, validez et envoyez :

    git add . git commit -m "add Kubernetes/deployment.yaml" git push

    Le deployment.yaml fichier est ajouté à votre dépôt dans un dossier appeléKubernetes.

Vous avez maintenant ajouté tous vos fichiers sources.

Prenez le temps de vérifier votre travail et de vous assurer que vous avez placé tous les fichiers dans les bons dossiers. La structure des dossiers est la suivante :

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

Étape 5 : Création de AWS rôles

Dans cette section, vous allez créer les rôles AWS IAM dont votre CodeCatalyst flux de travail aura besoin pour fonctionner. Ces rôles sont les suivants :

  • Rôle de création : accorde à l'action de CodeCatalyst création (dans le flux de travail) l'autorisation d'accéder à votre AWS compte et d'écrire sur Amazon ECR et Amazon EC2.

  • Rôle de déploiement : accorde à l'action CodeCatalyst Deploy to Kubernetes cluster (dans le flux de travail) l'autorisation d'accéder à votre compte AWS et à Amazon EKS.

Pour plus d'informations sur les rôles IAM, consultez la section Rôles IAM dans le Guide de l'AWS Identity and Access Management utilisateur.

Note

Pour gagner du temps, vous pouvez créer un seul rôle, appelé CodeCatalystWorkflowDevelopmentRole-spaceName rôle, au lieu des deux rôles répertoriés précédemment. Pour plus d’informations, consultez Création du CodeCatalystWorkflowDevelopmentRole-spaceNamerôle pour votre compte et votre espace. Sachez que le CodeCatalystWorkflowDevelopmentRole-spaceName rôle dispose d'autorisations très étendues, ce qui peut présenter un risque de sécurité. Nous vous recommandons de n'utiliser ce rôle que dans les didacticiels et les scénarios où la sécurité est moins préoccupante. Ce didacticiel part du principe que vous créez les deux rôles répertoriés précédemment.

Pour créer les rôles de génération et de déploiement, suivez la série de procédures suivante.

1. Pour créer une politique de confiance pour les deux rôles
  1. Accédez à votre environnement de développement.

  2. Dans le Cloud9-long-string répertoire, créez un fichier appelé codecatalyst-eks-trust-policy.json avec le contenu suivant :

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
2. Pour créer la politique de build pour le rôle de build
  • Dans le Cloud9-long-string répertoire, créez un fichier appelé codecatalyst-eks-build-policy.json avec le contenu suivant :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    Note

    La première fois que le rôle est utilisé pour exécuter des actions de flux de travail, utilisez le caractère générique dans la déclaration de politique de ressources, puis définissez la stratégie avec le nom de la ressource une fois celle-ci disponible.

    "Resource": "*"
3. Pour créer la politique de déploiement pour le rôle de déploiement
  • Dans le Cloud9-long-string répertoire, créez un fichier appelé codecatalyst-eks-deploy-policy.json avec le contenu suivant :

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] }
    Note

    La première fois que le rôle est utilisé pour exécuter des actions de flux de travail, utilisez le caractère générique dans la déclaration de politique de ressources, puis définissez la stratégie avec le nom de la ressource une fois celle-ci disponible.

    "Resource": "*"

Vous avez maintenant ajouté trois documents de politique à votre environnement de développement. La structure de votre répertoire ressemble désormais à ceci :

|— Cloud9-long-string |— .c9 |— codecatalyst-eks-source-repository |— Kubernetes |— public-html |— Dockerfile codecatalyst-eks-build-policy.json codecatalyst-eks-deploy-policy.json codecatalyst-eks-trust-policy.json
4. Pour ajouter la politique de construction à AWS
  1. Dans le terminal Dev Environment, entrez :

    cd /projects
  2. Entrez :

    aws iam create-policy \ --policy-name codecatalyst-eks-build-policy \ --policy-document file://codecatalyst-eks-build-policy.json
  3. Appuyez sur Entrée.

  4. Dans la sortie de commande, notez la "arn": valeur, par exemple,arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy. Vous aurez besoin de cet ARN ultérieurement.

5. Pour ajouter la politique de déploiement à AWS
  1. Entrez :

    aws iam create-policy \ --policy-name codecatalyst-eks-deploy-policy \ --policy-document file://codecatalyst-eks-deploy-policy.json
  2. Appuyez sur Entrée.

  3. Dans le résultat de la commande, notez la "arn": valeur de la politique de déploiement, par exemple,arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy. Vous aurez besoin de cet ARN ultérieurement.

6. Pour créer le rôle de build
  1. Entrez :

    aws iam create-role \ --role-name codecatalyst-eks-build-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Appuyez sur Entrée.

  3. Entrez :

    aws iam attach-role-policy \ --role-name codecatalyst-eks-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy

    arn:aws:iam : :111122223333:policy/ codecatalyst-eks-build-policy est remplacé par l'ARN de la politique de construction que vous avez mentionnée précédemment.

  4. Appuyez sur Entrée.

  5. À l'invite du terminal, entrez :

    aws iam get-role \ --role-name codecatalyst-eks-build-role
  6. Appuyez sur Entrée.

  7. Notez la "Arn": valeur du rôle, par exemplearn:aws:iam::111122223333:role/codecatalyst-eks-build-role. Vous aurez besoin de cet ARN ultérieurement.

7. Pour créer le rôle de déploiement
  1. Entrez :

    aws iam create-role \ --role-name codecatalyst-eks-deploy-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Appuyez sur Entrée.

  3. Entrez :

    aws iam attach-role-policy \ --role-name codecatalyst-eks-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy

    arn:aws:iam : :111122223333:policy/ codecatalyst-eks-deploy-policy est remplacé par l'ARN de la politique de déploiement que vous avez mentionnée précédemment.

  4. Appuyez sur Entrée.

  5. Entrez :

    aws iam get-role \ --role-name codecatalyst-eks-deploy-role
  6. Appuyez sur Entrée.

  7. Notez la "Arn": valeur du rôle, par exemplearn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role. Vous aurez besoin de cet ARN ultérieurement.

Vous avez maintenant créé des rôles de construction et de déploiement et noté leurs ARN.

Étape 6 : Ajouter AWS des rôles à CodeCatalyst

Au cours de cette étape, vous ajoutez le rôle de construction (codecatalyst-eks-build-role) et le rôle de déploiement (codecatalyst-eks-deploy-role) au rôle Compte AWS que vous avez connecté à votre espace. Les rôles peuvent ainsi être utilisés dans votre flux de travail.

Pour ajouter des rôles de création et de déploiement à votre Compte AWS
  1. Dans la CodeCatalyst console, accédez à votre espace.

  2. En haut, choisissez Réglages.

  3. Dans le volet de navigation, sélectionnez AWS Accounts. La liste des comptes s'affiche.

  4. Dans la colonne du nom CodeCatalyst d'affichage d'Amazon, copiez le nom d'affichage de l' Compte AWS endroit où vous avez créé vos rôles de création et de déploiement. (Il peut s'agir d'un chiffre.) Vous aurez besoin de cette valeur ultérieurement, lors de la création de votre flux de travail.

  5. Choisissez le nom d'affichage.

  6. Choisissez Gérer les rôles depuis AWS la console de gestion.

    La page Ajouter un rôle IAM à Amazon CodeCatalyst Space s'affiche. Vous devrez peut-être vous connecter pour accéder à la page.

  7. Sélectionnez Ajouter un rôle existant que vous avez créé dans IAM.

    Une liste déroulante apparaît. La liste affiche les rôles de création et de déploiement, ainsi que tous les autres rôles IAM dotés d'une politique de confiance incluant les principes codecatalyst-runner.amazonaws.com et les principaux codecatalyst.amazonaws.com de service.

  8. Dans la liste déroulante, ajoutez :

    • codecatalyst-eks-build-role

    • codecatalyst-eks-deploy-role

    Note

    Si vous le voyezThe security token included in the request is invalid, c'est peut-être parce que vous ne disposez pas des autorisations appropriées. Pour résoudre ce problème, déconnectez-vous et reconnectez-vous avec le AWS compte que vous avez utilisé lors de la création de votre CodeCatalyst espace. AWS

  9. Retournez à la CodeCatalyst console et actualisez la page.

    Les rôles de création et de déploiement devraient désormais apparaître sous les rôles IAM.

    Ces rôles peuvent désormais être utilisés dans les CodeCatalyst flux de travail.

Étape 7 : mettez à jour le ConfigMap

Vous devez ajouter le rôle de déploiement que vous avez créé dans le ConfigMap fichier Kubernetes Étape 5 : Création de AWS rôles pour permettre à l'action Deploy to Kubernetes cluster (dans votre flux de travail) d'accéder à votre cluster et d'interagir avec celui-ci. Vous pouvez utiliser eksctl ou kubectl pour exécuter cette tâche.

Pour configurer le fichier Kubernetes ConfigMap à l'aide de eksctl
  • Dans le terminal Dev Environment, entrez :

    eksctl create iamidentitymapping --cluster codecatalyst-eks-cluster --arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role --group system:masters --username codecatalyst-eks-deploy-role --region us-west-2

    Où :

    • codecatalyst-eks-clusterest remplacé par le nom du cluster Amazon EKS.

    • arn:aws:iam : :111122223333:role/ codecatalyst-eks-deploy-role est remplacé par l'ARN du rôle de déploiement que vous avez créé dans. Étape 5 : Création de AWS rôles

    • codecatalyst-eks-deploy-role(à côté de--username) est remplacé par le nom du rôle de déploiement que vous avez créé dansÉtape 5 : Création de AWS rôles.

      Note

      Si vous avez décidé de ne pas créer de rôle de déploiement, codecatalyst-eks-deploy-roleremplacez-le par le nom du CodeCatalystWorkflowDevelopmentRole-spaceName rôle. Pour plus d’informations sur ce rôle, consultez Étape 5 : Création de AWS rôles.

    • us-west-2 est remplacé par votre région.

    Pour plus de détails sur cette commande, voir Gérer les utilisateurs et les rôles IAM.

    Un message similaire au suivant s'affiche :

    2023-06-09 00:58:29 [ℹ]  checking arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role against entries in the auth ConfigMap
    2023-06-09 00:58:29 [ℹ]  adding identity "arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role" to auth ConfigMap
Pour configurer le fichier Kubernetes ConfigMap à l'aide de kubectl
  1. Dans le terminal Dev Environment, entrez :

    kubectl edit configmap -n kube-system aws-auth

    Le ConfigMap fichier apparaît à l'écran.

  2. Ajoutez le texte en italique rouge :

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    data:
      mapRoles: |
        - groups:
          - system:bootstrappers
          - system:nodes
          rolearn: arn:aws:iam::111122223333:role/eksctl-codecatalyst-eks-cluster-n-NodeInstanceRole-16BC456ME6YR5
          username: system:node:{{EC2PrivateDNSName}}
        - groups:
          - system:masters
          rolearn: arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role
          username: codecatalyst-eks-deploy-role
      mapUsers: |
        []
    kind: ConfigMap
    metadata:
      creationTimestamp: "2023-06-08T19:04:39Z"
      managedFields:
      ...

    Où :

    • arn:aws:iam : :111122223333:role/ codecatalyst-eks-deploy-role est remplacé par l'ARN du rôle de déploiement que vous avez créé dans. Étape 5 : Création de AWS rôles

    • codecatalyst-eks-deploy-role(à côté deusername:) est remplacé par le nom du rôle de déploiement que vous avez créé dansÉtape 5 : Création de AWS rôles.

      Note

      Si vous avez décidé de ne pas créer de rôle de déploiement, codecatalyst-eks-deploy-roleremplacez-le par le nom du CodeCatalystWorkflowDevelopmentRole-spaceName rôle. Pour plus d’informations sur ce rôle, consultez Étape 5 : Création de AWS rôles.

    Pour plus de détails, consultez la section Activation de l'accès principal IAM à votre cluster dans le guide de l'utilisateur Amazon EKS.

Vous avez maintenant accordé au rôle de déploiement, et par extension à l'action Deploy to Amazon EKS, system:masters des autorisations sur votre cluster Kubernetes.

Étape 8 : créer et exécuter un flux de travail

Au cours de cette étape, vous créez un flux de travail qui prend vos fichiers source, les intègre dans une image Docker, puis déploie l'image dans des capsules d'arbres de votre cluster Amazon EKS.

Le flux de travail comprend les éléments de base suivants qui s'exécutent de manière séquentielle :

  • Un déclencheur : ce déclencheur lance automatiquement l'exécution du flux de travail lorsque vous apportez une modification à votre référentiel source. Pour plus d'informations sur les déclencheurs, consultez Démarrage d'un flux de travail exécuté automatiquement à l'aide de déclencheurs.

  • Une action de génération (BuildBackend) — Au déclenchement, l'action crée l'image Docker à l'aide du Dockerfile et envoie l'image vers Amazon ECR. L'action de génération met également à jour les $IMAGE_TAG variables $REPOSITORY_URI et du deployment.yaml fichier avec les valeurs correctes, puis crée un artefact de sortie de ce fichier et de tous les autres éléments du Kubernetes dossier. Dans ce didacticiel, le seul fichier du Kubernetes dossier l'estdeployment.yaml, mais vous pouvez inclure d'autres fichiers. L'artefact est utilisé comme entrée pour l'action de déploiement, qui est la suivante.

    Pour plus d'informations sur l'action de génération, consultezConstruire avec des flux de travail.

  • Une action de déploiement (DeployToEKS) : une fois l'action de génération terminée, l'action de déploiement recherche l'artefact de sortie généré par l'action de génération (Manifests) et trouve le deployment.yaml fichier qu'il contient. L'action suit ensuite les instructions du deployment.yaml fichier pour exécuter trois pods, chacun contenant un seul « Hello, World ! » Conteneur Docker : à l'intérieur de votre cluster Amazon EKS.

Pour créer un flux de travail
  1. Accédez à la CodeCatalyst console.

  2. Accédez à votre projet (codecatalyst-eks-project).

  3. Dans le volet de navigation, choisissez CI/CD, puis Workflows.

  4. Choisissez Créer un flux de travail.

  5. Pour Référentiel source, choisissezcodecatalyst-eks-source-repository.

  6. Pour Branch, choisissezmain.

  7. Choisissez Créer.

  8. Supprimez l'exemple de code YAML.

  9. Ajoutez le code YAML suivant pour créer un nouveau fichier de définition de flux de travail :

    Note

    Pour plus d'informations sur le fichier de définition du flux de travail, consultezDéfinition du flux de travail YAML.

    Note

    Dans le code YAML qui suit, vous pouvez omettre les Connections: sections si vous le souhaitez. Si vous omettez ces sections, vous devez vous assurer que le rôle spécifié dans le champ Rôle IAM par défaut de votre environnement inclut les autorisations et les politiques de confiance des deux rôles décrits dans. Étape 6 : Ajouter AWS des rôles à CodeCatalyst Pour plus d'informations sur la configuration d'un environnement doté d'un rôle IAM par défaut, consultezCréation d'un environnement.

    Name: codecatalyst-eks-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo - Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com #build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in deployment.yaml - Run: find Kubernetes/ -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find Kubernetes/ -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat Kubernetes/* # The output artifact will be a zip file that contains Kubernetes manifest files. Outputs: Artifacts: - Name: Manifests Files: - "Kubernetes/*" DeployToEKS: DependsOn: - BuildBackend Identifier: aws/kubernetes-deploy@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-deploy-role Inputs: Artifacts: - Manifests Configuration: Namespace: default Region: us-west-2 Cluster: codecatalyst-eks-cluster Manifests: Kubernetes/

    Dans le code précédent, remplacez :

    • Les deux instances portent codecatalyst-eks-environmentle nom de l'environnement dans lequel vous l'avez crééPrérequis.

    • Dans les deux cas, codecatalyst-account-connectionavec le nom d'affichage de la connexion à votre compte. Le nom d'affichage peut être un chiffre. Pour plus d’informations, consultez Étape 6 : Ajouter AWS des rôles à CodeCatalyst.

    • codecatalyst-eks-build-roleavec le nom du rôle de build que vous avez créé dansÉtape 5 : Création de AWS rôles.

    • 111122223333.dkr. ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo(dans la Value: propriété) avec l'URI du référentiel Amazon ECR dans lequel vous l'avez créé. Étape 3 : Création d'un référentiel d'images Amazon ECR

    • 111122223333.dkr. ecr.us-west-2.amazonaws.com (dans la Run: aws ecr commande) avec l'URI du référentiel Amazon ECR sans le suffixe d'image (). /codecatalyst-eks-image-repo

    • codecatalyst-eks-deploy-roleavec le nom du rôle de déploiement que vous avez créé dansÉtape 5 : Création de AWS rôles.

    • Les deux instances de us-west-2 avec votre code de région. AWS Pour obtenir la liste des codes de région, consultez la section Points de terminaison régionaux dans le Références générales AWS.

    Note

    Si vous avez décidé de ne pas créer de rôles de création et de déploiement, remplacez codecatalyst-eks-build-roleet codecatalyst-eks-deploy-rolepar le nom du CodeCatalystWorkflowDevelopmentRole-spaceName rôle. Pour plus d’informations sur ce rôle, consultez Étape 5 : Création de AWS rôles.

  10. (Facultatif) Choisissez Valider pour vous assurer que le code YAML est valide avant de valider.

  11. Choisissez Commit (Valider).

  12. Dans la boîte de dialogue du flux de travail de validation, entrez les informations suivantes :

    1. Pour le message de validation, supprimez le texte et entrez :

      Add first workflow
    2. Pour Repository, choisissezcodecatalyst-eks-source-repository.

    3. Pour Nom de la branche, choisissez main.

    4. Choisissez Commit (Valider).

    Vous venez de créer un flux de travail. L'exécution d'un flux de travail démarre automatiquement en raison du déclencheur défini en haut du flux de travail. Plus précisément, lorsque vous avez validé (et transféré) le workflow.yaml fichier dans votre référentiel source, le déclencheur a lancé l'exécution du flux de travail.

Pour consulter la progression de l'exécution du flux de travail
  1. Dans le volet de navigation de la CodeCatalyst console, choisissez CI/CD, puis Workflows.

  2. Choisissez le flux de travail que vous venez de créer,codecatalyst-eks-workflow.

  3. Choisissez BuildBackendde voir la progression de la construction.

  4. Choisissez DeployToEKS pour voir la progression du déploiement.

    Pour plus d'informations sur l'affichage des détails des courses, consultezAfficher le statut et les détails de l'exécution du flux de travail.

Pour vérifier le déploiement
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Sur la gauche, vers le bas, choisissez Load Balancers.

  3. Sélectionnez l'équilibreur de charge créé dans le cadre de votre déploiement Kubernetes. Si vous ne savez pas quel équilibreur de charge choisir, recherchez les balises suivantes sous l'onglet Tags :

    • kubernetes.io/service-name

    • kubernetes.io/cluster/ekstutorialcluster

  4. Une fois le bon équilibreur de charge sélectionné, cliquez sur l'onglet Description.

  5. Copiez et collez la valeur du nom DNS dans la barre d'adresse de votre navigateur.

    Le « Hello, World ! » Une page Web apparaît dans votre navigateur, indiquant que vous avez correctement déployé votre application.

Étape 9 : Apportez une modification à vos fichiers source

Dans cette section, vous allez apporter une modification au index.html fichier dans votre dépôt source. Cette modification oblige le flux de travail à créer une nouvelle image Docker, à l'étiqueter avec un ID de validation, à la transmettre à Amazon ECR et à la déployer sur Amazon ECS.

Pour modifier le fichier index.html
  1. Accédez à votre environnement de développement.

  2. À l'invite du terminal, accédez à votre référentiel source :

    cd /projects/codecatalyst-eks-source-repository
  3. Importez les dernières modifications apportées au flux de travail :

    git pull
  4. Ouvrir codecatalyst-eks-source-repository/public-html/index.html.

  5. À la ligne 14, remplacez le Hello, World! texte parTutorial complete!.

  6. Ajoutez, validez et envoyez :

    git add . git commit -m "update index.html title" git push

    L'exécution d'un flux de travail démarre automatiquement.

  7. (Facultatif) Entrez :

    git show HEAD

    Notez l'ID de validation associé à la index.html modification. Cet ID de validation sera associé à l'image Docker qui sera déployée par le flux de travail que vous venez de démarrer.

  8. Suivez la progression du déploiement :

    1. Dans le volet de navigation de la CodeCatalyst console, choisissez CI/CD, puis Workflows.

    2. Choisissez codecatalyst-eks-workflow d'afficher la dernière édition.

    3. Choisissez BuildBackend, et DeployToEKS pour voir la progression de l'exécution du flux de travail.

  9. Vérifiez que votre application a été mise à jour, comme suit :

    1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

    2. Sur la gauche, vers le bas, choisissez Load Balancers.

    3. Sélectionnez l'équilibreur de charge créé dans le cadre de votre déploiement Kubernetes.

    4. Copiez et collez la valeur du nom DNS dans la barre d'adresse de votre navigateur.

      Le « Tutoriel terminé ! » Une page Web apparaît dans votre navigateur, indiquant que vous avez déployé avec succès une nouvelle version de votre application.

  10. (Facultatif) Dans AWS, passez à la console Amazon ECR et vérifiez que la nouvelle image Docker a été étiquetée avec l'ID de validation indiqué à l'étape 7 de cette procédure.

Nettoyage

Vous devez nettoyer votre environnement afin de ne pas être facturé inutilement pour les ressources de stockage et de calcul utilisées dans ce didacticiel.

Pour nettoyer
  1. Supprimez votre cluster :

    1. Dans le terminal Dev Environment, entrez :

      eksctl delete cluster --region=us-west-2 --name=codecatalyst-eks-cluster

      Où :

      • us-west-2 est remplacé par votre région.

      • codecatalyst-eks-clusterest remplacé par le nom du cluster que vous avez créé.

      Après 5 à 10 minutes, le cluster et les ressources associées sont supprimés, notamment les AWS CloudFormation piles, les groupes de nœuds (dans Amazon EC2) et les équilibreurs de charge.

    Important

    Si la eksctl delete cluster commande ne fonctionne pas, vous devrez peut-être actualiser vos AWS informations d'identification ou vos kubectl informations d'identification. Si vous n'êtes pas sûr des informations d'identification à actualiser, AWS actualisez-les d'abord. Pour actualiser vos AWS informations d'identification, consultezComment corriger les erreurs « Impossible de localiser les informations d'identification » et ExpiredToken « » ?. Pour actualiser vos kubectl informations d'identification, consultezComment corriger les erreurs « Impossible de se connecter au serveur » ?.

  2. Dans la AWS console, nettoyez comme suit :

    1. Dans Amazon ECR, supprimezcodecatalyst-eks-image-repo.

    2. Dans IAM Identity Center, supprimez :

      1. codecatalyst-eks-user

      2. codecatalyst-eks-permission-set

    3. Dans IAM, supprimez :

      • codecatalyst-eks-build-role

      • codecatalyst-eks-deploy-role

      • codecatalyst-eks-build-policy

      • codecatalyst-eks-deploy-policy

  3. Dans la CodeCatalyst console, nettoyez comme suit :

    1. Supprimercodecatalyst-eks-workflow.

    2. Supprimercodecatalyst-eks-environment.

    3. Supprimercodecatalyst-eks-source-repository.

    4. Supprimez votre environnement de développement.

    5. Supprimercodecatalyst-eks-project.

Dans ce didacticiel, vous avez appris à déployer une application sur un service Amazon EKS à l'aide d'un CodeCatalyst flux de travail et d'une action de cluster Deploy to Kubernetes.