水無瀬のプログラミング日記

プログラムの勉強した時のメモ

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などでも使ってみようと思う。

参考リンク