Serverless を利用して S3 の総ファイルサイズを Slack へ投稿する

Posted on 2016年 3月 25日

ファイルのバックアップにS3を利用しています。
S3をどれぐらい容量を使っているか、毎回手動チェックするのはめんどくさいので、1日おきにSlackへ投稿するシステムを作ってみる。

プロジェクト作成

$ slss project create
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v0.5.0
`-------'

Serverless: Initializing Serverless Project...
Serverless: Enter a name for this project:  (serverless-4j5kik) slssAWSChat
Serverless: Enter a new stage name for this project:  dev
Serverless: For the "dev" stage, do you want to use an existing Amazon Web Services profile or create a new one?
  > Existing Profile
    Create A New Profile
Serverless: Select a profile for your project:
  > default
Serverless: Creating stage "dev"...
Serverless: Select a new region for your stage:
  > us-east-1
    us-west-2
    eu-west-1
    eu-central-1
    ap-northeast-1
Serverless: Creating region "us-east-1" in stage "dev"...
Serverless: Deploying resources to stage "dev" in region "us-east-1" via Cloudformation (~3 minutes)...
Serverless: Successfully deployed "dev" resources to "us-east-1"
Serverless: Successfully created region "us-east-1" within stage "dev"
Serverless: Successfully created stage "dev"
Serverless: Successfully initialized project "slssAWSChat"

IAMポリシーを変更して、再度デプロイする。 変更内容は下記を追加する。

Slack の Incoming WebHooks を追加する

Slack App Directory にアクセスし、Incoming WebHooks を追加する。

追加後の画像

Webhook URL は、後で使用するので、URL を控える。

Function を追加する

$ slss function create s3Report
Serverless: Please, select a runtime for this new Function
  > nodejs
    python2.7
Serverless: For this new Function, would you like to create an Endpoint, Event, or just the Function?
    Create Endpoint
  > Create Event
    Just the Function...
Serverless: Successfully created function: "s3Report"

CloudWatch Events でスケジュール実行するので、Create Event を選択する。

Function を編集

ファイルのhandler.jsを編集する。
編集内容については、slssAWSChat/handler.js at master · mizucopo/slssAWSChat を参考。

$ cd ./
$ npm install aws-sdk --save
[email protected] /path/to/project_root
└─┬ [email protected]
  ├── [email protected]
  ├── [email protected]
  └─┬ [email protected]
    └── [email protected]
$ cd ./s3Report
$ echo "{}" > ./package.json
$ npm install bluebird --save
[email protected] /path/to/project_root
└── [email protected]

Slack に投稿するスケジュールの登録

ファイルの./s3Report/s-function.jsoneventsを編集する。
今回は日付が変わったタイミングに投稿するようにする。 設定する際は、タイムゾーンはUTCなので注意。

デプロイする。

$ slss event deploy

Serverless: Deploying events in "dev" to the following regions: us-east-1
Serverless: Successfully deployed events in "dev" to the following regions:
Serverless: us-east-1 ------------------------
Serverless:   dailyS3Report (schedule event)

Slack に投稿されるのを確認できました。

Slack投稿イメージ

成果物の配布

今回作成したソースは、GitHub にあります。 もし使用する場合、handler.jsSLACK_CHANNELSLACK_ENDPOINTを変更してから、利用してください。

また、手探り状態で作成してきたので、アドバイス等ございましたら、GitHub の Issue などでご連絡のほどおまちしております。

Posted in AWS Serverless Framework Slack