Mac M1でServerless frameworkを利用してLambdaを作成

2021.07.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、クラスメソッドのキム・ジェウク(Kim Jaewook)と申します。今回はMac M1でServerless frameworkを利用し、Lambdaを作成する過程を整理してみました。

Serverless frameworkとは?

Amazon Web Servicesの一部としてAmazonが提供するサーバーレスコンピューティングプラットフォーム「AWS Lambda」で、アプリケーションを構築するために開発されたその最初のフレームワークである。

  • Azure Functions
  • AWS Lambda
  • Google Cloud Functions

このようなserverless functionはいつも実行する必要がないので、かなりのインフラコストを削減する効果があります。つまり、functionが実行される時だけ資源を使用する方式となります。

MacでServerless frameworkをInstall

では、MacでServerless frameworkをインストールしましょう。

まず、Serverless frameworkをインストールするためにパッケージマネージャーが必要です。自分は「macOS(またはLinux)用パッケージマネージャー」である、Homebrewをインストールしました。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

このコマンドでHomebrewをインストールするとき、「Warning: /opt/homebrew/bin is not in your PATH」というエラーが出る時もあります。このエラーが出たらコンソールで「export PATH=/opt/homebrew/bin:$PATH」コマンドを実行して、再度Homebrewをインストールしたら問題なくインストールされます。

brew install serverless

その後、brewを使って、Serverless freameworkをインストールします。インストールが終わったら、「serverless -v」コマンドを実行して、ちゃんとインストールされたのか確認します。

Serverless frameworkの設定

~/.aws/credentials

続いて、credentialsにProfileを設定します。

[role]
region = ap-northeast-2
mfa_serial = arn:aws:iam::/cm-kim.jaewook
role_arn = arn:aws:iam::cm-kim.jaewook
aws_access_key_id=
aws_secret_access_key=
source_profile = default

自分は簡単に「role」という名前でProfileを作成しました。

serverless config credentials --provider aws --key <ACCESS KEY ID> --secret <SECRET KEY>

serverless configコマンドでServerlessを構成します。Keyを資格証明ファイルに保存すると、各コマンドでProfileを指定し、他のServerlessコマンドを実行することができます。

それでは、Lambdaを作成してみましょう。

serverless create --template aws-python3 --name hello-world

このコマンドでPython3をBaseにするLambdaを作成することができます。コマンドを実行した後、Folderを見ると、Handler file、構成File、および.gitignore Fileが作成されます。

provider:
name: aws
runtime: python3.6

functions:
hello:
handler: handler.hello

serverless.ymlファイルの内容です。ここで、IamRoleを設定したり、Lambda Eventを設定することができます。

import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response

Handler.pyの内容です。

では、Serverless frameworkでLambdaを配布してみましょう。

export AWS_PROFILE="role"
serverless deploy

先、設定したProfileの名前を入れます。そして、デプロイすると、AWSにLambdaが配布されます。

最後に

Serverless frameworkを初めて使ってみましたが、Lambdaを作成して配布するまで、すごく簡単でビックリしました。後で機会があったらもっと色んなframeworkを使ってみたいと思います。

参考