AWS Partner Network (APN) Blog – Brasil
Simplificando a gestão de repositórios git com o AWS CodeCommit
Por Glauber Gallego e Angelo Carvalho, Partner Solution Architects
O AWS CodeCommit é um serviço gerenciado pela AWS para hospedagem de repositórios git de forma segura, durável, escalável e que funciona com as ferramentas git que você já está acostumado. O AWS CodeCommit armazena seus arquivos em repositórios criptografados e utiliza roles IAM para controlar o acesso de desenvolvedores e administradores.
Para ganharmos experiência com o AWS CodeCommit, vamos espelhar o repositório oficial AWS-SDK-Javascript e operá-lo com as novas credenciais git com autenticação via HTTPS, funcionalidade lançada em 22 de dezembro de 2016. Com este método de autenticação, os desenvolvedores podem utilizar credenciais git diferentes de seus usuários IAM. Isso elimina a necessidade do AWS CLI instalado e configurado nas máquinas dos desenvolvedores, permite cache de credenciais com ferramental git nativo e facilita ainda mais o uso de IDEs como o Visual Studio e o Eclipse.
Neste post, vamos caminhar passo a passo na criação de um repositório AWS CodeCommit, gerar credenciais git (lembre-se, essas credenciais são diferentes de usuários IAM) e realizar o espelhamento de um repositório oficial da AWS. Dica: Para os impacientes, condensamos (quase) todos esses passos em um template de AWS Cloudformation, vá diretamente à sessão ‘Automação de espelhamento de repositórios com o AWS Cloudformation‘.
Instruções passo a passo para espelhamento de um repositório
Passo 1. Acesso a Conta
Abra o AWS Console e faça logon com um usuário IAM. Se você estiver utilizando um usuário root, siga estas instruções para criação de um usuário IAM Administrador e faça logon com ele.
Passo 2. Acesse o serviço AWS CodeCommit
Escolha uma região que possua o serviço AWS CodeCommit, neste post iremos utilizar a região Virgínia. Selecione o serviço AWS CodeCommit.
Passo 3. Crie um repositório
Crie um novo repositório com o nome aws-sdk-js.
Após criar o repositório, você é automaticamente direcionado para a página com instruções de conexão ao repositório.
Nota: Se por algum motivo você saiu da página de instruções de acesso, é possível visualizá-la novamente ao clicar no botão “Connect” ao lado direito do repositório.
Nota: Esta página contém as instruções de acesso com credenciais git via HTTPS apenas se você estiver logado como um usuário IAM.
Passo 4. Geração de credenciais git
Como comentamos, vamos gerar novas credenciais git com autenticação via HTTPS. Clique no link “IAM User” e seremos direcionados para o serviço IAM para criar as credenciais git.
Nota: Se você seguiu as instruções do passo 1, você estará logado como um usuário IAM Administrador. Este usuário é bastante poderoso e pode executar todo tipo de ação no console AWS. Para maior nível de segurança, recomendamos a criação de um usuário exclusivo para uso do git (ex: committer) com apenas as permissões “IAMSelfManageServiceSpecificCredentials” e “IAMReadOnlyAccess”. Essas permissões são o mínimo necessário para acesso ao AWS CodeCommit com credencias git via HTTPS. Para este post, seguiremos com o usuário IAM Administrador.
Para geração das credenciais, selecione a aba “Security credentials”, vá ao final da página e clique no botão “Generate” dentro da sessão “HTTPS Git credentials for AWS CodeCommit” e faça download das credenciais (Atenção: essa é a única oportunidade para visualizar ou baixar as credenciais).
Passo 5. Obtenha a URL HTTPS do repositório
Volte para a página do serviço AWS CodeCommit e copie o link HTTPS para clonar o repositório.
Passo 6. Clone o repositório
Vá ao terminal ou linha de comando e digite:
git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/aws-sdk-js
Quando requisitado, entre com as credenciais git (username e password) que você gerou anteriormente. Note que não é necessário ter o AWS CLI instalado em sua máquina, o único requisito é o cliente git (ou uma IDE como o Visual Studio ou o Eclipse).
Passo 7. Envie o conteúdo do repositório aws-sdk-js para o AWS CodeCommit
Neste ponto, seu repositório deverá está vazio. Para preenchê-lo com o conteúdo do repositório AWS-SDK-Javascript iremos clonar o repositório oficial em outro diretório (ex: TEMP-aws-sdk-js’), limpar os metadados do git (removendo o diretório .git) e enviar o conteúdo ao repositório do AWS CodeCommit. Note que neste método de espelhamento, perderemos todo o histórico, notas, tags e branches do repositório original, como nossa intenção é de experimentação com o serviço AWS CodeCommit essa é uma opção rápida e eficaz.
git clone https://github.com/aws/aws-sdk-js TEMP-aws-sdk-js
rm -rf TEMP-aws-sdk-js/.git/
cp -r TEMP-aws-sdk-js/* aws-sdk-js/
rm -rf TEMP-aws-sdk-js
cd aws-sdk-js/
git add *
git commit -m "First commit"
git push
Nota: Se você deseja realizar o espelhamento de repositórios incluindo o histórico do repositório original (ex: notas, refs, tags e branches), veja referencias do comando git clone / git push com a opção –mirror em https://git-scm.com/docs/git-clone#git-clone—mirror e https://git-scm.com/docs/git-push#git-push—mirror.
Passo 8. Acesso ao repositório via AWS Console
Pronto, seu repositório está preenchido, pronto para receber comandos git e pode ser visualizado diretamente no console AWS.
O AWS CodeCommit possui um nível gratuito (e que não expira ao final de 12 meses) com repositórios ilimitados para até 5 usuários, 50GB de armazenamento e 10.000 requisições git/mês. Acima de 5 usuários o custo é de US$ 1 / mês. Se ainda assim você quiser remover seu repositório, acesse o repositório, clique em ‘Settings’ e em seguida em ‘Delete repository’ ao final da página.
Automação de espelhamento de repositórios com o AWS Cloudformation
Para facilitar sua experimentação com o AWS CodeCommit, criamos um template de AWS Cloudformation que automatiza (quase) todos os passos de 1-9 que vimos até aqui. A exceção é o passo 4, pois você precisará possuir credenciais git para acesso HTTPS. Note que se você já executou os passos de 1-9, você já possui as credencias e pode pular a geração descrita no próximo paragrafo.
Geração de credenciais git:
- Acesse o serviço IAM e selecione um usuário com as permissões “IAMSelfManageServiceSpecificCredentials” e “IAMReadOnlyAccess” (se você estiver utilizando um usuário IAM Administrador ele já possui essas permissoes). Essas permissoes são necessárias para acesso ao AWS CodeCommit com credencias git via HTTPS.
- Para geração das credenciais, selecione a aba “Security credentials”, vá ao final da página e clique no botão “Generate” dentro da sessão “HTTPS Git credentials for AWS CodeCommit” e faça download das credenciais (Atenção: essa é a única oportunidade para visualizar ou baixar as credenciais).
- Veja o passo 4 com screenshots da geração das credenciais.
O template de AWS Cloudformation pode ser conferido aqui. Os recursos AWS criados pelo template são:
- um repositório AWS CodeCommit;
- uma função AWS Lambda (veja aqui) que será executada apenas durante a inicialização do repositório;
Para executá-lo, clique aqui.
E siga as instruções a seguir:
- Informe uma URL de um projeto do GitHub. Exemplo: https://github.com/aws/aws-sdk-php
- Informe um nome de repositório ainda não utilizado em seu AWS CodeCommit. Exemplo: aws-sdk-php
- Informe suas credenciais git com acesso https (username)
- Informe suas credenciais git com acesso https (password)
Notas para todos os usuários:
- O template de AWS Cloudformation utiliza AWS Lambda para espelhar o repositório, portanto está limitado a 5 minutos de execução e 512MB de espaço de repositório. Repositórios grandes ou com muitos objetos podem não terminar o espelhamento a tempo
- Não é possível atualizar a stack de AWS Cloudformation para espelhar um novo repositório. Novos espelhamentos requerem novas stacks de AWS Cloudformation
- ATENÇÃO: Remoção de stacks de AWS Cloudformation removem os repositórios AWS CodeCommit associados!
Notas para usuários avançados:
- Vale a pena conferir o template de AWS Cloudformation (veja aqui), ele cria o repositório com o recurso AWS::CodeCommit::Repository e o inicializa via AWS Lambda com recursos customizados via AWS::CloudFormation::CustomResource
- Vale a pena conferir o código AWS Lambda associado ao AWS Cloudformation (veja aqui), ele instala e configura um cliente git dentro do contexto de execução do AWS Lambda
O AWS CodeCommit possui um nível gratuito (e que não expira ao final de 12 meses) com repositórios ilimitados para até 5 usuários, 50GB de armazenamento e 10.000 requisições git/mês. Acima de 5 usuários o custo é de US$ 1 / mês. Se ainda assim você quiser remover seu repositório, delete a Stack de Cloudformation e todos os recursos associados (repositório AWS CodeCommit e função AWS lambda) serão removidos.