Академический Документы
Профессиональный Документы
Культура Документы
Para isso podemos usar algumas ferramentas do AWS. Na realidade existem muitas, mas hoje
vou falar de apenas duas: cloudinit e codedeploy.
CloudInit
Você pode dizer, mas só isso, um simples script Linux. Sim. Neste momento veremos esses dois
caras, mas saiba que existem soluções bem mais completas como CloudFormation, AWS
OPsWorks, entre outras.
Bem, voltando ao CloudInit, no momento que forma dar um Lauch na instancia, devemos
especificar os dados de usuário da instancia na execução.
No item Configurar detalhes da instancia (passo 3), expanda o item Advanced Details, e a
partir dai, basta digitar seu código shell em User data.
Mas quando falamos de deploy, podemos usar o AWS para criar uma rotina para fazer deploy
de uma aplicação, por exemplo, clicando apenas em um botão, podemos usar o CodeDeploy
da AWS.
CodeDeploy e GitHub
Ele facilita de forma rápida de novos recursos, evita erros humanos, automatiza implantação
de software automaticamente. E pode atingir varias instancias com a mesma implantação.
Imagine o cenário: Um LoadBalance com 4 Servidores WEB rodando nas instancias EC2. Sua
aplicação está localizado no github e você gostaria que quando você fizer atualizações no git,
seja feito deploy em todos os servidores com as atualizações.
Obs: Obviamente esse não seria o processo correto. Primeiramente iriamos mandar para
homologação, testar e posteriormente em produção. E para fazer tudo isso
automaticamente, toda vez que houver atualização no github, é feito deploy automático,
poderíamos usar o Jekins, utilizado para fazer este processo de entrega continua.
Em nossa caso, não iremos fazer deploy automático, quando o projeto for alterado no github,
e sim pedir para o CodeDeploy, fazer deploy desse novo código em todas nossas máquinas em
LoadBalance.
O primeiro passo é a criação das Roles. Para as instancias crie um role com as seguintes
permissões:
AutoScaling:Describe
cloudFormation:Describe
cloudFormation:GetTemplate
s3.Get
s3.List
Essa role será aplicada diretamente em cada instancia, que abaixo chamei de WEBTOTAL.
Já para o nosso CodeDeploy precisamos de uma permissão do serviço AWSCodeDeployRole.
Veja abaixo:
Com isso pronto podemos já iniciar nossa instancias. Caso você use a Instancia Linux do
próprio AWS, não será necessário instalar o agente do codedeploy. Mas se optar, por exemplo,
por uma instancia Ubuntu ou Centos, será necessário instalar o agente. Veja o processo
abaixo:
cd /home/ubuntu
wget https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install
chmod +x ./install
Bem, como usaremos github para armazenamento de nossa aplicação, então será necessária a
criação do repositório, bem como envio da aplicação para o git. Em nosso exemplo, ou se você
quiser usar para teste, use o https://github.com/blogstato/codedeploy.git
Veja abaixo o conteúdo do arquivos appspec, onde serão tomadas as decisões do ciclo de vida
desse deploy:
version: 0.0
os: linux
files:
- source: /index.html
destination: /var/www/html/
hooks:
BeforeInstall:
- location: scripts/install_dependencies
timeout: 300
runas: root
- location: scripts/start_server
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop_server
timeout: 300
runas: root
installdependencies
#!/bin/bash
start_server
#!/bin/bash
service apache2 start
stop_server
#!/bin/bash
isExistApp = `pgrep apache2`
if [ -e /var/www/html/index.html ];then
rm -rf /var/www/html/index.html
fi
if [[ -n $isExistApp ]];then
service apache2 stop
fi
Deployment Configuration trata-se da forma que ele irá atuar para fazer deploy em várias
instancias. Em nosso caso não faz muita diferença pois não temos outras instancias e o
comportamento escolhido não trará alterações.
Vemos acima duas aplicações. A Deploy-WEB e WEBDEPLOY, que foi criada neste momento.
Selecione sua aplicação, clicando nela. Após seleciona-la, marque-a e em Actions selecione
Deploy ou Deploy new revision.
Após conectar informe o nome do repositório, seu usou o git do blog basta informar
blogstato/codedeploy em Repository Name, e
d65d3244710541bd5106a236c480fc659254ea2c em CommitID.
Todas outras opções podem ficam padrõa sem alteração, mas tratam por exemplo de
RoolBack . Uma opção interessante seria Overwrite the contente, em Content
Options. Esse opção sobrescreve qualquer arquivo que já existe na instancia que tenha
o mesmo nome de nossa aplicação.
Conclusão
Com outras ferramentas, como jekins o resultado pode ser melhor ainda. Abaixo links para
consulta:
aws.amazon.com/codedeploy
aws.amazon.com/pt/codedeploy/
https://aws.amazon.com/pt/codedeploy/pricing/
https://aws.amazon.com/pt/documentation/codedeploy/
Espero que gostem.