見出し画像

AWS SAM CLI入門する

SAM CLI とはLambda や API Gateway, DynamoDBがセットになったサービスで、簡単にサーバーレスの環境が作れます

Node.jsが使えるので試してみました。他にもPythonやRuby、Go、Javaなどが使えるそうです

AWSの設定

まずIAMユーザー、IAMグループを作成しました。既に作成している方はスキップで◎

・AWSCloudFormationFullAccess
・IAMFullAccess
・AWSLambdaFullAccess
・AmazonAPIGatewayAdministrator

画像4

AWS CLIのインストールがまだの方はこちらから。バージョンが出ればインストールされています。

aws --version

SAMコマンドを実行するユーザーに、先程作成したIAMを設定します

aws configure

画像5

インストール(Macの場合)

下記を参考にHomebrewで入れてみる

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

途中で怒られて、指示のとおり下記も実行したら無事installできた

sudo chown -R $(whoami) /usr/local/share/man/man8
xcode-select --install

画像1

プロジェクト作成

sam init

sam initするといくつか質問されるので、下記のように回答

Which template source would you like to use?
	1 - AWS Quick Start Templates
	2 - Custom Template Location
Choice: 1
What package type would you like to use?
	1 - Zip (artifact is a zip uploaded to S3)
	2 - Image (artifact is an image uploaded to an ECR image repository)
Package type: 1

Which runtime would you like to use?
	1 - nodejs12.x
	2 - python3.8
	3 - ruby2.7
	4 - go1.x
	5 - java11
	6 - dotnetcore3.1
	7 - nodejs10.x
	8 - python3.7
	9 - python3.6
	10 - python2.7
	11 - ruby2.5
	12 - java8.al2
	13 - java8
	14 - dotnetcore2.1
Runtime: 1

Project name [sam-app]:

Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates

AWS quick start application templates:
	1 - Hello World Example
	2 - Step Functions Sample App (Stock Trader)
	3 - Quick Start: From Scratch
	4 - Quick Start: Scheduled Events
	5 - Quick Start: S3
	6 - Quick Start: SNS
	7 - Quick Start: SQS
	8 - Quick Start: Web Backend
Template selection: 1

するとアプリケーションの構成を作ってくれます

画像2

template.yaml AWSリソースを定義するテンプレート
hello-world/app.js Lambdaのロジックを書くjsファイル

実行してみる

ビルドすると「.aws-sam」ディレクトリが生成されます

sam build

画像3

sam local invoke

結果が帰ってきた!

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%

AWS Cloudにデプロイしてみる

このnote冒頭でaws configureで設定したIAMユーザーでデプロイがされます

sam deploy --guided

いくつか対話型で聞かれるので設定していきます

	Setting default arguments for 'sam deploy'
	=========================================
	Stack Name [sam-app]: my-sam-app
	AWS Region [us-east-1]:
	#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
	Confirm changes before deploy [y/N]: n
	#SAM needs permission to be able to create roles to connect to the resources in your template
	Allow SAM CLI IAM role creation [Y/n]:
	HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
	Save arguments to configuration file [Y/n]:
	SAM configuration file [samconfig.toml]:
	SAM configuration environment [default]:

samconfig.tomlが生成されるので、次回以降、設定を変えたければこのファイルを修正すれば◎

正常にデプロイされるとエンドポイントが生成されます

画像7

curlで確認してみます

curl https://<restapiid>.execute-api.us-east-1.amazonaws.com/Prod/hello/

画像6

無事返ってきました🎉 これで実行中の Lambda 関数が呼び出されている事が確認できました

ローカルで動かしたい

開発中はローカルで動かしたいと思います。

sam local start-api

これでローカルサーバーが立ち上がります

Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]

試しにローカルファイルを編集して「hello worlld」を「good night」に変更してみました

画像8

反映確認🙌
Docker イメージが読み込まれるまでに時間がかかる場合があるそうです

サンプルプロジェクトを破棄する

最後は余計なお金がかからないよう破棄しましょう

aws cloudformation delete-stack --stack-name sam-app --region region

参考

---------------------


スキ頂けると嬉しいです〜