はじめに
AWSのSAMを使うとlambda関数の開発がかなり楽になることを知りました。
本記事ではそんなsamのインストールからデモアプリのデプロイまでをまとめてみました。
AWS SAMとは
SAMとは(Serverless Application Model)の略です。AWSのサーバーレスサービス、Lambdaの関数をローカルで開発する際に非常に便利なサービスとなっています。
SAMを用いるメリット
SAMを用いてLambda関数を開発すると以下のような利点があります。
- ローカルのエディタを用いてLambda関数のコーディングが可能
- ローカル上でLambda関数に似た実行環境を用意できるためテストが簡単
- pythonのパッケージを用いる場合zipファイルなどにまとめレイヤー分けをする必要がなくなる
使ってみる
準備
前提
本記事はarm系cpuの搭載されたmacOSでまとめています。
$ sw_vers
ProductName: macOS
ProductVersion: 12.5
$ uname -m
arm64
本記事では以下のコマンドは使える前提となっていますので、未インストールの場合はインストールを行うことを推奨します。
brew
Docker
-
python3
<- 本記事ではpythonですが、好きな言語を使ってください
本記事執筆時には以下のようなバージョンを使っています。
$ brew -v
Homebrew 3.5.9
$ Docker -v
Docker version 20.10.17, build 100c701
$ python3 -V
Python 3.10.6
SAM CLIインストール
基本的にはaws公式の手順を追ってインストールを行います。windowsのインストール方法も公式にあるのでwindowsを使っている方はそちらを参考にしてください。
$ brew tap aws/tap
$ brew install aws-sam-cli
インストールが完了したら、以下のコマンドでsamコマンドが入っているかを確認します。
$ sam --version
SAM CLI, version 1.55.0
認証設定
普段、aws-vaultを使っているのでその設定を行います。
aws-vaultを使わない認証方法については公式ドキュメントに記載があります。
また、aws-vaultのインストールや設定については別の記事で紹介しているのでそちらを参照ください。
.aws
配下のconfig
ファイルを以下のように編集します。
[default]
region = ap-northeast-1
credential_process = aws-vault exec --json default
[profile <profile_name>]
role_arn=arn:aws:iam::<account_id>:role/<role_name>
role_session_name=<iam_user_name>
mfa_serial=arn:aws:iam::<account_id>:mfa/<iam_user_name>
region=ap-northeast-1
不安な方は以下のコマンドでs3バケットのリストが返ることを確認してください。
$ aws-vault exec <profile_name> -- aws s3 ls
aws-vaultを通して実行されるコマンドで権限が足りない場合は、iam_userではなく、roleに権限を付与してください。
デプロイしてみる
任意のディレクトリで以下のコマンドをうち、初期化を行います。今回はデモとして以下ような設定で初期化しました。
$ sam init
...
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Multi-step workflow
3 - Serverless API
4 - Scheduled task
5 - Standalone function
6 - Data processing
7 - Infrastructure event management
8 - Lambda EFS example
9 - Machine Learning
Template: 1
Use the most popular runtime and package type? (Python and zip) [y/N]: y
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: y
X-Ray will incur an additional cost. View https://aws.amazon.com/xray/pricing/ for more details
Project name [sam-app]:
上記が成功したら、sam-app
ディレクトリの中でビルドし、実際にデプロイしてみましょう。
$ cd sam-app
$ sam build
ビルドが正常に行われたら、デプロイをやってみます。今回はテストなのですべてyesを選んでデプロイしてみます。
$ aws-vault exec {profile名} -- sam deploy --guided
...
Stack Name [sam-app]:
AWS Region [ap-northeast-1]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [Y/n]: Y
#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]: Y
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [Y/n]: Y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: Y
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]:
最後にSuccessfully created/updated stack - sam-app in ap-northeast-1
と返ってくればデプロイ成功です。
初期の権限ではデプロイができない可能性があるので、Role関係のエラーが出た場合は足りない権限をiam_userではなく、ロールに付与してください。
最後にawsコンソールでsam-appがあることを確認もできます。