AWS SAMとは?CloudFormationとの違いを徹底解説

スポンサーリンク
Devloper
スポンサーリンク

はじめに

AWSのサーバーレスアプリケーションを管理・デプロイする際に利用する 「AWS SAM」 について、CloudFormationとの違いに焦点を当てながら、わかりやすく説明していきます。

「AWS SAMって何ができるの?」 「CloudFormationと何が違うの?」 という疑問をお持ちの方に役立つ内容です。

AWS SAMとは?

AWS SAM(Serverless Application Model) は、サーバーレスアプリケーションを管理・デプロイするためのAWS提供のフレームワークです。

サーバーレス環境では、複数のAWSリソース(例えば、Lambda、API Gateway、DynamoDBなど)を使ってアプリケーションを構築しますが、これを手動で設定するのは大変です。

AWS SAMは、これらの設定を1つのテンプレートにまとめ、簡単に管理できるようにします。

SAMは、基本的にはAWSの CloudFormation に依存しており、SAMテンプレートを使用して作成されたリソースは、最終的にはCloudFormationを通じてデプロイされます。

しかし、SAMはサーバーレスに特化しているため、CloudFormationよりもシンプルにリソースを定義することができます。

SAMの特徴

まずは、AWS SAMの主な特徴を紹介します。

  1. テンプレートの簡素化
    通常のCloudFormationテンプレートでは、リソースを詳細に定義する必要がありますが、SAMを使うとテンプレートの記述が簡略化されます。
    例えば、Lambda関数を定義する際、SAMではわずか数行でリソースを作成できます。
    例:Lambda関数の定義
  • CloudFormationの例:
{
  "Resources": {
    "MyServerlessFunctionLogicalID": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "index.handler",
        "Code": {
          "S3Bucket": "amzn-s3-demo-bucket",
          "S3Key": "MySourceCode.zip"
        },
        "Role": {
          "Fn::GetAtt": ["FunctionNameRole", "Arn"]
        },
        "Runtime": "nodejs20.x"
      }
    },
    "FunctionNameRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [{
            "Action": ["sts:AssumeRole"],
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            }
          }]
        }
      }
    }
  }
}
  • SAMの例:
Transform: AWS::Serverless-2016-10-31
Resources:
  MyServerlessFunctionLogicalID:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs20.x
      CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'

SAMでは、CloudFormationよりも少ない記述量で同じリソースを定義でき、開発の負担が軽減されます。

  1. 統合されたサーバーレスリソースのサポート
    SAMは、LambdaやAPI Gateway、DynamoDBといったサーバーレスアーキテクチャに必要なリソースを簡単に連携させるために最適化されています。
    API GatewayとLambdaの連携もシンプルに記述できます。
  2. ローカルでの開発とデバッグ
    SAM CLIを使用することで、Lambda関数やAPI Gatewayのローカルエミュレーションが可能です。
    これにより、AWSにデプロイする前にローカルでテストやデバッグができ、開発サイクルを効率化できます。
  3. デプロイの簡素化
    SAMを使うと、sam deploy コマンドを使って簡単にリソースをデプロイできます。
    手動でS3にコードをアップロードしたり、複雑なCloudFormationコマンドを実行する必要がありません。

CloudFormationとの違い

SAMとCloudFormationの違いを整理すると、次のような点が挙げられます。

  1. テンプレートのシンプルさ
    CloudFormationはすべてのAWSリソースを詳細に定義する必要がありますが、SAMはサーバーレスリソースに特化しているため、より簡潔にテンプレートが書けます。
    複数のリソースを連携させる際も、SAMでは自動的に関連付けが行われるため、設定ミスのリスクも減少します。
  2. ローカルデバッグのサポート
    SAMは、サーバーレスアプリケーションのローカルテストやデバッグ機能を提供していますが、CloudFormation自体にはこのようなローカルテスト機能がありません。
    ローカルでのテストが必要な場合、SAMを使用することで効率的な開発が可能です。
  3. デプロイの効率性
    SAMでは、リソースのビルド、パッケージング、デプロイが統合されており、ワンコマンドで簡単に行えます。
    CloudFormationでは、これらのステップを手動で管理する必要があります。

AWS資格試験対策としてのSAM

AWSの資格試験では、サーバーレスアーキテクチャに関する問題が出題されることが多くあります。
その際、AWS SAMの概念や使い方を理解していると、サーバーレスリソースの管理方法やデプロイの流れがスムーズに理解できるでしょう。
特に、API GatewayとLambdaの統合やデプロイ手順を押さえておくことが重要です。

まとめ

AWS SAMは、サーバーレスアプリケーションのデプロイをシンプルにし、開発の効率を高める強力なツールです。
CloudFormationとの違いを理解することで、より効果的にAWSのサーバーレスリソースを管理できるようになります。
資格試験対策としても、SAMを実際に使ってみることで、サーバーレスアプリケーションに関する出題にも対応しやすくなるでしょう。

参考

AWSのドキュメントやブログ記事を参考にしつつ、私自身が勉強した内容をもとにこのまとめを作成しました。より詳細な情報を知りたい方は、以下のリンクもご参考ください。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

徹底攻略AWS認定デベロッパー – アソシエイト教科書&問題集 第2版 [DVA…
価格:3,960円(税込、送料無料) (2024/9/28時点)

楽天で購入

 

 

タイトルとURLをコピーしました