Skip to content

Steps to get an application up with localstack (an emulator of aws to test your cloud and serverless apps offline).

Notifications You must be signed in to change notification settings

rafaelabdm/localstack-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

✏️ Localstack Tutorial Hello World


Nesse tutorial vamos subir uma aplicação com localstack. O Localstack é um emulador de serviço cloud que nos permite testar nossas aplicações AWS ou Lambdas localmente na nossa máquina sem ter que conectar com um provedor de nuvem. Isso economiza tempo na hora de testar ou alterar algo no nosso app.

Você pode descobrir mais no link: https://docs.localstack.cloud/getting-started/


✔️ Requisitos:

    Docker: https://www.docker.com/products/docker-desktop/
    Python (Precisa ser uma versão de 3.10 pra baixo): https://www.python.org/downloads/release/python-3100/
    AWS CLI: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
    AWS SAM CLI for LocalStack: pip install aws-sam-cli-local

🔨 Passo a Passo:

DOCKER RUN

Depois de tudo instalado, precisamos subir o container do localstack para receber nossas requisições.
Inicializamos o Docker Descktop, para ele rodar nosso Linux Kernel
Em seguida rodamos o seguinte comando:

docker run --name localstack -d -p 4566:4566 localstack/localstack

Entretanto, se você estiver no Windows, assim como eu... Você deve subir seu container através do docker-compose. Isso porque precisamos compor nosso container com mais uma configuração para conseguir rodar em ambiente Windows.
Então escolha uma pasta de sua preferência, crie um arquivo docker-compose.yml e cole o texto aseguir:

version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    environment:
      - DEBUG=${DEBUG-}
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock" # Esse carinha aqui faz toda a diferença em ambiente Windows

Se optou pelo caminho do docker-compose, troque o comando do docker run [...] por docker-compose up e pronto!
Depois disso, abra outro terminal e execute docker ps, devemos obter a lista de containers em execução:

C:\Users\user>docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED             STATUS                    PORTS                                                                    NAMES
10197c3caa8a   localstack/localstack   "docker-entrypoint.sh"   About an hour ago   Up 20 seconds (healthy)   127.0.0.1:4510-4559->4510-4559/tcp, 127.0.0.1:4566->4566/tcp, 5678/tcp   localstack_main

INIT

Após subirmos nosso container com sucesso, vamos para nosso app. Agora entra o SAM CLI para Localstack.
O SAMLOCAL CLI é igual ao SAM CLI, mas ele redireciona nossas requisições para o localstack que acabamos de subir.
Para começar, escolha uma pasta de sua preferência e digite o comando: samlocal init
Esse comando deve rodar uma série de perguntas para configuração do seu projeto, escolha de acordo com as setas:

C:\Users\user\Desktop>samlocal init

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
        1 - AWS Quick Start Templates <----------- esse
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example       <----------- esse
        2 - Data processing
        3 - Hello World Example With Powertools
        4 - Multi-step workflow
        5 - Scheduled task
        6 - Standalone function
        7 - Serverless API
        8 - Infrastructure event management
        9 - Lambda Response Streaming
        10 - Serverless Connector Hello World Example
        11 - Multi-step workflow with Connectors
        12 - Lambda EFS example
        13 - DynamoDB Example
        14 - Machine Learning
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: <----------- ENTER

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        2 - dotnet6
        3 - go1.x
        4 - go (provided.al2)
        5 - graalvm.java11 (provided.al2)
        6 - graalvm.java17 (provided.al2)
        7 - java17
        8 - java11
        9 - java8.al2
        10 - java8
        11 - nodejs18.x
        12 - nodejs16.x
        13 - nodejs14.x
        14 - nodejs12.x
        15 - python3.9
        16 - python3.8
        17 - python3.7
        18 - python3.10 <----------- se você baixou o que eu deixei no link em Requisitos escolha esse,
        19 - ruby2.7                   caso contrário escolha a versão do python que você tem instalada.
        20 - rust (provided.al2)
Runtime: 18

What package type would you like to use?
        1 - Zip  <----------- esse
        2 - Image
Package type: 1

Based on your selections, the only dependency manager available is pip.
We will proceed copying the template using pip.

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: <----------- ENTER

Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:
<----------- ENTER

Project name [sam-app]: tutorial-sam <----------- o nome do seu projeto, pode escolher :)

    -----------------------
    Generating application:
    -----------------------
    Name: tutorial-sam
    Runtime: python3.10
    Architectures: x86_64
    Dependency Manager: pip
    Application Template: hello-world
    Output Directory: .
    Configuration file: tutorial-sam\samconfig.toml

    Next steps can be found in the README file at tutorial-sam\README.md


Commands you can use next
=========================
[*] Create pipeline: cd tutorial-sam && sam pipeline init --bootstrap
[*] Validate SAM template: cd tutorial-sam && sam validate
[*] Test Function in the Cloud: cd tutorial-sam && sam sync --stack-name {stack-name} --watch


Isso deve ter gerado uma pasta com o nome do projeto. Entre na pasta para executar os próximos passos.
cd tutorial-sam, no meu caso

BUILD

Já dentro da pasta faremos uma edição no arquivo template.yaml
Dentro de Outputs:, vamos alterar a variável Value: da nossa HelloWorldApi:

ANTES:

Outputs:
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"


Depois:

Outputs:
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.localhost.localstack.cloud/Prod/hello/"

Após esse passo, nossa aplicação está pronta para ser buildada. Ainda na pasta da app, execute samlocal build e espere terminar de rodar. Se sua versão do pyhton estiver compátivel com a que você selecionou anteriormente deve funcionar normalmente e aparecer a seguinte mensagem:

C:\Users\user\Desktop\tutorial-sam>samlocal build
Starting Build use cache
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam\deps\c777bf72-7276-4754-8364-c67eac61c348) is
missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: C:\Users\user\Desktop\tutorial-sam\hello_world runtime: python3.10 metadata: {} architecture: x86_64 functions:
HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource
Running PythonPipBuilder:CopySource

Build Succeeded <------ sucessoooo!

Built Artifacts  : .aws-sam\build
Built Template   : .aws-sam\build\template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided

DEPLOY

Agora é a hora do deploy! É só digitar samlocal deploy --guided e seguir os passos:

C:\Users\user\Desktop\tutorial-sam>samlocal deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [tutorial-sam]: <--------- ENTER
        AWS Region [us-east-1]:    <--------- ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: n <--------- N
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: <--------- ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: <--------- ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y <--------- Y
        Save arguments to configuration file [Y/n]: <--------- ENTER
        SAM configuration file [samconfig.toml]: <--------- ENTER
        SAM configuration environment [default]: <--------- ENTER

        Looking for resources needed for deployment:

🛑 Caso apareça um ERRO falando algo sobre região: apenas rode o comando aws confiure, preencha o campo region com us-east-1 e o campo seguinte com json. Os dois campos anteriores podem ser preenchidos com qualquer nome.

Se tudo der certo o deploy vai acontecer com sucesso, e ele apresentará os caminhos para acessar sua HelloWorldApi no campo OUTPUTS:

CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------------------
Outputs
-------------------------------------------------------------------------------------------------------------
Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://6i3s7f0acz.execute-api.localhost.localstack.cloud:4566/Prod/hello/ <----- sua URL

[...]
-------------------------------------------------------------------------------------------------------------

Agora é só acessar a URL fornecida a cima e tá lá! A mensagem mais amada de todos os programadores:

Sem título

About

Steps to get an application up with localstack (an emulator of aws to test your cloud and serverless apps offline).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published