

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menerapkan contoh layanan mikro Java di Amazon EKS dan mengekspos layanan mikro menggunakan 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 dan Akkamahadevi Hiremath, Amazon Web Services*

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

Pola ini menjelaskan cara menerapkan contoh layanan mikro Java sebagai aplikasi kontainer di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan `eksctl` utilitas baris perintah dan Amazon Elastic Container Registry (Amazon ECR). Anda dapat menggunakan Application Load Balancer untuk memuat keseimbangan lalu lintas aplikasi.

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

**Prasyarat**
+ Akun AWS yang aktif
+ AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows
+ Daemon [Docker](https://docs.docker.com/config/daemon/) yang sedang berjalan
+ Utilitas baris `eksctl` perintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat [Memulai Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) dalam dokumentasi Amazon EKS.)
+ Utilitas baris `kubectl` perintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dalam dokumentasi Amazon EKS.)

**Batasan**
+ Pola ini tidak mencakup pemasangan sertifikat SSL untuk Application Load Balancer.

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

**Tumpukan teknologi target**
+ Amazon ECR
+ Amazon EKS
+ Penyeimbang Beban Elastis

**Arsitektur target**

Diagram berikut menunjukkan arsitektur untuk containerizing Java microservice di Amazon EKS.

![\[Layanan mikro Java digunakan sebagai aplikasi kontainer di Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Alat
<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)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) secara otomatis mendistribusikan lalu lintas masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud ( EC2Amazon), container, dan alamat IP, dalam satu atau beberapa Availability Zone.
+ [eksctl](https://eksctl.io/) membantu Anda membuat cluster di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) memungkinkan untuk menjalankan perintah terhadap cluster Kubernetes.
+ [Docker](https://www.docker.com/) membantu Anda membangun, menguji, dan mengirimkan aplikasi dalam paket yang disebut kontainer.

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

### Buat klaster Amazon EKS dengan menggunakan eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat klaster Amazon EKS.  | Untuk membuat klaster Amazon EKS yang menggunakan dua EC2 instance Amazon t2.small sebagai node, jalankan perintah berikut:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Prosesnya bisa memakan waktu antara 15 hingga 20 menit. [Setelah cluster dibuat, konfigurasi Kubernetes yang sesuai ditambahkan ke file kubeconfig Anda.](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) Anda dapat menggunakan `kubeconfig` file dengan `kubectl`**** untuk menyebarkan aplikasi di langkah selanjutnya. | Pengembang, Admin Sistem | 
| Verifikasi cluster Amazon EKS. | Untuk memverifikasi bahwa cluster dibuat dan Anda dapat terhubung dengannya, jalankan `kubectl get nodes` perintah. | Pengembang, Admin Sistem | 

### Buat repositori Amazon ECR dan dorong gambar Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Ikuti petunjuk dari [Membuat repositori pribadi di dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) Amazon ECR. | Pengembang, Admin Sistem | 
| Buat file XMLPOM. | Buat `pom.xml` file berdasarkan kode *file Contoh POM* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Buat file sumber. | Buat file sumber yang disebut `HelloWorld.java` di `src/main/java/eksExample` jalur berdasarkan contoh berikut:<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>Pastikan untuk menggunakan struktur direktori berikut:<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> |  | 
| Buat Dockerfile. | Buat `Dockerfile` berdasarkan kode *Contoh Dockerfile* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Bangun dan dorong gambar Docker. | Di direktori tempat Anda `Dockerfile` ingin membangun, menandai, dan mendorong gambar ke Amazon ECR, jalankan perintah berikut:<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>Ubah Wilayah AWS, nomor akun, dan detail repositori di perintah sebelumnya. Pastikan untuk mencatat URL gambar untuk digunakan nanti.Sistem macOS dengan chip M1 memiliki masalah dalam membangun gambar yang kompatibel dengan Amazon EKS yang berjalan pada platform. AMD64 Untuk mengatasi masalah ini, gunakan [docker buildx untuk membuat image Docker](https://docs.docker.com/engine/reference/commandline/buildx/) yang berfungsi di Amazon EKS. |  | 

### Menyebarkan layanan mikro Java
<a name="deploy-the-java-microservices"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file penyebaran.  | Buat file YAMM yang disebut `deployment.yaml` berdasarkan kode *file penyebaran Contoh* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini.Gunakan URL gambar yang Anda salin sebelumnya sebagai jalur file gambar untuk repositori Amazon ECR. | Pengembang, Admin Sistem | 
| Menerapkan layanan mikro Java di kluster Amazon EKS.  | Untuk membuat penerapan di cluster Amazon EKS Anda, jalankan `kubectl apply -f deployment.yaml` perintah. | Pengembang, Admin Sistem | 
| Verifikasi status pod. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 
| Buat sebuah layanan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 
| Instal add-on AWS Load Balancer Controller. | Ikuti petunjuk dari [Menginstal add-on AWS Load Balancer Controller dalam dokumentasi Amazon](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) EKS.Anda harus memiliki add-on yang diinstal untuk membuat Application Load Balancer atau Network Load Balancer untuk layanan Kubernetes. | Devloper, Sistem Admin | 
| Buat sumber daya ingress. | Buat file YAMM yang disebut `ingress.yaml` berdasarkan kode *file sumber daya masuk Contoh* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Buat Application Load Balancer. | Untuk menyebarkan sumber daya ingress dan membuat Application Load Balancer, jalankan perintah. `kubectl apply -f ingress.yaml` | Pengembang, Admin Sistem | 

### Uji aplikasi
<a name="test-the-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji dan verifikasi aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 

## Sumber daya terkait
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Membuat repositori pribadi (dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) Amazon ECR)
+ [Mendorong gambar Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (dokumentasi Amazon ECR)
+ [Pengontrol Ingress](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Lokakarya Amazon EKS)
+ [Docker buildx (dokumen Docker](https://docs.docker.com/engine/reference/commandline/buildx/))

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

**Contoh file 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>
```

**Contoh 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"]
```

**Contoh berkas penyebaran**

```
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
```

**Contoh file layanan**

```
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
```

**Contoh file sumber daya ingress**

```
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
```