LambdaからrunTask関数を使ってECS上で新しいタスクを走らせたかったので簡単にメモ
今回はFargateは使いません。
index.js
const AWS = require('aws-sdk');
const s3 = new AWS.S3({region:'ap-northeast-1'});
const ecs = new AWS.ECS({apiVersion:'2014-11-13',region:'ap-northeast-1'});
//~~省略~~
const params = {
taskDefinition: 'YOURTASKDEFINITION',
cluster: 'YOURCLUSTER',
launchType: 'EC2',
overrides: {
containerOverrides: [
{
command: ['echo HelloWorld!'],
name: 'YOURCONTAINERNAME'
},
],
}
};
ecs.runTask(params, function (err, data) {
if (err) console.log(err);
else console.log(data);
};
//~~省略~~
これでタスクを投げても動かなかった、Lambda側でもエラーは吐かれていないのでハマった。
ECSのコンソール画面から今回使用したいクラスターの画面に向かって、タスクメニューから直接手作業で新しいタスクを実行させてみたところ
RESOURCE:MEMORY
とのエラーが画面に表示された。
どうやらクラスターに含まれるインスタンスのメモリ容量を超えたサイズでタスク定義をするとこのようなエラーがでるらしい。
新しいインスタンスをスケールするか、タスク定義で使用するメモリを少なくするかして対応したところ、Lambdaから上手くタスクが投げられた。