Serverless を利用して S3 の総ファイルサイズを Slack へ投稿する
ファイルのバックアップに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ポリシーを変更して、再度デプロイする。 変更内容は下記を追加する。
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListAllMyBuckets",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::*"
}
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
slssAWSChat@0.0.1 /path/to/project_root
└─┬ aws-sdk@2.2.46
├── sax@1.1.5
├── xml2js@0.4.15
└─┬ xmlbuilder@2.6.2
└── lodash@3.5.0
$ cd ./s3Report
$ echo "{}" > ./package.json
$ npm install bluebird --save
slssAWSChat@0.0.1 /path/to/project_root
└── bluebird@3.3.4
Slack に投稿するスケジュールの登録
ファイルの./s3Report/s-function.json
のevents
を編集する。
今回は日付が変わったタイミングに投稿するようにする。
設定する際は、タイムゾーンはUTCなので注意。
"events": [
{
"name": "daily",
"type": "schedule",
"config": {
"enabled": true,
"schedule": "cron(0 15 * * ? *)"
}
}
],
デプロイする。
$ 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 に投稿されるのを確認できました。
成果物の配布
今回作成したソースは、GitHub
にあります。
もし使用する場合、handler.js
のSLACK_CHANNEL
とSLACK_ENDPOINT
を変更してから、利用してください。
また、手探り状態で作成してきたので、アドバイス等ございましたら、GitHub の Issue などでご連絡のほどおまちしております。
Read other posts