📝
CDK で JSON ファイルを読み込んで ECS タスク定義を作成してみた
class CfnTaskDefinition (construct) · AWS CDK
本記事執筆時点では JSON ファイルを読み込んで ECS タスク定義を作成する機能は提供されていないため、ファイル読み込みライブラリを使用して実現しました。
コード
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { CfnTaskDefinition } from 'aws-cdk-lib/aws-ecs';
import * as fs from 'fs';
import * as path from 'path';
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// JSON ファイル読み込み
const taskDefJson = JSON.parse(fs.readFileSync(path.join(__dirname, 'taskdef.json'), 'utf8'));
const taskDefinition = new CfnTaskDefinition(this, 'TaskDef', {
family: taskDefJson.family,
executionRoleArn: taskDefJson.executionRoleArn,
networkMode: taskDefJson.networkMode,
containerDefinitions: taskDefJson.containerDefinitions,
volumes: taskDefJson.volumes || [],
requiresCompatibilities: taskDefJson.requiresCompatibilities,
cpu: taskDefJson.cpu,
memory: taskDefJson.memory,
runtimePlatform: taskDefJson.runtimePlatform,
});
}
}
上記コードで読み込んだ taskdef.json は ECS コンソールからコピーした定義です。
{
"taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:012345678901:task-definition/test:65",
"containerDefinitions": [
{
"name": "httpd",
"image": "httpd",
"cpu": 0,
"portMappings": [
{
"name": "httpd-80-tcp",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [],
"environmentFiles": [],
"mountPoints": [],
"volumesFrom": [],
"ulimits": [],
"systemControls": []
}
],
"family": "test",
"executionRoleArn": "arn:aws:iam::012345678901:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"revision": 65,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "3072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"registeredAt": "2025-04-24T23:28:29.249Z",
"registeredBy": "arn:aws:sts::012345678901:assumed-role/xxx/xxx",
"enableFaultInjection": false,
"tags": []
}
GitHub Issue
CfnTaskDefinition/TaskDefinition/Ec2TaskDefinition/FargateTaskDefinition: Import properties from external file · Issue #34251 · aws/aws-cdk
CDK の組み込みの機能として実装してほしい旨の Issue は作成されていたので今後の機能追加に期待です。
まとめ
今回は CDK で JSON ファイルを読み込んで ECS タスク定義を作成してみました。
どなたかの参考になれば幸いです。
Discussion