Fazendo Deploy para AWS com BitBucket

AWS User Group São Paulo
awsugsp
Published in
6 min readAug 2, 2017

Final de 2015 a Atlassian anunciou integração com o CodeDeploy da AWS. Porém o post da AWS (https://aws.amazon.com/blogs/apn/announcing-atlassian-bitbucket-support-for-aws-codedeploy/) não é dos mais amigáveis, então resolvi fazer uma passo-a-passo com print dos dois lados.

Vou assumir, que você já possui uma conta AWS e um BitBucket. Se você está no Free Tier (https://aws.amazon.com/free/) esse artigo não vai gerar custo para você.

Pronto vamos lá:

1 . Na conta AWS, criar o Bucket que será usado para o deploy. O BitBucket, vai enviar o código para o Bucket e notificará o CodeDeploy. No nosso caso o nome será bitbucketfranciscoed. Estou criando em Virgínia sem nenhuma configuração adicionar. Next, Next e Finish.

2 . No BitBucket, ativar a integração com o CodeDeploy, para isso vá na página inicial do seu usuário https://bitbucket.org/seu_nome_de_usuario. Você verá uma página semelhante a abaixo:

Clique em Settings, role a tela e procure a opção Find Integrations:

Escolha AWS CodeDeploy for BitBucket:

Conceda o acesso necessário para a integração:

3 . Com a integração ativada, vá até o menu Settings do seu repositório e verifique se a integração está habilitada e clique, deixe esta tela aberta pois precisaremos das informações que estão presentes nela:

4 . De volta a AWS vamos no menu IAM e adicionar uma policy para o BitBucket poder se comunicar com o Bucket e com o CodeDeploy. O BitBucket sugere o seguinte:

{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets", "s3:PutObject"],
"Resource": "arn:aws:s3:::*"
}, {
"Effect": "Allow",
"Action": ["codedeploy:*"],
"Resource": "*"
}]
}

Para esse artigo isso atende. Porém na sua conta de produção, você deve conceder acesso apenas ao Bucket criado para esse propósito, bem como apenas o acesso necessário ao CodeDeploy.
Escolha um nome amigável para a sua policy e salve.

5 . Agora vamos criar uma role para o BitBucket se conectar na sua conta e poder fazer o deploy. No IAM cria uma role do tipo Role for cross-account access e selecione Provide access between your AWS account and a 3rd party AWS account:

6 . Você verá uma tela semelhante a abaixo, preencha com os dados do BitBucket na tela do Item 3, selecione a policy criada no Item 4, coloque um nome amigável e salve:

7 . Após criar a role, acesse-a e copie o arn que terá um formato semelhante a este: arn:aws:iam::111111111111:role/nome_da_role

8 . Agora precisamos criar a role do CodeDeploy, semelhante ao passo 5, porém é uma Service Role

Por padrão a AWS já nos traz uma policy para essa role, basta selecioná-la. ATENÇÃO: não esqueça de marcar a policy, pois ele deixará você avançar sem policy.

Finalize a criação e coloque um nome amigável.

9 . Já que estamos aqui nas Roles, já vamos criar a que será usada para a(s) instância(s) que estarão com o CodeDeploy ativo. Vamos criar uma Service Role (semelhante ao passo anterior) para EC2 e selecionar a policy AmazonS3ReadOnlyAccess. Lembrando que no seu ambiente de produção você deve criar uma policy que libera o acesso, somente ao Bucket que você deseja utilizar.

10 . Pronto, com as roles criadas, vamos agora criar o CodeDeploy. Caso ao clicar em criar aparecer essa tela:

Escolha Custom deployment e continue. Na próxima tela, teremos as informações relativas ao seu deploy, algumas merecem atenção. Primeiro a identificação, são campos obrigatórios e depois selecionaremos esse nome no BitBucket:

Escolha o seu tipo de Deployment

Na configuração do ambiente, você pode escolher um Auto Scaling group, instâncias EC2 ou instâncias on-premises (esse item gera custo). Para o nosso exemplo vamos escolher instância EC2 (criaremos ela mais adiante). Vamos definir algumas tags, assim somente as instâncias que as possuírem receberão o deploy.

Escolha a Service Role criada no item 8.

Opcional: Caso você possua um Load Balancer, poderá selecionar ele. Assim durante o deploy o LB será instruído a não passar tráfego para a instância que está recebendo o deploy.

11 . De volta ao BitBucket, você deve ter parado nesta tela. Cole a arn do passo 7

Escolha a aplicação do CodeDeploy e o Bucket criado e finalize a configuração do BitBucket. Ainda voltaremos nele, mas será para subir arquivos.

12 . Última etapa da configuração, precisamos criar a nossa instância EC2. Pode criar a instância normalmente, mas alguns itens devem ser observados. Primeiro para a instância poder ter acesso ao bucket S3, você deve habilitar a role criada no item 9.

Para o nosso teste você deve ter o Apache instalado e o CodeDeploy. Você pode fazer manualmente ou usar um script de bootstrap (ou outra maneira de sua preferência). Caso queira usar um script cole em User data, o script abaixo:

#!/bin/bash#PACOTES LINUX
yum -y update
yum install -y httpd24
service httpd start
chkconfig httpd on
yum install -y ruby
cd /home/ec2-user
curl -O https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto

IMPORTANTE: Tags, lembra que definimos que somente servidor com as tags configuradas receberiam os arquivos, agora é a hora de configurá-las:

Termine de lançar a máquina e não esqueça de liberar a porta 80 no Security Group.

13 . Enquanto a máquina é iniciada adicione um arquivo index.html no seu repositório com o conteúdo que você desejar. E adicione também um arquivo chamado appspec.yml com o conteúdo abaixo:

version: 0.0
os: linux
files:
- source: index.html
destination: /var/www/html

Esse arquivo dá as instruções ao CodeDeploy do que deve ser feito. No nosso exemplo estamos apenas passando as seguintes instruções:

version: 0.0 -> Versão do appspec, até o momento só o valor 0.0 é suportadoos: linux -> sistema operacional utilizadofiles: -> arquivos que devem ser copiados
- source: index.html -> Caminho de origem no BitBucket
destination: /var/www/html -> Caminho de destino no servidor

Mais informações em: http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html

14 . Se você acessar o seu servidor deve ver uma tela semelhante a essa:

15 . Para finalizar vá até a sua branch no BitBucket e selecione Deploy to AWS

Aparecerá essa tela, confirme o deploy.

Pronto em alguns instantes o arquivo index.html novo estará no servidor e você poderá acessar o servidor novamente e verificar.

Espero ter ajudado. Caso tenha alguma dúvida, escreve aqui em baixo. Caso esteja testando, não esqueça de remover os recursos criados.

Originally published at medium.com by Francisco Edilton.

--

--

AWS User Group São Paulo
awsugsp

Comunidade para discussões, palestras e networking de Tecnologias AWS no Brasil e no mundo.