

# AWS SAM を使用した C\$1 Lambda 関数のデプロイ
<a name="csharp-package-sam"></a>

AWS Serverless Application Model (AWS SAM) は、AWS のサーバーレスアプリケーションの構築と実行のプロセスを合理化するのに役立つツールキットです。YAML または JSON テンプレートでアプリケーションのリソースを定義し、AWS SAM コマンドラインインターフェイス (AWS SAM CLI) を使用して、アプリケーションを構築、パッケージ化、デプロイします。AWS SAM テンプレートから Lambda 関数を構築すると、AWS SAM は関数コードと指定した任意の依存関係を含む .zip デプロイパッケージまたはコンテナイメージを自動的に作成します。そして、AWS SAM は [CloudFormation スタック](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)を使用して関数をデプロイします。AWS SAM を使用して Lambda 関数を構築およびデプロイする方法の詳細については、「AWS Serverless Application Model 開発者ガイドの」の「[AWS SAM の開始方法](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html)」を参照してください。

以下の手順は、AWS SAM を使用してサンプルの .NET Hello World アプリケーションをダウンロード、構築、およびデプロイする方法を示しています。このサンプルアプリケーションは、Lambda 関数と Amazon API Gateway エンドポイントを使用して基本的な API バックエンドを実装します。API Gateway エンドポイントに HTTP GET リクエストを送信すると、API Gateway が Lambda 関数を呼び出します。この関数は、リクエストを処理する Lambda 関数インスタンスの IP アドレスと共に「hello world」メッセージを返します。

AWS SAM を使用してアプリケーションを構築し、デプロイする場合、AWS SAM CLI は背後で `dotnet lambda package` コマンドを使用して、個々の Lambda 関数コードバンドルをパッケージ化します。

## 前提条件
<a name="csharp-package-sam-prerequisites"></a>

**.NET 8 SDK**  
[.NET 8](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) SDK とランタイムをインストールします。

**AWS SAM CLI バージョン 1.39 以降**  
AWS SAM CLI の最新バージョンをインストールする方法については、「[AWS SAM CLI のインストール](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)」を参照してください。

## AWS SAM サンプルアプリケーションをデプロイする
<a name="csharp-package-sam-deploy"></a>

1. 次のコマンドを使用し、Hello World .NET テンプレートを使用して、アプリケーションを初期化します。

   ```
   sam init --app-template hello-world --name sam-app \
   --package-type Zip --runtime dotnet8
   ```

   このコマンドは、プロジェクトディレクトリに以下のファイルとディレクトリを作成します。

   ```
   └── sam-app
       ├── README.md
       ├── events
       │   └── event.json
       ├── omnisharp.json
       ├── samconfig.toml
       ├── src
       │   └── HelloWorld
       │       ├── Function.cs
       │       ├── HelloWorld.csproj
       │       └── aws-lambda-tools-defaults.json
       ├── template.yaml
       └── test
           └── HelloWorld.Test
               ├── FunctionTest.cs
               └── HelloWorld.Tests.csproj
   ```

1. `template.yaml file` が含まれるディレクトリに移動します。このファイルは、Lambda 関数や API Gateway API など、アプリケーションの AWS リソースを定義するテンプレートです。

   ```
   cd sam-app
   ```

1. アプリケーションのソースを構築するには、次のコマンドを実行します。

   ```
   sam build
   ```

1. AWS にアプリケーションをデプロイするには、次のコマンドを実行します。

   ```
   sam deploy --guided
   ```

   このコマンドは、次の一連のプロンプトを使用してアプリケーションをパッケージ化し、デプロイします。デフォルトのオプションを受け入れるには、[Enter] キーを押します。
**注記**  
**[HelloWorldFunction には権限が定義されていない場合がありますが、問題ありませんか?]** には、必ず `y` を入力してください。
   + **[スタック名]**: CloudFormation にデプロイするスタックの名前。この名前は AWS アカウントと AWS リージョンに対して一意である必要があります。
   + **[AWS リージョン]**: アプリをデプロイしたい AWS リージョン。
   + **[デプロイ前に変更を確認]**: [はい] を選択すると、AWS SAM がアプリケーションの変更をデプロイする前に、変更セットを手動でレビューできます。[いいえ] を選択すると、AWS SAM CLI はアプリケーションの変更を自動的にデプロイします。
   + **[SAM CLI の IAM ロールの作成を許可]**: この例の Hello World のものを含む、多くの AWS SAM テンプレートで AWS Identity and Access Management (IAM) ロールが作成され、Lambda 関数に他の AWS のサービスへのアクセス権限が付与されます。IAM ロールを作成または変更する CloudFormation スタックをデプロイする権限を付与するには、[はい] を選択します。
   + **[ロールバックを無効化]**: デフォルトでは、スタックの作成またはデプロイ中に AWS SAM でエラーが発生すると、スタックは以前のバージョンにロールバックされます。このデフォルトを受け入れるには [いいえ] を選択します。
   + **[HelloWorldFunction には権限が定義されていない場合がありますが、問題ありませんか?]**: [`y`] を入力します。
   + **[引数を samconfig.toml に保存]**: [はい] を選択して設定内容を保存します。今後は、パラメータなしで `sam deploy` を再実行して、アプリケーションに変更をデプロイできます。

1. アプリケーションのデプロイが完了すると、CLI は Hello World Lambda 関数の Amazon リソースネーム (ARN) と、その関数用に作成された IAM ロールを返します。API Gateway API のエンドポイントも表示されます。アプリケーションをテストするには、ブラウザでエンドポイントを開きます。次のようなレスポンスが表示されます。

   ```
   {"message":"hello world","location":"34.244.135.203"}
   ```

1. リソースを削除するには、次のコマンドを実行します。作成した API エンドポイントは、インターネット経由でアクセス可能なパブリックエンドポイントであることに注意してください。テスト後に、このエンドポイントを削除することを推奨します。

   ```
   sam delete
   ```

## 次のステップ
<a name="csharp-package-sam-next"></a>

AWS SAM を使用し、.NET を使用して Lambda 関数を構築し、デプロイする方法については、以下のリソースを参照してください。
+ [AWS Serverless Application Model (AWS SAM) 開発者ガイド](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)
+ [Building Serverless .NET Applications with AWS Lambda and the SAM CLI](https://aws.amazon.com/blogs/dotnet/building-serverless-net-applications-with-aws-lambda-and-the-sam-cli/)