を使用してデプロイ時にローカルファイルをアップロードする方法 AWS SAMCLI - AWS Serverless Application Model

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用してデプロイ時にローカルファイルをアップロードする方法 AWS SAMCLI

開発時には、アプリケーションコードを個別のファイルに分割すると、アプリケーションをより適切に整理および管理できる場合がよくあります。基本的な例として、 AWS Lambda 関数コードをインフラストラクチャコードから分離します。これを行うには、Lambda 関数コードをプロジェクトのサブディレクトリに整理し、 AWS Serverless Application Model (AWS SAM) テンプレート内のローカルパスを参照します。

アプリケーションを にデプロイする場合 AWS クラウド、 は、まずローカルファイルを Amazon Simple Storage Service (Amazon S3) AWS などのアクセス可能なサービスにアップロード AWS CloudFormation する必要があります。 AWS SAM CLI を使用すると、この処理を自動化できます。sam deploy または sam package コマンドを使用して、次を実行します。

  1. ローカルファイルをアクセス可能な AWS サービスに自動的にアップロードします。

  2. 新しいファイルパスを参照するようにアプリケーションテンプレートを自動的に更新します。

デモ: AWS SAM CLI を使用して Lambda 関数コードをアップロードする

このデモでは、Lambda 関数の.zip パッケージタイプを使用して Hello World サンプルアプリケーションを初期化します。 AWS SAM CLI を使用して Lambda 関数コードを Amazon S3 に自動的にアップロードし、その新しいパスをアプリケーションテンプレートで参照します。

まず、sam init を実行して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 ...

Lambda 関数コードは、プロジェクトの hello_world のサブディレクトリにまとめられています。

demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests

AWS SAM テンプレート内では、 CodeUriプロパティを使用して Lambda 関数コードへのローカルパスを参照します。

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 ...

次に、sam build を実行してアプリケーションを構築し、デプロイの準備をします。

$ 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 ...

次に、アプリケーションをデプロイするために sam deploy --guided を実行します。

$ 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

デプロイ時、 AWS SAM CLI により Lambda 関数コードを Amazon S3 に自動的にアップロードし、テンプレートを更新します。 AWS CloudFormation コンソールで変更されたテンプレートには、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 ...

対応するユースケース

AWS SAMCLI は、多数のファイルタイプ、 AWS CloudFormation リソースタイプ、 AWS CloudFormation マクロに対してこのプロセスを自動的に促進できます。

ファイルタイプ

アプリケーションファイルと Docker イメージがサポートされています。

AWS CloudFormation リソースタイプ

以下は、サポートされているリソースタイプとそれらのプロパティのリストです。

リソース プロパティ
AWS::ApiGateway::RestApi BodyS3Location
AWS::ApiGatewayV2::Api BodyS3Location
AWS::AppSync:FunctionConfiguration

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::AppSync::GraphQLSchema DefinitionS3Location
AWS::AppSync::Resolver

CodeS3Location

RequestMappingTemplateS3Location

ResponseMappingTemplateS3Location

AWS::CloudFormation::ModuleVersion ModulePackage
AWS::CloudFormation::ResourceVersion SchemaHandlerPackage
AWS::ECR::Repository RepositoryName
AWS::ElasticBeanstalk::ApplicationVersion SourceBundle
AWS::Glue::Job Command.ScriptLocation
AWS::Lambda::Function

Code

Code.ImageUri

AWS::Lambda::LayerVersion Content
AWS::Serverless::Api DefinitionUri
AWS::Serverless::Function

CodeUri

ImageUri

AWS::Serverless::GraphQLApi

SchemaUri

Function.CodeUri

Resolver.CodeUri

AWS::Serverless::HttpApi DefinitionUri
AWS::Serverless::LayerVersion ContentUri
AWS::Serverless::StateMachine DefinitionUri
AWS::StepFunctions::StateMachine DefinitionS3Location

AWS CloudFormation マクロ

AWS::Include 変換マクロを使用して参照されるファイルはサポートされています。

詳細はこちら

AWS::Include 変換の詳細については、「 ユーザーガイド」の AWS::Include 「変換AWS CloudFormation 」を参照してください。

AWS SAM テンプレートで AWS::Include変換を使用する例については、Serverless LandAPI Gateway HTTP API から SQS へのパターンを参照してください。