

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.

# Déployez un exemple de microservice Java sur Amazon EKS et exposez le microservice à l'aide d'un Application Load Balancer
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson et Akkamahadevi Hiremath, Amazon Web Services*

## Résumé
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Ce modèle décrit comment déployer un exemple de microservice Java en tant qu'application conteneurisée sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'`eksctl`aide de l'utilitaire de ligne de commande et d'Amazon Elastic Container Registry (Amazon ECR). Vous pouvez utiliser un Application Load Balancer pour équilibrer la charge du trafic des applications.

## Conditions préalables et limitations
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Interface de ligne de commande AWS (AWS CLI) version 1.7 ou ultérieure, installée et configurée sur macOS, Linux ou Windows
+ Un démon [Docker en cours d'](https://docs.docker.com/config/daemon/)exécution
+ L'utilitaire de ligne de `eksctl` commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez [Getting started with Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) dans la documentation Amazon EKS.)
+ L'utilitaire de ligne de `kubectl` commande, installé et configuré sous macOS, Linux ou Windows (pour plus d'informations, consultez [Installation ou mise à jour de kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dans la documentation Amazon EKS.)

**Limites**
+ Ce modèle ne couvre pas l'installation d'un certificat SSL pour l'Application Load Balancer.

## Architecture
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Pile technologique cible**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Architecture cible**

Le schéma suivant montre une architecture permettant de conteneuriser un microservice Java sur Amazon EKS.

![\[Microservice Java déployé sous forme d'application conteneurisée sur Amazon EKS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Outils
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous aide à exécuter Kubernetes sur AWS sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribue automatiquement votre trafic entrant sur plusieurs cibles, telles que les instances, les conteneurs et les adresses IP Amazon Elastic Compute Cloud (Amazon EC2), dans une ou plusieurs zones de disponibilité.
+ [eksctl](https://eksctl.io/) vous aide à créer des clusters sur Amazon EKS.
+ [kubectl permet d'](https://kubernetes.io/docs/tasks/tools/install-kubectl/)exécuter des commandes sur des clusters Kubernetes.
+ [Docker](https://www.docker.com/) vous permet de créer, de tester et de fournir des applications dans des packages appelés conteneurs.

## Épopées
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Créez un cluster Amazon EKS à l'aide de eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un cluster Amazon EKS.  | Pour créer un cluster Amazon EKS qui utilise deux EC2 instances Amazon t2.small comme nœuds, exécutez la commande suivante :<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Le processus peut prendre entre 15 et 20 minutes. [Une fois le cluster créé, la configuration Kubernetes appropriée est ajoutée à votre fichier kubeconfig.](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) Vous pouvez utiliser le `kubeconfig` fichier avec `kubectl`**** pour déployer l'application ultérieurement. | Développeur, administrateur système | 
| Vérifiez le cluster Amazon EKS. | Pour vérifier que le cluster est créé et que vous pouvez vous y connecter, exécutez la `kubectl get nodes` commande. | Développeur, administrateur système | 

### Créez un référentiel Amazon ECR et envoyez l'image Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| créer un référentiel Amazon ECR ; | Suivez les instructions de la [section Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dans la documentation Amazon ECR. | Développeur, administrateur système | 
| Créez un fichier XML POM. | Créez un `pom.xml` fichier basé sur l'*exemple de code de fichier POM* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez un fichier source. | Créez un fichier source appelé `HelloWorld.java` dans le `src/main/java/eksExample` chemin en vous basant sur l'exemple suivant :<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Veillez à utiliser la structure de répertoire suivante :<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Créez un fichier Dockerfile. | Créez un code `Dockerfile` basé sur l'*exemple de code Dockerfile* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez et publiez l'image Docker. | Dans le répertoire dans lequel vous souhaitez `Dockerfile` créer, étiqueter et transférer l'image vers Amazon ECR, exécutez les commandes suivantes :<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Modifiez la région AWS, le numéro de compte et les détails du référentiel dans les commandes précédentes. N'oubliez pas de noter l'URL de l'image pour une utilisation ultérieure.Un système macOS doté d'une puce M1 ne parvient pas à créer une image compatible avec Amazon EKS exécuté sur une AMD64 plate-forme. Pour résoudre ce problème, utilisez [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) pour créer une image Docker qui fonctionne sur Amazon EKS. |  | 

### Déployez les microservices Java
<a name="deploy-the-java-microservices"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un fichier de déploiement.  | Créez un fichier YAML appelé en `deployment.yaml` fonction de l'*exemple de code de fichier de déploiement* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle.Utilisez l'URL de l'image que vous avez copiée précédemment comme chemin du fichier image pour le référentiel Amazon ECR. | Développeur, administrateur système | 
| Déployez les microservices Java sur le cluster Amazon EKS.  | Pour créer un déploiement dans votre cluster Amazon EKS, exécutez la `kubectl apply -f deployment.yaml` commande. | Développeur, administrateur système | 
| Vérifiez l'état des capsules. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 
| Créer un service. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 
| Installez le module complémentaire AWS Load Balancer Controller. | Suivez les instructions de la section [Installation du module complémentaire AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) dans la documentation Amazon EKS.Le module complémentaire doit être installé pour créer un Application Load Balancer ou un Network Load Balancer pour un service Kubernetes. | Développeur, administrateur système | 
| Créez une ressource d'entrée. | Créez un fichier YAML appelé en `ingress.yaml` fonction de l'*exemple de code de fichier de ressource d'entrée* dans la section [Informations supplémentaires](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) de ce modèle. | Développeur, administrateur système | 
| Créez un Application Load Balancer. | Pour déployer la ressource d'entrée et créer un Application Load Balancer, exécutez `kubectl apply -f ingress.yaml` la commande. | Développeur, administrateur système | 

### Tester l'application
<a name="test-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez et vérifiez l'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Développeur, administrateur système | 

## Ressources connexes
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (documentation Amazon ECR)
+ [Transférer une image Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentation Amazon ECR)
+ [Contrôleurs d'entrée](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Amazon EKS Workshop)
+ [Docker buildx (Docker docs](https://docs.docker.com/engine/reference/commandline/buildx/))

## Informations supplémentaires
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Exemple de fichier POM**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Exemple de Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Exemple de fichier de déploiement**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Exemple de fichier de service**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Exemple de fichier de ressources d'entrée**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```