Serverless FrameworkでAWS Lambdaの開発環境を簡単構築
はじめに
以前Lambdaを使ってSlack通知を飛ばすような機能をつくったのですが、コンソール上でコードをベタ書きしていたのでデバッグに非常に手間がかかりました。
最近の社内勉強会でServerless Frameworkの存在を知り、これを使えばローカル環境で関数をコーディングしてAWSに簡単にデプロイできるということを知ったので早速勉強してみることにしました。
今回の記事では、Serverless Frameworkのインストールからデプロイまでの流れを簡単にまとめました。
これからServerless Frameworkを使ってみたいという初心者の方向けの内容となっています。
Serverless Frameworkとは
Serverless Frameworkはサーバーレスなアプリケーションを簡単に開発、デプロイするためのツールです。
AWS、Azure、GCP等のクラウドサービスによらず利用することができ、クラウドサービスで使用できる言語(AWSであればC#, Node.js, Pythonなど)を利用することができます。
また、デプロイコマンドを実行することでクラウドサービスのリソースを構築することができます。
例えばAWSだと、ローカルで作成したLambdaのスクリプトとあわせて、Lambdaと連携するDynamoDBやAPI Gatewayなどのリソースも構築することができます。
実装
インストール、serverlessテンプレートの作成、デプロイの流れをそれぞれ簡単にまとめました。
インストール
インストールの流れは以下になります。
- nodeのインストール
- serverlessのインストール
- IAMユーザの作成
- Serverless FrameworkにIAMユーザを設定
nodeのインストール
brew install node
serverlessのインストール
npm install -g serverless
IAMユーザの作成
AWSコンソールでIAMを開き、新しくIAMユーザを作成します。
Serverless FrameworkからAWSにアクセスするため、「プログラムによるアクセス」をチェックします。
既存のポリシーである「AdministratorAccess」を選択し、IAMユーザを作成します。
Serverless FrameworkにIAMユーザを設定
IAMユーザの作成後画面にアクセスキーIDとシークレットアクセスキーが表示されるので、これらを控えます。
ターミナルで以下のコマンド(XXX: アクセスキーID、YYY: シークレットアクセスキー)を実行します。
serverless config credentials --provider aws --key XXX --secret YYY --profile serverless-admin
serverlessテンプレートの作成
テンプレート作成のあとに、Lambda関数とserverless.ymlの中身を記述します。
テンプレート作成
以下のコマンドでテンプレートを作成します。
sls create --template aws-python --path [テンプレート名]
使用する言語によって、aws-python
の箇所をaws-nodejs
などに置き換えます。
Lambda関数の作成
hi !
と表示されるだけのスクリプトです。
def hello(event, context):
print("hi !")
return "hello-world"
serverless.ymlの作成
Lambdaのスクリプトをデプロイするときのクラウドサービスの設定をserverless.ymlに記述します。
provider:
name: aws #選択するクラウドサービス
runtime: python2.7 #言語のバージョン
profile: serverless-admin #IAMユーザをserverlessに設定したときのプロファイル名
region: us-east-1 #リソースを作成するリージョン
デプロイ
デプロイは以下のコマンドで実行します。
sls deploy -v
AWSコンソールでLambdaを開くと、ちゃんとデプロイされていることを確認することができます。
Test
をクリックすると、デプロイしたLambda関数の実行内容を確認することができます。
デプロイまでの大まかな流れは以上です。
各種slsコマンド
使いそうなslsコマンドをまとめました。
invoke
ターミナル上でLambda関数の実行内容を確認することができます。
sls invoke -f [function名] -l
deploy function -f ~
変更した関数のみデプロイすることができます。
sls deploy -v
よりもデプロイに時間がかかりません。
sls deploy function -f [function名]
logs
ターミナル上でLambda関数の実行ログをリアルタイムに出力することができます。
sls logs -f [function名] -t
remove
デプロイしたリソースをすべて削除します。
関数だけではなく、CloudWatchのロググループやIAMロールも削除します。
sls remove
Lambdaの各種設定におけるserverless.ymlの記述
オプションをserverless.ymlに記述しておくと、関数をデプロイする際にそれらの設定を反映してくれます。
IAM
Lambdaはデフォルトで他のAWSサービスへのアクセス権を持っていないので、アクセスが必要な際にはIAMポリシーが必要になります。
S3のデータを取得したり保存したりする場合には、以下のようにiamRoleStatements
を記述します。
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:ListBucket"
Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
- Effect: "Allow"
Action:
- "s3:PutObject"
Resource:
Fn::Join:
- ""
- - "arn:aws:s3:::"
- "Ref" : "ServerlessDeploymentBucket"
- "/*"
メモリ、タイムアウト
Lambda関数が実行時に使用するメモリ量やLambda関数が停止するまでに許可される実行時間の設定については、providerにmemorySizeとtimeoutを追記します。
provider:
name: aws
runtime: python2.7
profile: serverless-admin
region: us-east-1
memorySize: 512
timeout: 2
環境変数
Lambdaで使用する環境変数は以下のように設定します。
environment:
variable1: value1
おわりに
今度はServerless FrameworkでREST APIの構築をやってみようと思います。
参考資料
Author And Source
この問題について(Serverless FrameworkでAWS Lambdaの開発環境を簡単構築), 我々は、より多くの情報をここで見つけました https://qiita.com/suzuki0430/items/1d8aa2d9900fd867db9c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .