serverless frameworkを使ってAWSにデプロイする
はじめに
前回作ったヤフー天気をスクレイピングするアプリを
serverles framework
を使ってAWSにデプロイする。
今回はcronで定期実行できるとこまで目指す。
TL;DR.
事前準備
AWS
IAMからユーザを作成する。
アクセス権限にでAdministratorAccess
を設定すれば他は何でもOK(のはず)。
アクセスキーIDとシークレットアクセスキーをコピっておく。
AWS側はこれで終了。
serverless framework側
公式のドキュメントがあるので、これを参考にしつつインストールとこから始める。
# cli インストール. # node6以上じゃないとダメそう $ npm install -g serverless # インストールできているか確認。バージョンが出てくればOK。 $ serverless --version # awsの設定をする # デフォルトaliasが設定されているので、そっちを使う。 # $ACCESS_KEYと$SECRET_KEYは先程取得したやつに変える $ sls config credentials --provider aws --key $ACCESS_KEY --secret $SECRET_KEY # 後々使いたいpluginをインストールしておく $ npm install --save-dev serverless-offline serverless-webpack
デプロイする
serverles.yml
に設定を書いた上で、sls deploy
でデプロイできる。
今回作成したserverless.yml
は下記の通り。
service: name: weather-forecast-aws plugins: # webpack使うようのプラグイン - serverless-webpack # ローカルで実行するためのプラグイン - serverless-offline provider: name: aws runtime: nodejs12.6 # リージョンを東京に変更 region: ap-northeast-1 environment: # 環境変数設定(デプロイ時に引数で渡す) WEBHOOK: ${opt:webhook} custom: webpackIncludeModules: true functions: weather-forecast-today: # 叩くメソッド。 handler: app.weatherForecastToday events: # cron設定。jstじゃないので9時間引いた時間を設定 - schedule: cron(30 22 * * ? *) weather-debug-today: handler: app.weatherForecastToday events: # httpリクエスト受ける用設定。debug用に設定しておく - http: method: get path: debugtoday
これでデプロイできる用になったので実際にやってみる。
# デプロイしてみる # slackのwebhookを使いたいので、値を渡してあげる $ sls deploy --WEBHOOK=webhook_hoge # デプロイできたらcurlを叩いてみる。エラーなく動けばOK $ curl localhost:3000/debugtoday
おまけ
deployしたものを消したい場合:sls remove
で可能。
まとめ
今回はServerless frameworkを使ってAWSにデプロイするところまでやった。
lambdaを使うのに色々設定等しなきゃいけない認識だったから、
ここまで手軽にできるのはとてもbe便利。
便利だったのでAWSだけでなく、GCFなどでも使ってみようと思う。