Tutorial: implante um aplicativo Hello World com AWS SAM - AWS Serverless Application Model

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: implante um aplicativo Hello World com AWS SAM

Neste tutorial, você usa a interface de linha de AWS Serverless Application Model comando (AWS SAM CLI) para concluir o seguinte:

  • Inicialize, crie e implante uma amostra do aplicativo Hello World.

  • Faça alterações locais e sincronize com AWS CloudFormation.

  • Execute testes locais no host de desenvolvimento.

  • Exclua a amostra do aplicativo do Nuvem AWS.

O exemplo do aplicativo Hello World implementa um API back-end básico. É composto pelos seguintes recursos:

  • Amazon API Gateway — API endpoint que você usará para invocar sua função.

  • AWS Lambda— Função que processa a HTTP API GET solicitação e retorna uma hello world mensagem.

  • AWS Identity and Access Management (IAM) função — fornece permissões para que os serviços interajam com segurança.

O diagrama a seguir mostra os componentes deste aplicativo:

Um diagrama de uma função Lambda que é invocada quando você envia uma GET solicitação para o endpoint do API Gateway.

Pré-requisitos

Verifique se você concluiu o seguinte:

Etapa 1: Inicialize o aplicativo de amostra Hello World

Nesta etapa, você usará o AWS SAM CLI para criar um exemplo de projeto de aplicativo Hello World em sua máquina local.

Para inicializar o aplicativo Hello World de amostra
  1. Na sua linha de comando, execute o seguinte a partir de um diretório inicial de sua escolha:

    $ sam init
    nota

    Esse comando inicializa a aplicação sem servidor, criando o diretório do projeto. Esse diretório conterá vários arquivos e pastas. O arquivo mais importante é template.yaml. Esse é o seu AWS SAM modelo. A versão do python deve corresponder à versão do python listada no arquivo template.yaml criado pelo comando sam init.

  2. O AWS SAM CLI guiará você na inicialização de um novo aplicativo. Configure o seguinte:

    1. Selecione AWS Modelos de início rápido para escolher um modelo inicial.

    2. Escolha o modelo Hello World Example e baixe-o.

    3. Use o comando Python tempo de execução e tipo de zip pacote.

    4. Para este tutorial, desative o AWS X-Ray rastreamento. Para saber mais, consulte O que é AWS X-Ray? no Guia do AWS X-Ray desenvolvedor.

    5. Para este tutorial, desative o monitoramento com o Amazon CloudWatch Application Insights. Para saber mais, consulte Amazon CloudWatch Application Insights no Guia CloudWatch do usuário da Amazon.

    6. Neste tutorial, opte por não configurar o Structured Logging no JSON formato em suas funções do Lambda.

    7. Nomeie seu aplicativo como sam-app.

    Para usar o AWS SAM CLI fluxo interativo:

    • Os colchetes ([ ]) indicam valores padrão. Deixe sua resposta em branco para selecionar o valor padrão.

    • Digite y para sim e n para não.

    A seguir está um exemplo do sam init fluxo interativo:

    $ sam init ... Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API 4 - Scheduled task 5 - Standalone function 6 - Data processing 7 - Hello World Example With Powertools 8 - Infrastructure event management 9 - Serverless Connector Hello World Example 10 - Multi-step workflow with Connectors 11 - Lambda EFS example 12 - DynamoDB Example 13 - Machine Learning Template: 1 Use the most popular runtime and package type? (Python and zip) [y/N]: y 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 Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]: ENTER Project name [sam-app]: ENTER
  3. O AWS SAM CLI baixa seu modelo inicial e cria a estrutura de diretórios do projeto do aplicativo em sua máquina local. A seguir está um exemplo do AWS SAM CLI saída:

    Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment)
    
        -----------------------
        Generating application:
        -----------------------
        Name: sam-app
        Runtime: python3.9
        Architectures: x86_64
        Dependency Manager: pip
        Application Template: hello-world
        Output Directory: .
        Configuration file: sam-app/samconfig.toml
    
        Next steps can be found in the README file at sam-app/README.md
    
    
    Commands you can use next
    =========================
    [*] Create pipeline: cd sam-app && sam pipeline init --bootstrap
    [*] Validate SAM template: cd sam-app && sam validate
    [*] Test Function in the Cloud: cd sam-app && sam sync --stack-name {stack-name} --watch
  4. Na sua linha de comando, vá para o diretório sam-app recém-criado. A seguir está um exemplo do que AWS SAM CLI criou:

    $ cd sam-app $ tree ├── README.md ├── __init__.py ├── events │ └── event.json ├── hello_world │ ├── __init__.py │ ├── app.py │ └── requirements.txt ├── samconfig.toml ├── template.yaml └── tests ├── __init__.py ├── integration │ ├── __init__.py │ └── test_api_gateway.py ├── requirements.txt └── unit ├── __init__.py └── test_handler.py 6 directories, 14 files

    Alguns arquivos importantes a serem destacados:

    • hello_world/app.py— Contém o código da função do Lambda.

    • hello_world/requirements.txt— Contém qualquer Python dependências que sua função Lambda exige.

    • samconfig.toml— Arquivo de configuração do seu aplicativo que armazena os parâmetros padrão usados pelo AWS SAM CLI.

    • template.yaml— O AWS SAM modelo que contém o código da infraestrutura do seu aplicativo.

Agora você tem um aplicativo com tecnologia sem servidor totalmente criado em sua máquina local!

Etapa 2: crie seu aplicativo

Nesta etapa, você usa o AWS SAM CLI para criar seu aplicativo e se preparar para a implantação. Quando você constrói, o AWS SAM CLI cria um .aws-sam diretório e organiza as dependências da função, o código do projeto e os arquivos do projeto nele.

Para construir seu aplicativo
  • Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam build
    nota

    Se você não tem Python em sua máquina local, use o sam build --use-container comando em vez disso. O AWS SAM CLI criará um Docker contêiner que inclui o tempo de execução e as dependências da sua função. Este comando requer Docker na sua máquina local. Para instalar Docker, consulte Instalação do Docker.

    A seguir está um exemplo do AWS SAM CLI saída:

    $ sam build Starting Build use cache Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Running PythonPipBuilder:CopySource Build Succeeded 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

    Veja a seguir um exemplo abreviado do .aws-sam diretório criado pelo AWS SAM CLI:

    .aws-sam
    ├── build
    │   ├── HelloWorldFunction
    │   │   ├── __init__.py
    │   │   ├── app.py
    │   │   └── requirements.txt
    │   └── template.yaml
    └── build.toml

Alguns arquivos importantes a serem destacados:

  • build/HelloWorldFunction— – Contém o código da função do Lambda e as dependências. A AWS SAM CLI cria um diretório para cada função em seu aplicativo.

  • build/template.yaml— Contém uma cópia do seu AWS SAM modelo que é referenciada AWS CloudFormation na implantação.

  • build.toml— Arquivo de configuração que armazena valores de parâmetros padrão referenciados pelo AWS SAM CLI ao criar e implantar seu aplicativo.

Agora você está pronto para implantar seu aplicativo no Nuvem AWS.

Etapa 3: implantar seu aplicativo no Nuvem AWS

nota

Essa etapa requer configuração de AWS credenciais. Para obter mais informações, consulte Etapa 5: use o AWS CLI para configurar as AWS credenciais em AWS SAM pré-requisitos.

Nesta etapa, você usa o AWS SAM CLI para implantar seu aplicativo no Nuvem AWS. O AWS SAM CLI fará o seguinte:

  • Orientá-lo na definição das configurações do seu aplicativo para implantação.

  • Faça o upload dos arquivos do seu aplicativo no Amazon Simple Storage Service (Amazon S3).

  • Transforme seu AWS SAM modelo em um AWS CloudFormation modelo. Em seguida, ele carrega seu modelo no AWS CloudFormation serviço para provisionar seus AWS recursos.

Para implantar seu aplicativo
  1. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam deploy --guided
  2. Siga o AWS SAM CLI fluxo interativo para definir as configurações do seu aplicativo. Configure o seguinte:

    1. O nome da AWS CloudFormation pilha — Uma pilha é uma coleção de AWS recursos que você pode gerenciar como uma única unidade. Para saber mais, consulte Como trabalhar com pilhas no Guia do AWS CloudFormation usuário.

    2. O Região da AWSpara onde implantar sua AWS CloudFormation pilha. Para obter mais informações, consulte AWS CloudFormation Endpoints no AWS CloudFormation Guia do usuário.

    3. Neste tutorial, desative confirmar as alterações antes da implantação.

    4. Permitir criação de IAM função — Isso permite AWS SAM criar a IAM função necessária para que seu recurso do API Gateway e o recurso da função Lambda interajam.

    5. Neste tutorial, desative a desativação da reversão.

    6. Permitir HelloWorldFunction sem autorização definida — Essa mensagem é exibida porque seu endpoint do API Gateway está configurado para ser acessível publicamente, sem autorização. Como essa é a configuração pretendida para seu aplicativo Hello World, permita o AWS SAM CLI para continuar. Para obter mais informações sobre a autorização, consulte Controlar o acesso à API com o modelo do AWS SAM.

    7. Salvar argumentos no arquivo de configuração — Isso atualizará o arquivo samconfig.toml do seu aplicativo com suas preferências de implantação.

    8. Selecione o nome do arquivo de configuração padrão.

    9. Selecione o ambiente de configuração padrão.

    Veja a seguir um exemplo de saída do sam deploy --guided fluxo interativo:

    $ sam-app sam deploy --guided Configuring SAM deploy ====================== Looking for config file [samconfig.toml] : Found Reading default arguments : Success Setting default arguments for 'sam deploy' ========================================= Stack Name [sam-app]: ENTER AWS Region [us-west-2]: ENTER #Shows you resources changes to be deployed and require a 'Y' to initiate deploy Confirm changes before deploy [Y/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 Save arguments to configuration file [Y/n]: ENTER SAM configuration file [samconfig.toml]: ENTER SAM configuration environment [default]: ENTER
  3. O AWS SAM CLI implanta seu aplicativo fazendo o seguinte:

    • O AWS SAM CLI cria um bucket do Amazon S3 e carrega seu diretório. .aws-sam

    • O AWS SAM CLI transforma seu AWS SAM modelo em AWS CloudFormation e o carrega no AWS CloudFormation serviço.

    • AWS CloudFormation provisiona seus recursos.

    Durante a implantação, o AWS SAM CLI exibe seu progresso. Veja a seguir um exemplo de saída:

    Looking for resources needed for deployment:
    
        Managed S3 bucket: aws-sam-cli-managed-default-samcliamzn-s3-demo-source-bucket-1a4x26zbcdkqr
        A different default S3 bucket can be set in samconfig.toml
    
        Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
        This parameter will be only saved under [default.global.parameters] in /Users/.../Demo/sam-tutorial1/sam-app/samconfig.toml.
    
        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
    
    File with same data already exists at sam-app/da3c598813f1c2151579b73ad788cac8, skipping upload
    
        Deploying with following values
        ===============================
        Stack name                   : sam-app
        Region                       : us-west-2
        Confirm changeset            : False
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samcliamzn-s3-demo-source-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}
    
    Initiating deployment
    =====================
    
    File with same data already exists at sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template, skipping upload
    
    
    Waiting for changeset to be created..
    
    CloudFormation stack changeset
    ---------------------------------------------------------------------------------------------------------------------------------------------
    Operation                           LogicalResourceId                   ResourceType                        Replacement
    ---------------------------------------------------------------------------------------------------------------------------------------------
    * Modify                            HelloWorldFunction                  AWS::Lambda::Function               False
    * Modify                            ServerlessRestApi                   AWS::ApiGateway::RestApi            False
    - Delete                            AwsSamAutoDependencyLayerNestedSt   AWS::CloudFormation::Stack          N/A
                                        ack
    ---------------------------------------------------------------------------------------------------------------------------------------------
    
    
    Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1678917603/22e05525-08f9-4c52-a2c4-f7f1fd055072
    
    
    2023-03-15 12:00:16 - Waiting for stack create/update to complete
    
    CloudFormation events from stack operations (refresh every 0.5 seconds)
    ---------------------------------------------------------------------------------------------------------------------------------------------
    ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
    ---------------------------------------------------------------------------------------------------------------------------------------------
    UPDATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
    UPDATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
    UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
    SS
    DELETE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                            ack
    DELETE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                            ack
    UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
    ---------------------------------------------------------------------------------------------------------------------------------------------
    
    CloudFormation outputs from deployed stack
    ----------------------------------------------------------------------------------------------------------------------------------------------
    Outputs
    ----------------------------------------------------------------------------------------------------------------------------------------------
    Key                 HelloWorldFunctionIamRole
    Description         Implicit IAM Role created for Hello World function
    Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W
    
    Key                 HelloWorldApi
    Description         API Gateway endpoint URL for Prod stage for Hello World function
    Value               https://<restapiid>.execute-api.us-west-2.amazonaws.com/Prod/hello/
    
    Key                 HelloWorldFunction
    Description         Hello World Lambda Function ARN
    Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD
    ----------------------------------------------------------------------------------------------------------------------------------------------
    
    
    Successfully created/updated stack - sam-app in us-west-2

Seu aplicativo agora está implantado e executado no Nuvem AWS!

Etapa 4: Executar seu aplicativo

Nesta etapa, você enviará uma GET solicitação ao seu API endpoint e verá a saída da função Lambda.

Para obter o valor do seu API endpoint
  1. A partir das informações exibidas pelo AWS SAM CLI na etapa anterior, localize a Outputs seção. Nesta seção, localize seu HelloWorldApi recurso para encontrar o valor HTTP do endpoint. Veja a seguir um exemplo de saída:

    ----------------------------------------------------------------------------------------------------------------------------------------------
    Outputs
    ----------------------------------------------------------------------------------------------------------------------------------------------
    ...
    Key                 HelloWorldApi
    Description         API Gateway endpoint URL for Prod stage for Hello World function
    Value               https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
    ...
    ----------------------------------------------------------------------------------------------------------------------------------------------
  2. É possível também usar o comando sam list endpoints --output json para obter essas informações. Veja a seguir um exemplo de saída:

    $ sam list endpoints --output json 2023-03-15 12:39:19 Loading policies from IAM... 2023-03-15 12:39:25 Finished loading policies from IAM. [ { "LogicalResourceId": "HelloWorldFunction", "PhysicalResourceId": "sam-app-HelloWorldFunction-yQDNe17r9maD", "CloudEndpoint": "-", "Methods": "-" }, { "LogicalResourceId": "ServerlessRestApi", "PhysicalResourceId": "ets1gv8lxi", "CloudEndpoint": [ "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod", "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Stage" ], "Methods": [ "/hello['get']" ] } ]
Para invocar sua função
  • Usando seu navegador ou a linha de comando, envie uma GET solicitação para seu API endpoint. Veja a seguir um exemplo usando o comando curl:

    $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/ {"message": "hello world"}

Etapa 5: Interaja com sua função no Nuvem AWS

Nesta etapa, você usa o AWS SAM CLI para invocar sua função Lambda no. Nuvem AWS

Para invocar sua função do Lambda na nuvem
  1. Anote o LogicalResourceId das suas funções na etapa anterior. Deveria ser HelloWorldFunction.

  2. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam remote invoke HelloWorldFunction --stack-name sam-app
  3. O AWS SAM CLI invoca sua função na nuvem e retorna uma resposta. Veja a seguir um exemplo de saída:

    $ sam remote invoke HelloWorldFunction --stack-name sam-app Invoking Lambda Function HelloWorldFunction START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Duration: 6.62 ms Billed Duration: 7 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 164.06 ms {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%

Etapa 6: Modifique e sincronize seu aplicativo com o Nuvem AWS

Nesta etapa, você usa o AWS SAM CLI sam sync --watchcomando para sincronizar alterações locais com Nuvem AWS o.

Para usar o sam sync
  1. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam sync --watch
  2. O AWS SAM CLI solicita que você confirme que está sincronizando uma pilha de desenvolvimento. Como o sam sync --watch comando implanta automaticamente as alterações locais no Nuvem AWS em tempo real, nós o recomendamos somente para ambientes de desenvolvimento.

    O AWS SAM CLI executa uma implantação inicial antes de começar a monitorar as alterações locais. Veja a seguir um exemplo de saída:

    $ sam sync --watch The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without performing a CloudFormation deployment. This will cause drift in your CloudFormation stack. **The sync command should only be used against a development stack**. Confirm that you are synchronizing a development stack. Enter Y to proceed with the command, or enter N to cancel: [Y/n]: y Queued infra sync. Waiting for in progress code syncs to complete... Starting infra sync. Manifest is not changed for (HelloWorldFunction), running incremental build Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CopySource Build Succeeded Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63. Execute the following command to deploy the packaged template sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63 --stack-name <YOUR STACK NAME> Deploying with following values =============================== Stack name : sam-app Region : us-west-2 Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samcliamzn-s3-demo-source-bucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"] Parameter overrides : {} Signing Profiles : null Initiating deployment ===================== 2023-03-15 13:10:05 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 0.5 seconds) --------------------------------------------------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason --------------------------------------------------------------------------------------------------------------------------------------------- UPDATE_IN_PROGRESS AWS::CloudFormation::Stack sam-app Transformation succeeded CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack CREATE_IN_PROGRESS AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt Resource creation Initiated ack CREATE_COMPLETE AWS::CloudFormation::Stack AwsSamAutoDependencyLayerNestedSt - ack UPDATE_IN_PROGRESS AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE AWS::Lambda::Function HelloWorldFunction - UPDATE_COMPLETE_CLEANUP_IN_PROGRE AWS::CloudFormation::Stack sam-app - SS UPDATE_COMPLETE AWS::CloudFormation::Stack sam-app - --------------------------------------------------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ---------------------------------------------------------------------------------------------------------------------------------------------- Outputs ---------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD ---------------------------------------------------------------------------------------------------------------------------------------------- Stack update succeeded. Sync infra completed. Infra sync completed. CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.

Depois, você modificará o código da função do Lambda. O AWS SAM CLI detectará automaticamente essa alteração e sincronizará seu aplicativo com Nuvem AWS o.

Para modificar e sincronizar seu aplicativo
  1. Na sua IDE escolha, abra o sam-app/hello_world/app.py arquivo.

  2. Altere o message e salve o arquivo. Veja um exemplo a seguir:

    import json ... def lambda_handler(event, context): ... return { "statusCode": 200, "body": json.dumps({ "message": "hello everyone!", ... }), }
  3. O AWS SAM CLI detecta sua alteração e sincroniza seu aplicativo com o. Nuvem AWS Veja a seguir um exemplo de saída:

    Syncing Lambda Function HelloWorldFunction...
    Manifest is not changed for (HelloWorldFunction), running incremental build
    Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
    Running PythonPipBuilder:CopySource
    Finished syncing Lambda Function HelloWorldFunction.
  4. Para verificar sua alteração, envie uma GET solicitação ao seu API endpoint novamente.

    $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/ {"message": "hello everyone!"}

Etapa 7: (opcional) Teste seu aplicativo localmente

nota

Essa etapa é opcional, pois exige Docker na sua máquina local.

Importante

Para usar o AWS SAM CLI para testes locais, você deve ter Docker instalado e configurado. Para obter mais informações, consulte Instalação do Docker.

Nesta etapa, você usa o AWS SAM CLI sam localcomando para testar seu aplicativo localmente. Para conseguir isso, o AWS SAM CLI cria um ambiente local usando Docker. Esse ambiente local emula o ambiente de execução baseado em nuvem da sua função Lambda.

Você fará o seguinte:

  1. Crie um ambiente local para sua função do Lambda e invoque-o.

  2. Hospede seu HTTP API endpoint localmente e use-o para invocar sua função Lambda.

Para invocar a função do Lambda localmente
  1. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam local invoke
  2. O AWS SAM CLI cria um local Docker container e invoca sua função. Veja a seguir um exemplo de saída:

    $ sam local invoke Invoking app.lambda_handler (python3.9) Local image was not found. Removing rapid images for repo public.ecr.aws/sam/emulation-python3.9 Building image..................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Version: $LATEST END RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 REPORT RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Init Duration: 1.01 ms Duration: 633.45 ms Billed Duration: 634 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
Para hospedar seu API localmente
  1. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam local start-api
  2. O AWS SAM CLI cria um local Docker contêiner para sua função Lambda e cria um HTTP servidor local para simular seu endpoint. API Veja a seguir um exemplo de saída:

    $ sam local start-api Initializing the lambda functions containers. Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container Containers Initialization is done. Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template 2023-03-15 14:25:21 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:3000 2023-03-15 14:25:21 Press CTRL+C to quit
  3. Usando seu navegador ou a linha de comando, envie uma GET solicitação para seu API endpoint local. Veja a seguir um exemplo usando o comando curl:

    $ curl http://127.0.0.1:3000/hello {"message": "hello world"}

Etapa 8: Exclua seu aplicativo do Nuvem AWS

Nesta etapa, você usa o AWS SAM CLI sam deletecomando para excluir seu aplicativo do Nuvem AWS.

Para excluir seu aplicativo do Nuvem AWS
  1. Na sua linha de comando, no diretório do projeto sam-app, execute o seguinte:

    $ sam delete
  2. O AWS SAM CLI pedirá que você confirme. Em seguida, ele excluirá o bucket e a pilha do Amazon S3 do seu aplicativo. AWS CloudFormation Veja a seguir um exemplo de saída:

    $ sam delete Are you sure you want to delete the stack sam-app in the region us-west-2 ? [y/N]: y Are you sure you want to delete the folder sam-app in S3 which contains the artifacts? [y/N]: y - Deleting S3 object with key c6ce8fa8b5a97dd022ecd006536eb5a4 - Deleting S3 object with key 5d513a459d062d644f3b7dd0c8b56a2a.template - Deleting S3 object with key sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template - Deleting S3 object with key sam-app/6b208d0e42ad15d1cee77d967834784b.template - Deleting S3 object with key sam-app/da3c598813f1c2151579b73ad788cac8 - Deleting S3 object with key sam-app/f798cdd93cee188a71d120f14a035b11 - Deleting Cloudformation stack sam-app Deleted successfully

Solução de problemas

Para solucionar o problema do AWS SAM CLI, consulte AWS SAM CLI solução de problemas.

Saiba mais

Para continuar aprendendo sobre isso AWS SAM, consulte os seguintes recursos:

  • O Workshop AWS SAM Completo – Um workshop projetado para ensinar a você muitos dos principais atributos que AWS SAM oferece.

  • Sessões com SAM — Série de vídeos criada por nossa equipe AWS Serverless Developer Advocate sobre o uso. AWS SAM

  • Serverless Land — Site que reúne as informações mais recentes, blogs, vídeos, código e recursos de aprendizado para a tecnologia sem servidor AWS .