ドキュメント
https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md
これやらないとこういうことが起きるので大事。
http://cryks.hateblo.jp/entry/2017/04/18/125351
まさに自分のサーバーで起きて大変だった…。
環境
前回のAWS EC2 Container Service
http://qiita.com/kawax/items/5307b58e549dd9cc3928
これでcronはどうやるんだろうと調べたけど結構簡単だった。
ECSタスク
aws-daily.yml
version: '2'
services:
web:
image: {image}
env_file: .env.production
command: bundle exec rake mastodon:daily
mem_limit: 536870912
ports:
- "3000"
ecs-cli compose -f aws-daily.yml --project-name mastodon-daily create
Lambda
ランタイム:Node.js 6.10
ブランク関数で新規に作っていく。
トリガーで CloudWatch イベント - スケジュール
を選択。
ルール名やルールの説明は適当なものを。
スケジュール式は rate(1 day)
ロールはカスタムロールの作成
から新規ロールを作った後で
管理ポリシーAmazonEC2ContainerServiceFullAccess
を付ける。
インラインポリシーoneClick_lambda_basic_execution
も付いてるはず。
この辺は後でLambda 関数が実行できるポリシーを付ける。
コード
clusterとtaskDefinitionを自分のものに書き換える。
var AWS = require('aws-sdk');
var ecs = new AWS.ECS();
exports.handler = (event, context, callback) => {
var params = {
cluster: "mastodon",
taskDefinition: "ecscompose-mastodon-daily"
};
ecs.runTask(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
};
テストしてみてエラーが出てなければトリガーを有効化して終わり。
エラーが出てる場合はロールを確認する。