こんにちは、サーバーワークス菅谷です。
備忘録として、Amazon Linux 2にServerless Frameworkの環境を構築して、Lambdaを構築してみます。
使用する言語はPython2です。
記事目安 - 15分~20分
事前知識
Serverless Framework
オープンソースのサーバレスアプリケーション構成管理ツール。
AWS, Azure, GCPなど、様々なパブリッククラウドプロバイダーにサーバレスアプリケーションをデプロイできます。
ゴール
構成図のイメージです。
今回は大きく2つのことを行います。
- Amazon Linux 2環境にServerless Frameworkを構築する
- Serverless Frameworkを利用して、Lambdaをデプロイする
Serverless Frameworkではローカル環境でテストができるので、今回はそちらも試してみましょう。
作業
Serverless Frameworkの準備
NW環境の構築
Serverless FrameworkのNW環境を作りましょう。
以下URLのテンプレートをCloudFormationで流して、VPCとPublicSubnetを作成してください。
スタック名は serverless-handson-vpc-YYYYMMDD (*1)でお願いします。
*1) YYYYMMDDは本日の日付に置き換えてください。
CloudFormationへの流し方がわからない方は以下の記事を参考にしていただけると。
【初心者向け】VPC+PublicSubnetをCloudFormationを使って構築する 後編
IAM Roleの構築
Serverless Frameworkはリソースのデプロイを行います。
ゆえに様々なリソースに対して権限が必要です。
ということで、IAM Roleを作成します。
本当はよくないのですが、すぐ消す環境なので AdministratorAccess で作成します。
以下URLのテンプレートをスタック名 serverless-handson-iam-role-YYYYMMDD で流してください。
EC2の構築
Serverless FrameworkをインストールするEC2とアタッチするSGを構築します。
以下URLのテンプレートをスタック名 serverless-handson-ec2-YYYYMMDD で流してください。 なお、先ほど作成したロールもアタッチされた状態で構築されます。
Serverless Frameworkのインストール
環境をサクッと構築したところで本題のServerless Frameworkに触れていきます。
構築したEC2 YYYYMMDD-serverless-framework-handson-ap にSSHしてください。
まずは、node.jsを入れます。
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash $ . ~/.nvm/nvm.sh $ nvm install node $ node -v //確認
参考: チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ
次に、Serverless Frameworkをインストールします。こちらはnpmを使用します。
$ npm install -g serverless $ serverless -v //確認
一応、Python2がインストールされているかも確認しておいてください(*2)。
$ python -V
*2) Python2について
後半、ローカルでテストをする際に使用します。
*3) パッケージについて
僕は以下のバージョンで必要なパッケージをインストールしました。
Python2はデフォルトでインストールされていたものをそのまま使っています。
Package | Version |
---|---|
node | 14.4.0 |
Serverless Framework | 1.73.1 |
python | 2.7.16 |
Lambdaのデプロイ
Serverless Frameworkでは、いくつかのテンプレートが用意されています。 今回はそれを用いて、Lambdaをデプロイします。
sls create コマンドを使用して、環境フォルダとテンプレートファイルを作成しましょう。
オプションの詳細は以下です。
Option | Detail |
---|---|
p | 作成されるフォルダの名前を指定 |
t | 使用する言語を指定 |
$ sls create -p YYYYMMDD-serverless-handson -t aws-python $ cd YYYYMMDD-serverless-handson $ ls handler.py serverless.yml
*4) 作成されたフォルダの詳細
File | Detail |
---|---|
handler.py | Lambda上で実行されるコードを記述するファイル |
serverless.yml | デプロイの設定を記述するファイル |
Lambdaにデプロイする前にコードが正しく動作するか確認しておきましょう。
"-f" で handler.py 内の関数helloを指定します。
$ sls invoke local -f hello
以下のような返り値が返ればOKです。
{ "body": "{\"input\": {}, \"message\": \"Go Serverless v1.0! Your function executed successfully!\"}", "statusCode": 200 }
ローカルでコードが正しく動作することを確認できたので、Lambdaをデプロイをしましょう。
$ sls deploy
確認
実際にマネコンに入って、Lambdaができているか確認してみましょう!
リージョンは明記していないと"us-east-1"に作られるみたいです。
ちなみに、裏側はCloudFormationが動いてるので、CloudFormationコンソールからもデプロイしていることがわかりますよ。
EC2から、Lambdaを動かすことも可能です。
$ sls invoke -f hello
正しくデプロイできていれば、sls invoke local時の返り値と一致するはずです。
リソースの削除
最後に、使ったリソースを削除しましょう。
Serverless Frameworkで作成したリソースは、コマンド一つで消すことができます。
CloudFormationに感謝です。
$ sls remove -r us-east-1
また、今回のために作った環境も忘れず消してください!
AWS Resource | Name |
---|---|
CloudFormation Stack | serverless-handson-ec2-YYYYMMDD |
CloudFormation Stack | serverless-handson-iam-role-YYYYMMDD |
CloudFormation Stack | serverless-handson-vpc-YYYYMMDD |
まとめ
今回はServerless Frameworkを使って、シンプルなLambdaを作成しました。
デプロイ~削除まで簡単にできて、ローカルでテストできるのは魅力的ですね。
以上ありがとうございました。
菅谷 歩 (記事一覧)