☕️

ecspresso advent calendar 2020 day 12 - render

2020/12/12に公開

Amazon ECS のデプロイツールである ecspresso の利用法をまとめていく ecspresso Advent calendar 12日目です。

設定ファイルと定義ファイルをレンダリングする render コマンド

5日目のテンプレート記法の項で説明したとおり、ecspresso で使用する設定ファイルとサービス・タスク定義ファイルは純粋な YAML や JSON 形式ではなく、テンプレート機能を持っています。

render コマンドを使用すると、実際に ecspresso が各種ファイルを読み込んでテンプレートを評価し、YAML/JSON をパースして内部の構造体に読み込んだ状態を出力して確認できます。複雑なテンプレートを記述した場合に、意図したとおりの評価結果になっているかを確認するのに便利です。

render コマンドの使用例

設定ファイルはYAML形式、定義ファイルはJSON形式で標準出力に出力されます。

$ ecspresso render --config config.yaml --config-file
region: ap-northeast-1
cluster: ecspresso-demo
service: nginx-service
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
timeout: 10m0s
plugins: []
appspec: null
$ TAG=latest ecspresso render --config config.yaml --task-definition
{
  "containerDefinitions": [
    {
      "command": [],
      "cpu": 256,
      "entryPoint": [],
      "environment": [
        {
          "name": "FOO",
          "value": "BAR"
        }
      ],
      "essential": true,
      "image": "nginx:latest",
      "links": [],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/first-run-task-definition",
          "awslogs-region": "ap-northeast-1",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "memoryReservation": 512,
      "mountPoints": [],
      "name": "nginx",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        }
      ],
      "volumesFrom": []
    }
  ],
  "cpu": "0.25 vCPU",
  "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
  "family": "first-run-task-definition",
  "memory": "512",
  "networkMode": "awsvpc",
  "placementConstraints": [],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
  "volumes": []
}

render コマンドのオプション

usage: ecspresso render [<flags>]

render config, service definition or task definition file to stdout

Flags:
  --help                Show context-sensitive help (also try --help-long and --help-man).
  --config=CONFIG       config file
  --debug               enable debug log
  --color               enable colored output
  --service-definition  render service definition
  --task-definition     render task definition
  --config-file         render config file

--config-file

設定ファイルを出力します。

--service-definition

サービス定義を出力します。

--task-definition

タスク定義を出力します。


13日目は、サービスではなく単発のタスクをECSクラスタ上で実行する方法について説明します。

https://zenn.dev/fujiwara/articles/ecspresso-20201213

Discussion