AWS SAM CLI入門する
SAM CLI とはLambda や API Gateway, DynamoDBがセットになったサービスで、簡単にサーバーレスの環境が作れます
Node.jsが使えるので試してみました。他にもPythonやRuby、Go、Javaなどが使えるそうです
AWSの設定
まずIAMユーザー、IAMグループを作成しました。既に作成している方はスキップで◎
・AWSCloudFormationFullAccess
・IAMFullAccess
・AWSLambdaFullAccess
・AmazonAPIGatewayAdministrator
AWS CLIのインストールがまだの方はこちらから。バージョンが出ればインストールされています。
aws --version
SAMコマンドを実行するユーザーに、先程作成したIAMを設定します
aws configure
インストール(Macの場合)
下記を参考にHomebrewで入れてみる
brew tap aws/tap
brew install aws-sam-cli
途中で怒られて、指示のとおり下記も実行したら無事installできた
sudo chown -R $(whoami) /usr/local/share/man/man8
xcode-select --install
プロジェクト作成
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
するとアプリケーションの構成を作ってくれます
template.yaml AWSリソースを定義するテンプレート
hello-world/app.js Lambdaのロジックを書くjsファイル
実行してみる
ビルドすると「.aws-sam」ディレクトリが生成されます
sam build
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が生成されるので、次回以降、設定を変えたければこのファイルを修正すれば◎
正常にデプロイされるとエンドポイントが生成されます
curlで確認してみます
curl https://<restapiid>.execute-api.us-east-1.amazonaws.com/Prod/hello/
無事返ってきました🎉 これで実行中の Lambda 関数が呼び出されている事が確認できました
ローカルで動かしたい
開発中はローカルで動かしたいと思います。
sam local start-api
これでローカルサーバーが立ち上がります
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
試しにローカルファイルを編集して「hello worlld」を「good night」に変更してみました
反映確認🙌
Docker イメージが読み込まれるまでに時間がかかる場合があるそうです
サンプルプロジェクトを破棄する
最後は余計なお金がかからないよう破棄しましょう
aws cloudformation delete-stack --stack-name sam-app --region region
参考
---------------------
スキ頂けると嬉しいです〜