2021/05/26

「AWS SAM Local」とは?その概要と利用方法について解説!

 
  

「AWS SAM Local」とは?


「AWS SAM Local」とは、「AWS SAM(※後述します)」で作成したアプリケーションをローカルPC上で実行し、開発とテストを迅速に行えるサービスです。

「AWS SAM Local」の概要や「AWS SAM」等の関連知識について解説していきます。

「AWS SAM Local」のメリットとは?

「AWS SAM Local」のメリットとして、AWSクラウド上へデプロイする前に、ローカルPC上でテストを実行できることが挙げられます。

具体的には、「AWS Lambda関数」のテスト実施、「Amazon S3」、「Amazon DynamoDB」、「Amazon Kinesis」、「Amazon SNS」等のAPIコールのエミュレーションテストの実施、ローカルPCで「Amazon API Gateway」を起動してのホットリロード(※コードを変更した際に手動でリロードせずに、自動的にリロードされる機能)による開発とテスト実施、「AWS Lambda関数」のインタラクティブなデバッグ実施、等があります。

「AWS SAM」とは?


「AWS SAM」とは、「AWS Serverless Application Model」の略で、AWSが公式に提供している「サーバーレスアプリケーション」を構築するためのフレームワーク です。

サーバーレスアプリケーションを構築するために必要な「AWS Lambda」、「Amazon API Gateway」、「Amazon DynamoDB」等のAWS上のリソースを一括して管理(作成、更新、削除)することが可能です。

ちなみに「AWS SAM」は、2015年5月に開催された「Serverless Conf」にて「Tim Wagner」から発表され、「Flourish」というサービス名で知られていました。そして、翌年の「re:Invent 2016」の直前に正式にリリースされています。

「AWS SAM」の特徴とは?

「AWS SAM」の特徴としては、「Infrastructure as Code」を実現するプロビジョニングサービスの「AWS CloudFormation」のサーバーレス版という点です。

具体的には、「AWS SAM」の各リソースは 「AWS CloudFormation」のリソース定義と類似のフォーマットで定義されています。

このフォーマットで作成された「テンプレート」を 「AWS CloudFormation」に入力することで「スタック」としてAWSクラウド上に展開することが可能です。

「AWS SAM」のテンプレートに記載方法について

「AWS SAM」のテンプレートに記載方法については、「YAML」形式もしくは「JSON」形式で記述します。

具体的には、以下のようなテンプレートを記述します。


AWSTemplateFormatVersion: '2021-04-01'
Transform: AWS::Serverless-2021-04-01
Resources:
FunctionName:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs5.0

「Transform: AWS::Serverless-2021-04-01」の記載により、「AWS CloudFormation」は「AWS SAM フォーマット」のテンプレートと判断しています。

「AWS SAM Local」の利用方法について


「AWS SAM Local」の利用方法について解説します。

概要としては、「AWS Lambda関数」と「AWS SAM テンプレート」を含むディレクトリにて、以下のコマンドを実行します。

sam local start-api

この結果として、すべての関数をホストする「ローカルHTTP サーバー」が起動し、ブラウザやCLIでアクセスすると、「Dockerコンテナ」をローカルで起動してこれらの関数をコールします。

それでは、具体的な手順を解説していきます。

Dockerをインストールする

最初に、「AWS SAM Local」で使用する「Docker」をローカルPCにインストールします。

具体的には、Windowsの場合は「Docker Toolbox」、macOSの場合は「Docker for Mac」、Linuxの場合は「yum install docker」で確認します。

「AWS SAM Local」をインストールする

次に、「AWS SAM Local」をローカルPC上にインストールします。

具体的には、NPM(※「Node Package Manager」の略で、パッケージ管理ツール)を利用して、以下のコマンドでインストールを実行します。

$ npm install -g aws-sam-local
local$ sam --version
2021/04/01 00:00:00 0.1.0
sam version 0.2.0

「AWS Lambda関数」をローカルで実行する

ここまでで必要な環境が構築できたので、「AWS Lambda関数」をローカルPC上で実行してみましょう。

Docker上で動作するので、エミュレーションによる実行テストではなく、AWS上の「AWS Lambda」の実行環境としてテストを実施できます。

こちらのテストでは、3つのファイルを準備します(※後述します)。

「AWS SAM Local」のテストファイル1:AWS Lambda関数

「AWS SAM Local」のテストファイル1として、「AWS Lambda関数」のコードを記述したファイル(index.js)を作成します。

具体的には、以下の内容になります。

'use strict';
console.log('Loading Lambda function');
exports.handler = (event, context, callback) => {
    callback(null, {
        statusCode: 200,
        headers: { "x-custom-header" : "GGMedia Custom Header Value" },
        body: "Hello " + event.body
    });
}

「AWS SAM Local」のテストファイル2:SAMテンプレート

「AWS SAM Local」のテストファイル2として、SAMのテンプレートファイル(template.yaml)を作成します。

具体的には、以下の内容のファイルになります。

AWSTemplateFormatVersion: '2021-04-01'
Transform: AWS::Serverless-2021-04-01
Description: Simple CRUD Webservices. State is stored in DynamoDB resource.
Resources:
  HelloWorld:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs5.0
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /resource/{resourceId}
            Method: put

「AWS SAM Local」のテストファイル3:JSONイベント

「AWS SAM Local」のテストファイル3として、JSONイベントのファイル(event.json)を作成します。

具体的には、以下の内容になります。

{"body": "GG Media"}

「AWS SAM Local」のテスト実行

必要なテストファイルが作成できたので、「AWS SAM Local」のテストを実行してみます。

具体的には、以下のコマンドを実行します。

$ sam local invoke HelloWorld -e event.json

実行の結果として、Dockerイメージがダウンロードされて、「AWS Lambda関数」が実行されます。

「AWS SAM Local」から「AWS SAM CLI」への移行


2020年7月、「AWS SAM CLI」の一般への提供が開始され、「AWS SAM Local」から「AWS SAM CLI」への移行が始まりました。

この「AWS SAM CLI」では、「sam init」、「sam build」、「sam deploy」等の新規のコマンドが追加されることで、サーバーレスアプリケーションをより簡単に構築できるようになりました。

移行期間なので従来のリソースも活用しながら、こちらの後継のサービスを利用して、サーバーレスアプリケーションの開発効率化を目指してみてはいかがでしょうか?

出典:AWS サーバーレスアプリケーションモデル (SAM) CLI が一般提供を開始し、本番環境で利用可能に|AWS公式サイト
参照:https://aws.amazon.com/jp/about-aws/whats-new/2020/07/announcing-aws-serverless-application-model-cli-generally-available-production-use/

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】