

# Lambda と Infrastructure as code (IaC) の使用
<a name="foundation-iac"></a>

Lambda 関数が単独で実行されることはまれです。代わりに、多くの場合、データベース、キュー、ストレージなどの他のリソースと共に、サーバーレスアプリケーションの一部を形成します。[Infrastructure as Code (IaC)](https://aws.amazon.com/what-is/iac/) を使用すると、デプロイプロセスを自動化して、多数の個別の AWS リソースを含むサーバーレスアプリケーション全体を迅速かつ繰り返しデプロイおよび更新できます。このアプローチにより、開発サイクルが短縮され、構成管理が容易になり、リソースを毎回同じ方法でデプロイできるようになります。

## Lambda 用 IaC ツール
<a name="foundation-iac-tools"></a>

**CloudFormation**  
CloudFormation は、AWS の基本的な IaC サービスです。[YAML または JSON テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)を使用して、Lambda 関数を含む AWS インフラストラクチャ全体をモデル化およびプロビジョニングできます。CloudFormation は、AWS リソースの作成、更新、削除の複雑さを処理します。

**AWS Serverless Application Model (AWS SAM)**  
AWS SAM は、CloudFormation 上に構築されたオープンソースフレームワークです。サーバーレスアプリケーションを定義するためのシンプルな構文を提供します。[AWS SAM テンプレート](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy.html)を使用すると、数行の YAML で Lambda 関数、API、データベース、イベントソースをすばやくプロビジョニングできます。

**AWS Cloud Development Kit (AWS CDK)**  
CDK は IaC に対するコードファーストアプローチです。Lambda ベースのアーキテクチャは、TypeScript、JavaScript、Python、Java、C\#/.Net、または Go を使用して定義できます。希望する言語を選択し、パラメータ、条件、ループ、構成、継承などのプログラミング要素を使用して、インフラストラクチャの望ましい結果を定義します。次に、CDK はデプロイ用の基盤となる CloudFormation テンプレートを生成します。CDK で Lambda を使用する方法の例については、「[AWS CDK を使用した Lambda 関数のデプロイ](lambda-cdk-tutorial.md)」を参照してください。

![AWS SAM と AWS CDK が CloudFormation を使用して AWS リソースとコードをデプロイする方法を示す図](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/IaC_tools.png)


また、AWS ではシンプルなグラフィカルインターフェイスを使用して IaC テンプレートを開発する、AWS Infrastructure Composer というサービスも提供しています。Infrastructure Composer では、ビジュアルキャンバスで AWS のサービス をドラッグ、グループ化、接続することでアプリケーションアーキテクチャを設計します。次に、Infrastructure Composer は、アプリケーションのデプロイに使用できるデザインで AWS SAM または CloudFormation テンプレートを作成します。

以下の「[AWS SAM と Infrastructure Composer での Lambda 関数の使用](foundation-iac-getting-started.md)」セクションでは、Infrastructure Composer を使用して、既存の Lambda 関数に基づくサーバーレスアプリケーションのテンプレートを作成します。