AWS SAM(Serverless Application Model)とは
AWS SAM (Serverless Application Model) は、AWS上でサーバーレスアプリケーションを構築・管理するためのオープンソースのフレームワークである。CloudFormationの拡張として機能し、より簡潔な構文でLambda関数、API Gateway、DynamoDBなどのサーバーレスリソースを定義できる。また、ローカルでのテストやデプロイを支援するCLIツールも提供しており、サーバーレス開発の効率を大幅に向上させる。
なぜAWS SAMが必要なのか
従来のCloudFormationでもサーバーレスリソースの構築は可能であったが、各リソースの設定が詳細にわたるため、記述が冗長になりがちであった。例えば、Lambda関数を定義する場合、関数本体のコードだけでなく、実行ロール、ロググループ、イベントソースなどを個別に定義する必要があった。
AWS SAMは、このような複雑さを抽象化し、サーバーレスアプリケーションの構成要素をより直感的に記述できるようにする。これにより、開発者はインフラストラクチャの詳細に煩わされることなく、アプリケーションのビジネスロジックに集中できるようになる。
AWS SAMの主要な要素
-
SAMテンプレート:
- CloudFormationテンプレートの拡張であり、YAMLまたはJSON形式で記述される。
-
AWS::Serverless::Function
、AWS::Serverless::Api
、AWS::Serverless::SimpleTable
など、サーバーレスアプリケーションに特化した簡潔なリソースタイプを提供する。 -
Transform: AWS::Serverless-2016-10-31
をテンプレートのTransform
セクションに記述することで、SAMの構文が有効になる。
Transform: AWS::Serverless-2016-10-31 Description: A simple Lambda function Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: Handler: app.lambda_handler Runtime: python3.9 CodeUri: s3://your-bucket/your-code.zip MemorySize: 128 Timeout: 3 Events: MyApi: Type: Api Properties: Path: /hello Method: get
上記の例では、
AWS::Serverless::Function
リソースタイプを使用して、Lambda関数とそのトリガーとなるAPI Gatewayのエンドポイントを簡潔に定義している。 -
SAM CLI (Command Line Interface):
- SAMアプリケーションの開発、テスト、デプロイを支援するコマンドラインツールである。
-
sam build
: テンプレートに基づいて、Lambda関数の依存関係を解決し、デプロイ可能なパッケージを作成する。 -
sam local invoke
: ローカル環境でLambda関数をテスト実行できる。 -
sam local start-api
: ローカル環境でAPI Gatewayのエンドポイントを起動し、テストできる。 -
sam package
: デプロイに必要なテンプレートとアーティファクトをS3バケットにアップロードするための準備を行う。 -
sam deploy
: パッケージ化されたテンプレートを使用して、AWS上にサーバーレスアプリケーションをデプロイする。
AWS SAMのメリット
- 開発の簡素化: サーバーレスリソースの定義が簡潔になり、開発者はより少ないコードでインフラストラクチャを構築できる。
- 迅速なデプロイ: SAM CLIを活用することで、アプリケーションのパッケージングからデプロイまでのプロセスを効率化できる。
- ローカルテストの容易さ: SAM CLIのローカルテスト機能により、クラウドにデプロイする前にアプリケーションの動作を確認できる。
- ベストプラクティスの適用: SAMは、サーバーレスアプリケーションの構築における一般的なパターンやベストプラクティスを組み込んでいる。
- CloudFormationとの統合: SAMはCloudFormationの拡張であるため、CloudFormationの持つ柔軟性や信頼性をそのまま活用できる。
まとめ
AWS SAMは、サーバーレスアプリケーション開発をより効率的かつ快適にするための強力なツールである。簡潔なテンプレート構文と便利なCLIツールにより、開発者はインフラストラクチャの管理に時間を費やすことなく、アプリケーションの価値創造に集中できる。こ