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á.
Como fazer upload de arquivos locais na implantação com AWS SAMCLI
Ao desenvolver, muitas vezes você achará vantajoso dividir o código do aplicativo em arquivos separados para melhor organizar e gerenciar seu aplicativo. Um exemplo básico disso é separar o código da AWS Lambda função do código da infraestrutura. Você faz isso organizando o código da função Lambda em um subdiretório do seu projeto e referenciando o caminho local no seu AWS Serverless Application Model modelo ().AWS SAM
Quando você implanta seu aplicativo no Nuvem AWS, é AWS CloudFormation necessário que seus arquivos locais sejam primeiro carregados em um AWS serviço acessível, como o Amazon Simple Storage Service (Amazon S3). Você pode usar o AWS SAMCLI para facilitar automaticamente esse processo. Use o comando sam deploy
ou sam package
para fazer o seguinte:
-
Carregue automaticamente seus arquivos locais em um AWS serviço acessível.
-
Atualize automaticamente seu modelo de aplicativo para referenciar o novo caminho do arquivo.
Tópicos
Demonstração: use o AWS SAMCLI para fazer upload do código da função do Lambda
Nesta demonstração, inicializamos o aplicativo Hello World de amostra usando um tipo de pacote.zip para nossa função do Lambda. Usamos o AWS SAMCLI para carregar automaticamente nosso código de função do Lambda para o Amazon S3 e referenciar seu novo caminho em nosso modelo de aplicativo.
Primeiro, executamos sam init
para inicializar nosso aplicativo Hello World.
$
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 ... 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
Project name [sam-app]:demo
----------------------- Generating application: ----------------------- Name: demo Runtime: python3.9 Architectures: x86_64 Dependency Manager: pip Application Template: hello-world Output Directory: . Configuration file: demo/samconfig.toml ...
Nosso código de função do Lambda é organizado no subdiretório hello_world
do nosso projeto.
demo ├── README.md ├── hello_world │ ├── __init__.py │ ├── app.py │ └── requirements.txt ├── template.yaml └── tests
Em nosso AWS SAM modelo, referenciamos o caminho local para nosso código de função Lambda usando a CodeUri
propriedade.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.9 ...
Em seguida, executamos sam build
para criar nosso aplicativo e nos preparar para a implantação.
$
sam build
Starting Build use cache Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../demo/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 ...
Em seguida, executamos sam deploy --guided
para implantar nosso aplicativo.
$
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 [demo]: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
Looking for resources needed for deployment: ... 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 demo/da3c598813f1c2151579b73ad788cac8, skipping upload Deploying with following values =============================== Stack name : demo Region : us-west-2 Confirm changeset : False Disable rollback : False Deployment s3 bucket : aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr Capabilities : ["CAPABILITY_IAM"] Parameter overrides : {} Signing Profiles : {} Initiating deployment ===================== ... Waiting for changeset to be created.. CloudFormation stack changeset ------------------------------------------------------------------------------------------------- Operation LogicalResourceId ResourceType Replacement ------------------------------------------------------------------------------------------------- + Add HelloWorldFunctionHell AWS::Lambda::Permissio N/A oWorldPermissionProd n + Add HelloWorldFunctionRole AWS::IAM::Role N/A ... ------------------------------------------------------------------------------------------------- Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f 2023-04-07 12:24:58 - Waiting for stack create/update to complete CloudFormation events from stack operations (refresh every 5.0 seconds) ------------------------------------------------------------------------------------------------- ResourceStatus ResourceType LogicalResourceId ResourceStatusReason ------------------------------------------------------------------------------------------------- CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole - CREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole Resource creation Initiated ... ------------------------------------------------------------------------------------------------- CloudFormation outputs from deployed stack ------------------------------------------------------------------------------------------------- Outputs ------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://satnon55e9.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:demo- HelloWorldFunction-G14inKTmSQvK ------------------------------------------------------------------------------------------------- Successfully created/updated stack - demo in us-west-2
Durante a implantação, o carrega AWS SAMCLI automaticamente nosso código de função do Lambda para o Amazon S3 e atualiza nosso modelo. Nosso modelo modificado no AWS CloudFormation console reflete o caminho do bucket do Amazon S3.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8 Handler: app.lambda_handler ...
Casos de uso compatíveis
Eles AWS SAMCLI podem facilitar automaticamente esse processo para vários tipos de arquivos, tipos de AWS CloudFormation recursos e AWS CloudFormation macros.
Tipos de arquivo
Arquivos e imagens do aplicativo Docker são suportados.
AWS CloudFormation tipos de recursos
Veja a seguir uma lista dos tipos de recursos compatíveis e suas propriedades:
Recurso | Propriedades |
---|---|
AWS::ApiGateway::RestApi |
BodyS3Location |
AWS::ApiGatewayV2::Api |
BodyS3Location |
AWS::AppSync:FunctionConfiguration |
|
AWS::AppSync::GraphQLSchema |
DefinitionS3Location |
AWS::AppSync::Resolver |
|
AWS::CloudFormation::ModuleVersion |
ModulePackage |
AWS::CloudFormation::ResourceVersion |
SchemaHandlerPackage |
AWS::ECR::Repository |
RepositoryName |
AWS::ElasticBeanstalk::ApplicationVersion |
SourceBundle |
AWS::Glue::Job |
Command.ScriptLocation |
AWS::Lambda::Function |
|
AWS::Lambda::LayerVersion |
Content |
AWS::Serverless::Api |
DefinitionUri |
AWS::Serverless::Function |
|
AWS::Serverless::GraphQLApi |
|
AWS::Serverless::HttpApi |
DefinitionUri |
AWS::Serverless::LayerVersion |
ContentUri |
AWS::Serverless::StateMachine |
DefinitionUri |
AWS::StepFunctions::StateMachine |
DefinitionS3Location |
AWS CloudFormation macros
Os arquivos referenciados usando a macro de transformação AWS::Include
são suportados.
Saiba mais
Para saber mais sobre a AWS::Include
transformação, consulte AWS::Include transform no Guia do AWS CloudFormation usuário.
Para ver um exemplo do uso da AWS::Include
transformação em um AWS SAM modelo, consulte o padrão API HTTP API to SQS do API Gateway