を使用したデフォルトビルド AWS SAM - AWS Serverless Application Model

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

を使用したデフォルトビルド AWS SAM

サーバーレスアプリケーションを構築するには、sam build コマンドを使用します。このコマンドは、アプリケーションの依存関係のビルドアーティファクトも収集して、ローカルでのテスト、パッケージ化、およびデプロイなどの次のステップのために、それらを適切な形式と場所に設定します。

アプリケーションの依存関係は、マニフェストファイル (requirements.txt (Python) または package.json (Node.js) など) で指定するか、関数リソースの Layers プロパティを使用して指定します。Layers プロパティには、 のリストが含まれます。 AWS Lambda Lambda 関数が依存するレイヤーリソース。

アプリケーションのビルドアーティファクトの形式は、各関数の PackageType プロパティに応じて異なります。このプロパティのオプションには次のものがあります。

  • Zip - アプリケーションコードとその依存関係が含まれる .zip ファイルアーカイブ。コードを .zip ファイルアーカイブとしてパッケージ化する場合は、関数の Lambda ランタイムを指定する必要があります。

  • Image - アプリケーションコードとその依存関係に加えて、ベースオペレーティングシステム、ランタイム、および拡張機能が含まれているコンテナイメージ。

Lambda パッケージタイプの詳細については、「」の「Lambda デプロイパッケージ」を参照してください。 AWS Lambda デベロッパーガイド

.zip ファイルアーカイブの構築

サーバーレスアプリケーションを.zip ファイルアーカイブとして構築するには、サーバーレス関数に PackageType: Zip を宣言します。

AWS SAM は、指定したアーキテクチャ用にアプリケーションを構築します。アーキテクチャを指定しない場合は、 AWS SAM x86_64 はデフォルトで を使用します。

ネイティブにコンパイルされたプログラムが含まれるパッケージに Lambda 関数が依存する場合は、--use-container フラグを使用します。このフラグは、Lambda 環境のように動作する Docker コンテナで関数をローカルにコンパイルするため、関数を にデプロイするときに適切な形式になります。 AWS クラウド。

--use-container オプションを使用する場合、デフォルトでは AWS SAM は Amazon ECR Public からコンテナイメージをプルします。などの別のリポジトリからコンテナイメージをプルする場合は DockerHub、 --build-imageオプションを使用して、代替コンテナイメージURIの を指定できます。 DockerHub リポジトリのコンテナイメージを使用してアプリケーションを構築するための 2 つのコマンドの例を次に示します。

# Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12

URIs で使用できる のリストについては--build-imageの画像リポジトリ AWS SAM「サポートされているランタイムの数の を含む DockerHub URIs 」を参照してください。

.zip ファイルアーカイブアプリケーションのその他の構築例については、このトピックの後半にある「例」セクションを参照してください。

コンテナイメージの構築

サーバーレスアプリケーションをコンテナイメージとして構築するには、サーバーレス関数に PackageType: Image を宣言します。また、以下のエントリを使って Metadata リソース属性を宣言する必要もあります。

Dockerfile

Lambda 関数に関連付けられた Dockerfile の名前。

DockerContext

Dockerfile の場所。

DockerTag

(オプション) 構築されたイメージに適用するタグ。

DockerBuildArgs

ビルド用のビルド引数。

重要

- AWS SAM CLI は、DockerBuildArgs引数に含める情報を秘匿化または難読化しません。このセクションを使用してパスワードやシークレットなどの機密情報を保存しないことを強くお勧めします。

以下は、Metadata リソース属性セクションの例です。

Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

Image パッケージタイプで設定されたサンプルアプリケーションをダウンロードするには、「」を参照してくださいチュートリアル: で Hello World アプリケーションをデプロイする AWS SAM。インストールしたいパッケージタイプをたずねるプロンプトで、[Image] を選択します。

注記

Dockerfile でマルチアーキテクチャベースイメージを指定する場合は、 AWS SAM は、ホストマシンのアーキテクチャ用にコンテナイメージを構築します。別のアーキテクチャ用に構築するには、特定のターゲットアーキテクチャを使用するベースイメージを指定します。

コンテナ環境変数ファイル

ビルドコンテナの環境変数を含むJSONファイルを提供するには、 sam build コマンドで --container-env-var-file引数を使用します。すべてのサーバーレスリソースに適用される単一の環境変数を提供する、または各リソースに異なる環境変数を提供することができます。

[形式]

環境変数をビルドコンテナに渡す形式は、リソースに提供する環境変数の数に応じて異なります。

すべてのリソースに対して単一の環境変数を提供するには、以下のように Parameters オブジェクトを指定します。

{ "Parameters": { "GITHUB_TOKEN": "TOKEN_GLOBAL" } }

各リソースに異なる環境変数を提供するには、以下のようにリソースごとにオブジェクトを指定します。

{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }

環境変数をファイル (env.json と命名されたファイルなど) として保存します。以下のコマンドは、このファイルを使用して環境変数をビルドコンテナに渡します。

sam build --use-container --container-env-var-file env.json

優先順位

  • すべてのリソースに対する単一の環境変数よりも、特定のリソースに提供する環境変数が優先されます。

  • ファイル内の環境変数よりも、コマンドラインで提供する環境変数が優先されます。

ソースフォルダにプロジェクトを構築することでビルド時間を短縮する

サポートされているランタイムとビルドメソッドについては、--build-in-source オプションを使用してプロジェクトをソースフォルダに直接構築できます。デフォルトでは、 AWS SAM CLI は一時ディレクトリに構築されます。これには、ソースコードとプロジェクトファイルのコピーが含まれます。では--build-in-source、 AWS SAM CLI はソースフォルダに直接ビルドするため、ファイルを一時ディレクトリにコピーする必要がなくなるため、ビルドプロセスが高速化されます。

サポートされているランタイムとビルドメソッドのリストについては、「--build-in-source」を参照してください。

例 1。 .zip ファイルアーカイブ

以下の sam build コマンドは、.zip ファイルアーカイブを構築します。

# Build all functions and layers, and their dependencies sam build # Run the build process inside a Docker container that functions like a Lambda environment sam build --use-container # Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12 # Build and run your functions locally sam build && sam local invoke # For more options sam build --help

例 2: コンテナイメージ

以下のようになります AWS SAM テンプレートビルドをコンテナイメージとして作成します。

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

以下は、Dockerfile 例です。

FROM public.ecr.aws/lambda/python:3.12 COPY app.py requirements.txt ./ RUN python3.12 -m pip install -r requirements.txt # Overwrite the command by providing a different command directly in the template. CMD ["app.lambda_handler"]

例 3: npm ci

Node.js アプリケーションでは、npm installの代わりに、npm ciを使用して依存関係をインストールします。npm ci を使用するには、Lambda 関数の Metadata リソース属性の BuildProperties の下に UseNpmCi: True を指定します。npm ci を使用するには、アプリケーションは Lambda 関数の CodeUripackage-lock.json または npm-shrinkwrap.json ファイルが必要です。

次の例では、sam build を実行するときに、npm ci を使用して依存関係をインストールします。

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs20.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Metadata: BuildProperties: UseNpmCi: True

の外部での関数の構築 AWS SAM

デフォルトでは、 を実行するとsam build、 AWS SAM は、すべての関数リソースを構築します。その他のオプションには以下が含まれます。

  • の外部ですべての関数リソースを構築する AWS SAM – すべての関数リソースを手動で構築する場合、または別のツールを使用して構築する場合、 sam build は必要ありません。sam build をスキップして、ローカルテストの実行やアプリケーションのデプロイなど、プロセスの次のステップに進むことができます。

  • の外部で一部の関数リソースを構築する AWS SAM – 必要な場合 AWS SAM 関数リソースの一部を構築すると同時に、 の外部に他の関数リソースを構築するには AWS SAMでは、これを で指定できます。 AWS SAM テンプレート。

の外部で一部の関数リソースを構築する AWS SAM

を使用するには AWS SAM の使用時に関数をスキップしsam build、 で以下を設定します。 AWS SAM テンプレート:

  1. SkipBuild: True メタデータプロパティを関数に追加します。

  2. 構築した関数リソースへのパスを指定します。

TestFunction がスキップされるように設定した例を次に示します。構築されたリソースは built-resources/TestFunction.zip にあります。

TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True

ここで、 を実行するとsam build、 AWS SAM は以下を実行します。

  1. AWS SAM は、 で設定された関数をスキップしますSkipBuild: True

  2. AWS SAM は、他のすべての関数リソースをビルドし、.aws-samビルドディレクトリにキャッシュします。

  3. スキップされた関数の場合、.aws-sam ビルドディレクトリ内のテンプレートは、構築された関数リソースへの指定されたパスを参照するように自動的に更新されます。

    .aws-sam ビルドディレクトリの TestFunction についてキャッシュされたテンプレートの例を次に示します。

    TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: ../../built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True