2021/03/10

AWS SAMとは?SAMのメリットやSAMを使ったLambda関数の起動方法を紹介

 
  

AWS SAMとは?


AWS SAM(以下SAM)は「Lambdaの関数を開発するための便利ツール」と考えておけば良いです。

SAMは正式名称をServerless Application Modelと言い(以下SAM)、”サーバーレスアプリケーション構築用のオープンソースフレームワーク”が公式の定義です。

AWSでサーバーレスのマネージドサービスと言えばAWS Lambdaを思い浮かべる方が多いと思いますが、まさにそのLambdaの関数をローカルで開発するために最適なツールです。

SAMのメリットは?

Lambda関数実装時の開発の手間を大幅に削減することができます。

Lambdaの関数を実際にAWS上でデプロイしなくても、ローカルの開発マシンでLambdaの動きを再現することが可能です。Lambdaに与えられるパラメータもjson形式で定義しておくことができるので、開発時にわざわざLambdaをデプロイして、テスト実行する、という手間を省くことができるのです。

どんな時にSAMを使ったらよいのか?

Lambdaを実装する場合には基本的には利用することが推奨されています。

多くの開発者がLambdaの関数を実装する場合はSAMを使って雛形を作ります。

非常に便利なフレームワークなので、どんなに簡易なLambda関数を実装する場合でもSAMを利用することが推奨されています。また、Lambdaが対応している言語はSAMでも対応しています。どの言語で実装する場合もSAMの利用することができます。

SAMを使ったLambda関数の起動方法

ここからはSAMを使ったLambda関数の起動方法を紹介します。
以下4つの手順になります。

・事前準備
・SAMのサンプルアプリケーションの作成
・イベントの作成
・フォルダ構成の説明

SAMを使ったLambda関数の起動方法について興味がある方は是非ご覧ください。

事前準備

1. AWSアカウントの作成
AWSのアカウントを作成して、AWSCloudFormationFullAccess, IAMFullAccess, AWSLambdaFullAccess, AmazonAPIGatewayAdministratorのロールが付与されたユーザーを作成してください。

2. 認証情報をローカルのコンフィグファイルに記載
AWSのIAMのコンソールから取得したAPIキーとシークレットを以下のファイルに転記します。(以下のxxxxxxの部分に取得した値を転記します。)

ーーーーーーーーーーーーーーーー
$ vi ~/.aws/credentials

[default]
aws_access_key_id = xxxxxxxxx
aws_secret_access_key = xxxxxxxxx
ーーーーーーーーーーーーーーーー

SAMを使ってLambdaを実行する場合は上記の認証情報を使います。

3. dockerのインストール
SAMはコンテナ上で動作しますのでdockerのインストールが必要です。
以下のサイトからインストールファイルを取得して、インストールしてください。

https://docs.docker.com/docker-for-mac/install/

4. AWS SAM CLI のインストール
コマンドでSAMを利用できるようにインストールが必要です。
以下のコマンドインストールしてください。

ーーーーーーーーーーーーーーーー
$ brew tap aws/tap
$ brew install aws-sam-cli
ーーーーーーーーーーーーーーーー

以下のコマンドを打ってバージョンが表示されればインストールが完了したことが確認できます。
ーーーーーーーーーーーーーーーー
$ sam –version
ーーーーーーーーーーーーーーーー

5. Go言語のインストール
本サンプルではGoを採用しますので、以下のコマンドでインストールしてください。

ーーーーーーーーーーーーーーーー
$ brew install go
ーーーーーーーーーーーーーーーー

以下のコマンドを実行してバージョンが表示されればインストールが完了したことが確認できます。

ーーーーーーーーーーーーーーーー
$ go version
ーーーーーーーーーーーーーーーー

SAMのサンプルアプリケーションの作成

上記の事前準備が完了したら、SAMのサンプルアプリケーションを作成します。

以下のコマンドを実行してください。

以下の”sam-sample-application”は作成するアプリケーション名ですので、自由に変更していただいて構いません。本記事では”sam-sample-application”という名称で作成されたものとして解説を進めます。

ーーーーーーーーーーーーーーーー
$ sam init –runtime go1.x –name sam-sample-application
ーーーーーーーーーーーーーーーー

その後、テンプレートに関する質問が表示されますが、1と入力してください。

ーーーーーーーーーーーーーーーー
Which template source would you like to use?
1 – AWS Quick Start Templates
2 – Custom Template Location
Choice: 1
ーーーーーーーーーーーーーーーー

その後、また質問が表示されますが、1を選択します。

ーーーーーーーーーーーーーーーー
AWS quick start application templates:
1 – Hello World Example
2 – Step Functions Sample App (Stock Trader)
Template selection: 1
ーーーーーーーーーーーーーーーー

作業していたディレクトリに”sam-sample-application”というフォルダが作成されていることが確認できるはずです。

雛形の作成は完了です。

イベントの作成

Lambdaはなんらかのイベント(Cloud Watch Events, S3 Event等)をトリガーにして起動します。その際に与えられるパラメータを定義できます。これは開発中の動作確認の際に使用されるものです。

以下のコマンドを実行してください。

ーーーーーーーーーーーーーーーー
$ cd sam-sample-application
$ sam local generate-event cloudwatch logs > event.json
ーーーーーーーーーーーーーーーー

今回はCloud Watch Eventsによって発生するパラメータをevent.jsonというファイルにまとめました。

もちろんCloud Watch Events以外をトリガーすることもできます。以下のコマンドでどのようなイベントがシミュレーションできるかが確認できます。

ーーーーーーーーーーーーーーーー
$ sam local generate-event –help
ーーーーーーーーーーーーーーーー

フォルダ構成の説明

作成された雛形アプリは以下のような構成になっているかと思います。

sam-sample-application
├── event.json
├── hello-world
│ ├── go.mod
│ ├── main.go
│ └── main_test.go
├── Makefile
├── README.md
└── template.yaml

event.json・・・Lambda起動時に与えられるパラメータが格納されています。
main.go・・・実際のイベントを処理するハンドラーです。
Makefile・・・ビルド用のファイルです。

SAMを使ってローカルでLambdaを起動する


以下のコマンドを実行して、ビルドを行ってください。
このビルドはあくまでローカルで実行するためのファイルを作成するためのビルドです。

ーーーーーーーーーーーーーーーー
$ make build
ーーーーーーーーーーーーーーーー

その後、以下のコマンドを実行するとLambdaが起動します。

ーーーーーーーーーーーーーーーー
$ sam local invoke HelloWorldFunction –event event.json
ーーーーーーーーーーーーーーーー

以下のような文言が表示されるかと思います。
statusCodeが200となっていれば正しく実行できています。

{“statusCode”:200,”headers”:null,”multiValueHeaders”:null,”body”:”Hello, 100.100.10.10\n”}

これでサンプルアプリケーションの実行は完了です。

まとめ

今回は、Lambda関数の開発を効率化するSAMの紹介を行いました。
また、実際にSAMを使ってローカルでLambdaを起動するところまでを解説を行いました。

作成されたサンプルアプリケーションでは、簡潔な内容を表示するだけのシンプルなアプリですので、是非ハンドラーであるman.goを修正して、ご自身のオリジナルのLambda関数を実装してみてください。

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

この記事の監修者・著者

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

おすすめの動画

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

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

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