Implantar uma aplicação LAMP Web no Amazon Lightsail

GUIA DE CONCEITOS BÁSICOS

Módulo 1: Preparar seu contêiner

Neste módulo, você vai configurar sua pilha LAMP usando a AWS CLI

Introdução

Neste módulo, você usará a AWS CLI para criar uma instância Lightsail a partir de um projeto que tenha os componentes LAMP pré-configurados. Você instalará sua aplicação PHP a partir de um repositório do GitHub durante a criação da instância.

O que você aprenderá

  • Criar uma instância do Lightsail usando a AWS CLI
  • Implantar sua aplicação PHP usando os dados do usuário da instância

 Tempo para a conclusão

10 minutos

 Pré-requisitos do módulo

  • Conta da AWS com acesso de administrador**
  • Navegador recomendado: versão mais recente do Chrome ou Firefox

[**]Talvez as contas criadas nas últimas 24 horas ainda não tenham acesso aos serviços necessários para este tutorial.

Implementação

Criar sua instância Lightsail

Ao executar uma instância Lightsail, você tem a opção de transmitir dados de usuários para ela e usá-los para realizar tarefas comuns de configuração automática e até mesmo executar scripts após a execução da instância. Mais tarde neste guia, você criará uma instância do Lightsail usando a AWS CLI. Copie o script a seguir na parte --user-data do comando:

# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs 
rm -rf *

# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .

# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php

# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php

# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)

Este script removerá o site padrão do projeto, clonará a aplicação de amostra para substituí-la, definirá as permissões de arquivo apropriadas, configurará a senha de banco de dados gerada automaticamente no arquivo de verificação da aplicação de amostra e executará o script init.sql para criar o banco de dados e preenchê-lo com os valores iniciais.

Para acessar sua instância quando estiver em execução, você precisará de uma chave SSH. Para gerar um, execute o seguinte comando:

aws lightsail create-key-pair \
    --key-pair-name LightsailGuide > ssh_key_response.json

cat ssh_key_response.json | jq -r '.publicKeyBase64' > lightsailguide.pub
cat ssh_key_response.json | jq -r '.privateKeyBase64' > lightsailguide
chmod 400 lightsailguide.pub lightsailguide

Agora você já pode criar sua instância usando a AWS CLI. Para este guia, usaremos a região da Irlanda (eu-oeste-1) e a blueprint LAMP com o blueprintId de lamp_7. Se quiser ver uma lista completa de blueprints disponíveis, você poderá executar o seguinte comando:

aws lightsail get-blueprints

Você deve especificar um pacote de instância ao criar uma instância do Lightsail. Para este guia, usaremos um pacote micro_2_0. Você pode visualizar uma lista de pacotes disponíveis com o seguinte comando:

aws lightsail get-bundles

Para criar sua instância Lightsail com o script de dados do usuário e a chave SSH criada, execute o seguinte comando:

# Create the Lightsail instance:
aws lightsail create-instances \
    --instance-names "LightsailLampExample" \
    --availability-zone eu-west-1a \
    --blueprint-id lamp_7 \
    --bundle-id micro_2_0 \
    --key-pair-name LightsailGuide \
    --user-data '# remove default website
#-----------------------
cd /opt/bitnami/apache2/htdocs 
rm -rf *

# clone github repo
#------------------
/opt/bitnami/git/bin/git clone -b loft https://github.com/aws-developer-center/todo-php .

# set write permissons on the settings file
#-----------------------------------
chown bitnami:daemon ./*
chmod 666 connectvalues.php

# inject database password into configuration file
#-------------------------------------------------
sed -i.bak "s/<password>/$(cat /home/bitnami/bitnami_application_password)/;" /opt/bitnami/apache2/htdocs/connectvalues.php

# create database
#----------------
cat /home/bitnami/htdocs/data/init.sql | /opt/bitnami/mariadb/bin/mysql -u root -p$(cat /home/bitnami/bitnami_application_password)' 

O comando exibirá como saída os detalhes da instância que você criou:

{
    "operations": [
        {
            "id": "a49e1398-fb81-455a-8a50-3159c9bd9966",
            "resourceName": "LightsailLampExample",
            "resourceType": "Instance",
            "createdAt": "2021-09-21T16:38:40.566000+02:00",
            "location": {
                "availabilityZone": "eu-west-1a",
                "regionName": "eu-west-1"
            },
            "isTerminal": false,
            "operationType": "CreateInstance",
            "status": "Started",
            "statusChangedAt": "2021-09-21T16:38:40.566000+02:00"
        }
    ]
}

Levará alguns minutos para que sua instância esteja disponível, e você pode usar o seguinte comando para verificar o progresso:

aws lightsail get-instance-state --instance-name LightsailLampExample

Quando aparecer a saída a seguir, significa que a instância está em execução, mas talvez ainda não esteja funcionando por meio do script de dados do usuário:

{
    "state": {
        "code": 16,
        "name": "running"
    }
}

Para testar sua aplicação, você precisará do endereço IP público da sua instância. Execute o seguinte comando para recuperar o endereço IP público da sua instância.

aws lightsail get-instance --instance-name LightsailLampExample | jq -r .instance.publicIpAddress

Copie o endereço IP e cole-o no seu navegador. Você deve ver a aplicação em execução:

Conclusão

Neste primeiro módulo, aprendemos como criar nossa infraestrutura usando a AWS CLI e implantar uma aplicação de amostra. No próximo módulo, aprenderemos a limpar os recursos utilizados neste guia.

A seguir: Limpar os recursos

Envie seus comentários.