<aside> 💡
Atenção: o serviço de Kubernetes da AWS não é gratuito, portanto ao executar o hands-on abaixo você terá cobrança de alguns centavos de dólar na sua conta da AWS de acordo com a precificação do EKS na AWS. Lembre-se de deletar o cluster ao final do hands-on para evitar cobranças indesejadas. Use a seção de remoção no final do doc.
</aside>
Crie um usuário chamado eksuser
com privilegio de Admin e se autentique com ele
aws configure
Instale a ferramenta CLI eksctl
curl --silent --location "<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo cp /tmp/eksctl /usr/bin
eksctl version
Instale a ferramenta CLI kubectl
curl -o kubectl <https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl>
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --short --client
Crie um EKS Cluster
eksctl create cluster \\
--name cloudmart \\
--region us-east-1 \\
--nodegroup-name standard-workers \\
--node-type t3.medium \\
--nodes 1 \\
--with-oidc \\
--managed
Conecte-se ao cluster EKS usando a configuração do kubectl
aws eks update-kubeconfig --name cloudmart
Verifique a conectividade do Cluster
kubectl get svc
kubectl get nodes
Crie uma Role & Service Account para fornecer aos pods acesso aos serviços usados pela aplicação (DynamoDB, Bedrock, etc).
eksctl create iamserviceaccount \\
--cluster=cloudmart \\
--name=cloudmart-pod-execution-role \\
--role-name CloudMartPodExecutionRole \\
--attach-policy-arn=arn:aws:iam::aws:policy/AdministratorAccess\\
--region us-east-1 \\
--approve
<aside> 💡
OBS: No exemplo acima, foram usados privilégios de Admin para facilitar fins educacionais. Lembre-se sempre de seguir o princípio do mínimo privilégio em ambientes de produção
</aside>
<Siga os passos do ECR>
cd challenge-day2/backend
nano cloudmart-backend.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: cloudmart-backend-app
spec:
replicas: 1
selector:
matchLabels:
app: cloudmart-backend-app
template:
metadata:
labels:
app: cloudmart-backend-app
spec:
serviceAccountName: cloudmart-pod-execution-role
containers:
- name: cloudmart-backend-app
**image: public.ecr.aws/l4c0j8h9/cloudmart-backend:latest**
env:
- name: PORT
value: "5000"
- name: AWS_REGION
value: "us-east-1"
- name: BEDROCK_AGENT_ID
value: "xxxxxx"
- name: BEDROCK_AGENT_ALIAS_ID
value: "xxxx"
- name: OPENAI_API_KEY
value: "xxxxxx"
- name: OPENAI_ASSISTANT_ID
value: "xxxx"
---
apiVersion: v1
kind: Service
metadata:
name: cloudmart-backend-app-service
spec:
type: LoadBalancer
selector:
app: cloudmart-backend-app
ports:
- protocol: TCP
port: 5000
targetPort: 5000
kubectl apply -f cloudmart-backend.yaml
Acompanhe o status dos objetos sendo criados e obtenha o IP público gerado para a API
kubectl get pods
kubectl get deployment
kubectl get service