AWSエンジニアのためのブログメディア

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
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関数を実装してみてください。
Search キーワード検索
Popular 人気の記事
-
AWSの平均年収12選|AWSの人気が高い理由3選なども紹介
2021年01月05日 -
AWS EBSとは?8つの特徴とEBSボリュームについても解説
2020年10月14日 -
AWSへの転職が難しいといわれる5つの理由|求められる経験やスキルを紹介!
2021年03月31日 -
AWS Cloud9の利用料金はかかるの?利用手順6つやメリット解説
2020年11月16日 -
AWS アクセスキーとは?AWS アクセスキーの作り方や使い方を紹介!
2021年01月22日
reccomended おすすめ記事
-
【AWS入門編】AWSとは|サービス概要や特徴・おすすめ参考書4つ
2020年10月14日 -
AWSエンジニアにおすすめの開発手法DevOps。今後の求人は増える?
2020年10月14日 -
AWSを使ってWebサイトを構築しよう!おすすめサービス6つと選び方
2020年10月14日 -
AWSエンジニアの将来性は?年収と必要なスキル6つをご紹介!
2020年10月14日 -
【初心者向け】AWSの代表的なサービス10選|AWSを活用する利便性5選
2020年10月07日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
通信キャリア向け基盤構築/東京都渋谷区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/在宅ワーク
月給65万~65万円東京都渋谷区(神泉駅) -
各種対応/東京都新宿区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給60万~60万円東京都新宿区(高田馬場駅) -
要件定義、構築/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給60万~60万円東京都千代田区(飯田橋駅) -
運用構築/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給56万~56万円東京都千代田区(飯田橋駅) -
監視システムの保守、更改/東京都千代田区/【WEB面談可/インフラ業界経験者/AWSソリューションアーキテクト/AWS経験者活躍中】/テレワーク
月給55万~55万円東京都千代田区(神保町駅)