翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用したデフォルトのビルド AWS SAM
サーバーレスアプリケーションを構築するには、sam build コマンドを使用します。このコマンドは、アプリケーションの依存関係のビルドアーティファクトも収集して、ローカルでのテスト、パッケージ化、およびデプロイなどの次のステップのために、それらを適切な形式と場所に設定します。
アプリケーションの依存関係は、マニフェストファイル (requirements.txt (Python) または package.json (Node.js) など) で指定するか、関数リソースの Layers プロパティを使用して指定します。Layers プロパティには、Lambda 関数が依存する AWS Lambda レイヤーリソースのリストが含まれています。
アプリケーションのビルドアーティファクトの形式は、各関数の PackageType プロパティに応じて異なります。このプロパティのオプションには次のものがあります。
-
Zip- アプリケーションコードとその依存関係が含まれる .zip ファイルアーカイブ。コードを .zip ファイルアーカイブとしてパッケージ化する場合は、関数の Lambda ランタイムを指定する必要があります。 -
Image- アプリケーションコードとその依存関係に加えて、ベースオペレーティングシステム、ランタイム、および拡張機能が含まれているコンテナイメージ。
Lambda パッケージタイプに関する詳細については、AWS Lambda デベロッパーガイドの「Lambda デプロイパッケージ」を参照してください。
.zip ファイルアーカイブの構築
サーバーレスアプリケーションを.zip ファイルアーカイブとして構築するには、サーバーレス関数に PackageType:
Zip を宣言します。
AWS SAM は、指定したアーキテクチャ用にアプリケーションを構築します。アーキテクチャを指定しない場合、 x86_64 はデフォルトで AWS SAM を使用します。
ネイティブにコンパイルされたプログラムが含まれるパッケージに Lambda 関数が依存する場合は、--use-container フラグを使用します。このフラグは、Lambda 環境のように動作するコンテナで関数をローカルにコンパイルするため、 AWS クラウドにデプロイするときに適切な形式になります。
--use-container オプションを使用すると、 はデフォルトで Amazon ECR Public からコンテナイメージを AWS SAM プルします。別のリポジトリまたは特定のバージョンの CLI AWS SAM からコンテナイメージをプルする場合は、 --build-imageオプションを使用して代替コンテナイメージの URI を指定できます。以下は、特定のバージョンの CLI のコンテナイメージを使用してアプリケーションを構築するための 2 AWS SAM つのコマンドの例です。
# Build a Node.js 20 application using a container image for a specific version of AWS SAM CLI (1.136.0) sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0 # Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)( sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0
.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 for a specific version of AWS SAM CLI (1.136.0) sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0 # Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)( sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0 # 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 関数の CodeUri に package-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
Python 親パッケージ
Python アプリケーションでは、ビルドプロセス中にパッケージ構造を保持して、絶対インポートを有効にできます。パッケージ構造を保持するには、Lambda 関数のMetadataリソース属性BuildPropertiesで parent_python_packagesに を指定します。
次の例では、 を実行するときにappパッケージ構造を保持しますsam build。
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.main.handler Runtime: python3.12 Architectures: - x86_64 Metadata: BuildProperties: parent_python_packages: app
この設定では、コードは のような相対インポートfrom app.utils import loggerではなく、 のような絶対インポートを使用できますfrom .utils import logger。
の外部で関数を構築する 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 テンプレートで以下を設定します。
-
SkipBuild: Trueメタデータプロパティを関数に追加します。 -
構築した関数リソースへのパスを指定します。
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 は以下を実行します。
-
AWS SAM は、 で設定された関数をスキップします
SkipBuild: True。 -
AWS SAM は、他のすべての関数リソースをビルドし、
.aws-samビルドディレクトリにキャッシュします。 -
スキップされた関数の場合、
.aws-samビルドディレクトリ内のテンプレートは、構築された関数リソースへの指定されたパスを参照するように自動的に更新されます。.aws-samビルドディレクトリのTestFunctionについてキャッシュされたテンプレートの例を次に示します。TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: ../../built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True