

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implemente um aplicativo baseado em gRPC em um cluster Amazon EKS e acesse-o com um Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar e Huy Nguyen, Amazon Web Services*

## Resumo
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Esse padrão descreve como hospedar um aplicativo baseado em gRPC em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) e acessá-lo com segurança por meio de um Application Load Balancer.

[gRPC](https://grpc.io/) é uma estrutura de chamada de procedimento remoto (RPC) de código aberto que pode ser executada em qualquer ambiente. Você pode usá-lo para integrações de microsserviços e comunicações cliente-servidor. Para obter mais informações sobre o gRPC, consulte a postagem do blog da AWS [Application Load Balancer support for end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) e gRPC.

Este padrão demonstra como hospedar uma aplicação baseada em gRPC que é executada em pods do Kubernetes no Amazon EKS. O cliente gRPC se conecta a um Application Load Balancer por meio do protocolo HTTP/2 com uma conexão criptografada. SSL/TLS O Application Load Balancer encaminha o tráfego para o aplicativo gRPC que é executado nos pods do Amazon EKS. O número de pods gRPC pode ser escalado automaticamente com base no tráfego usando o autoescalador horizontal de pods do [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html). O grupo de destino do Application Load Balancer realiza verificações de integridade nos nós do Amazon EKS, avalia se o destino está íntegro e encaminha o tráfego apenas para nós íntegros.

## Pré-requisitos e limitações
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [Docker](https://www.docker.com/), instalado e configurado no Linux, macOS ou Windows
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalado e configurado no Linux, macOS ou Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), instalado e configurado no Linux, macOS ou Windows.
+ `kubectl`, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte [Instalação ou atualização do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), instalado e configurado.
+ Um cluster do Amazon EKS, novo ou existente. Para obter mais informações, consulte [Conceitos básicos do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).
+ Seu terminal de computador configurado para acessar o cluster do Amazon EKS. Para obter mais informações, consulte [Configurar o computador para se comunicar com seu cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) na documentação do Amazon EKS.
+ [Controlador do AWS Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), provisionado no cluster Amazon EKS.
+ Um nome de host DNS existente com um SSL ou SSL/TLS certificado válido. É possível obter um certificado para seu domínio usando o AWS Certificate Manager (ACM) ou fazendo upload de um certificado existente para o ACM. Para obter mais informações sobre essas duas opções, consulte [Solicitação de um certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) e [Importação de certificados para o AWS Certificate Manager na documentação](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) do ACM.

## Arquitetura
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura implementada por este padrão.

![Arquitetura para aplicação baseada em gRPC no Amazon EKS](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

O diagrama a seguir mostra um fluxo de trabalho em que o SSL/TLS tráfego é recebido de um cliente gRPC que é transferido para um Application Load Balancer. O tráfego é encaminhado em texto simples para o servidor gRPC porque é proveniente de uma nuvem privada virtual (VPC).

![Fluxo de trabalho para enviar SSL/TLS tráfego para um servidor gRPC](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Ferramentas
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Serviços da AWS**
+ O ‭[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, é possível distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais Zonas de disponibilidade.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável. 
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.  

**Ferramentas**
+ O [eksctl](https://eksctl.io/) é uma ferramenta simples de CLI para criar clusters no Amazon EKS.
+ O [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.
+ O [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) ajuda a gerenciar AWS Elastic Load Balancers para um cluster do Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) é uma ferramenta de linha de comando que ajuda você a interagir com os serviços gRPC.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Épicos
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Crie e envie a imagem do Docker do servidor gRPC para o Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | Faça login no Console de Gerenciamento da AWS, abra o [console do Amazon ECR](https://console.aws.amazon.com/ecr/) e, em seguida, crie um repositório do Amazon ECR. Para obter mais informações, consulte [Criar um repositório](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) na documentação do Amazon ECR. Certifique-se de registrar a URL do repositório Amazon ECR.<br />Você também pode criar um repositório Amazon ECR com a AWS CLI executando o seguinte comando:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrador de nuvem | 
| Crie a imagem do Docker.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 
| Envie a imagem do Docker para o Amazon ECR. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 

### Implemente os manifestos do Kubernetes no cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Modifique os valores no arquivo de manifesto do Kubernetes. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 
| Implemente o arquivo manifesto do Kubernetes.  | Implante o arquivo `grpc-sample.yaml` no cluster do Amazon EKS executando o seguinte comando do `kubectl`: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps engenheiro | 

### Crie o registro DNS para o FQDN do Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Registre o FQDN do Application Load Balancer | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 

### Testar a solução
<a name="test-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste o servidor gRPC.  | Use g RPCurl para testar o endpoint executando o seguinte comando:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Substitua `grpc.example.com` pelo seu nome de DNS. | DevOps engenheiro | 
| Teste o servidor gRPC usando um cliente gRPC.  | No cliente gRPC de amostra `helloworld_client_ssl.py`, substitua o nome do host `grpc.example.com` pelo nome do host usado para o servidor gRPC.  <br />O exemplo de código a seguir mostra a resposta do servidor gRPC para a solicitação do cliente:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre><br />Isso mostra que o cliente pode conversar com o servidor e que a conexão foi bem-sucedida. | DevOps engenheiro | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova o registro de DNS. | Remova o registro de DNS que direciona para o FQDN do Application Load Balancer que você criou anteriormente.  | Administrador de nuvem | 
| Remova o balanceador de carga. | No [console do Amazon EC2](https://console.aws.amazon.com/ec2/), escolha **Balanceadores de Carga** e, em seguida, remova o balanceador de carga que o controlador do Kubernetes criou para seu recurso de entrada. | Administrador de nuvem | 
| Exclua o cluster do Amazon EKS. | Exclua o cluster do Amazon EKS usando o `eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Recursos relacionados
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Balanceamento de carga da rede no Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Grupos de destino para seus Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Mais informações
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Exemplo de recurso de entrada:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Exemplo de recurso de implantação:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Exemplo de saída:**

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```