この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
もこ@札幌オフィスです。一瞬で夏が過ぎて、もう札幌は最低気温11℃くらいになってしまっています。
さて、今回は既存のタスク定義に追加でコンテナを追加するLambda関数を作成してみました。
コード
今回はFargateで動いている既存のタスク定義にX-Rayのコンテナを導入してみます。
X-Rayではポート2000を利用する動作をするため、ポートマッピングで設定してあげる必要があります。
今回はFargateを利用しているためhostPortを2000と設定していますが、Fargateを使わない場合はhostPort部分を0に書き換える必要があるかもしれません。
const AWS = require("aws-sdk");
const ECS = new AWS.ECS({ region: "ap-northeast-1" });
const daemon = {
name: "xray-daemon",
image: "amazon/aws-xray-daemon",
cpu: 32,
memoryReservation: 256,
portMappings: [
{
hostPort: 2000,
containerPort: 2000,
protocol: "tcp",
},
],
logConfiguration: {
logDriver: "awslogs",
secretOptions: [],
options: {
"awslogs-group": "/ecs/logs/sample-fargate-xray-group",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "sample-fargate-xray",
},
},
environment: [
{
name: "AWS_XRAY_DAEMON_ADDRESS",
value: "",
},
],
};
exports.handler = async (event) => {
const list = [
"ここに追加したいTaskDefinitionの名前を入れます",
"複数のTaskDefinitionにも対応しています",
];
for (const service of list) {
const taskDefinition = (
await ECS.describeTaskDefinition({ taskDefinition: service }).promise()
).taskDefinition;
// registerTaskDefinitionに使えるように整形
delete taskDefinition.taskDefinitionArn;
delete taskDefinition.revision;
delete taskDefinition.status;
delete taskDefinition.requiresAttributes;
delete taskDefinition.compatibilities;
// xray daemon注入
const xray = daemon;
xray.logConfiguration.options[
"awslogs-group"
] = `/ecs/logs/${service}-xray-group`;
xray.logConfiguration.options["awslogs-stream-prefix"] = `${service}-xray`;
xray.name = `${service}-xray`;
// describeTaskDefinitionで取ってきた既存の環境にX Ray DaemonのJSONをPushする
taskDefinition.containerDefinitions.push(xray);
// タスクを登録
const registerTaskDefinition = await ECS.registerTaskDefinition(
taskDefinition
).promise();
console.log(registerTaskDefinition);
}
};
使い方
aws-sdkを利用する場合、ローカルで実行する方法とLambda上で実行する方法がありますが、aws-sdkをインストールする必要がないLamda上でやっていきます。
Lambda関数を作成し、
そのまま上記コードをコピペします。
Lambda関数にECSの設定を変更するIAM Policyを追加で付与して上げた上で、35行目の const list = []
内に変更したいタスク定義の名前を追加し、適当なテストイベントを作成し、実行します。
ECSのタスク定義を確認し、追加することができれば成功です!
まとめ
「タスク定義にX-Rayをサクッと突っ込みたい」場合などにお使いください!
今回はX-Ray Daemonの追加の場合のサンプルコードでしたが、少し改良すれば他のコンテナを作成することも出来ますので、是非ご活用ください!