--- title: "Amazon ECR - Replicação do Registro de Imagens" menutitle: "Amazon ECR - Replicação do Registro de Imagens" weight: 1 pre: "" hidden: true --- {{% notice info %}} Caso ainda não tenha criado o ambiente no AWS Cloud9, comece criando seu workspace. [Clique aqui]({{% relref workspace %}}). {{% /notice %}} {{% notice note %}} Para esse exercício utilize **N. Virginia (us-east-1)** como a região principal e a **N. California (us-west-1)** como a região secundária. {{% /notice %}} #### Criar um Repositório no Registro 1. Salve o ID da sua conta AWS em uma variável de ambiente. ```bash sudo yum install jq -y export AWSACCOUNT=$(aws sts get-caller-identity | jq -r '.Account') ``` 1. Crie um repositório no *registry* privado. Obs: Toda AWS Account já possui um *registry* privado. ```bash aws ecr create-repository \ --repository-name ecr-repository --region us-east-1 ``` #### Criar uma imagem e fazer push para o Repositorio criado 1. Crie o index.html ```bash cat > index.html << EOF Docker Nginx

Hello from Nginx container

EOF ``` 2. Crie o Dockerfile ```bash cat > Dockerfile << EOF FROM nginx:latest COPY ./index.html /usr/share/nginx/html/index.html EOF ``` 3. Crie a imagem docker com o nome do repositorio (substitua o id da conta conforme o seu ambiente) ```bash docker build -t $AWSACCOUNT.dkr.ecr.us-east-1.amazonaws.com/ecr-repository:webapp . ``` 4. Para fazer push da imagem para o repositório utilizando o docker, é necessário se autenticar no repositório primeiro. Para isso, utilize o comando get-login e obtenha a senha para autenticar o docker com o comando docker login. Para o comando abaixo, substitua o id da conta conforme o seu ambiente. ```bash aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $AWSACCOUNT.dkr.ecr.us-east-1.amazonaws.com ``` 5. Depois de autenticar, basta fazer o push usando o comando docker push e substituindo o id da conta conforme o seu ambiente. ```bash docker push $AWSACCOUNT.dkr.ecr.us-east-1.amazonaws.com/ecr-repository:webapp ``` #### Configurar replicação para outra região no registro de imagens 1. Obtenha o id do registro. ```bash export REGISTRYID=$(aws ecr describe-registry | jq -r '.registryId') ``` 2. Criar um arquivo json com os parametros de configuração. Substitua o id de registro do seu ambiente. Perceba que a configuração de replicação irá replicar para a região de **N. California (us-west-1)**. ```bash cat > replication.json << EOF { "rules": [ { "destinations": [ { "region": "us-west-1", "registryId": "$REGISTRYID" } ] } ] } EOF ``` 3. Habilite a replicação com o comando abaixo. ```bash aws ecr put-replication-configuration \ --replication-configuration file://replication.json --region us-east-1 ``` #### Faça uma atualização na imagem 1. Atualize a imagem do container gerando uma nova versão com o comando a seguir. Substitua o id da conta conforme o seu ambiente. ```bash docker build -t $AWSACCOUNT.dkr.ecr.us-east-1.amazonaws.com/ecr-repository:webapp2 . ``` 2. Faça push da nova versão. Perceba que o push acontece para a região de origem (nesse caso N.Viginia (us-east-1)). ```bash docker push $AWSACCOUNT.dkr.ecr.us-east-1.amazonaws.com/ecr-repository:webapp2 ``` #### Valide que a imagem está em ambas as regiões 1. Liste os repositorios de imagens de ambas as regiões. No retorno do comando, observe o parametro *repositoryUri*. ```bash aws ecr describe-repositories --region us-east-1 aws ecr describe-repositories --region us-west-1 ``` 2. Liste as imagens de ambas as regiões. Observe que as imagens possuem o mesmo tamanho, o mesmo manifesto. Porém, a data de push no repositório é um pouco diferente (parametro imagePushedAt). ```bash aws ecr describe-images --repository-name ecr-repository --region us-east-1 aws ecr describe-images --repository-name ecr-repository --region us-west-1 ``` #### Apagando os recursos 1. Apague as imagens criadas nos repositórios ```bash aws ecr batch-delete-image \ --repository-name ecr-repository \ --image-ids imageTag=webapp imageTag=webapp2 --region us-east-1 aws ecr batch-delete-image \ --repository-name ecr-repository \ --image-ids imageTag=webapp imageTag=webapp2 --region us-west-1 ``` 2. Apague os repositórios criados ```bash aws ecr delete-repository --repository-name ecr-repository --region us-east-1 aws ecr delete-repository --repository-name ecr-repository --region us-west-1 ```