☕️

ecspresso advent calendar 2020 day 18 - appspec

2020/12/18に公開

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

CodeDeploy AppSpec ファイルを生成する appspec コマンド

AppSpec ファイルは、デプロイを管理するために CodeDeploy によって使用される YAML 形式または JSON 形式ファイルです。
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file.html

ecspresso appspec は CodeDeploy AppSpec ファイルを生成し、標準出力に YAML 形式で出力します。

ecspresso deploy で CodeDeploy によるデプロイを行う場合は、自動的に内部で AppSpec ファイルを生成しその内容で CodeDeploy のデプロイメントを作成するため、appspec コマンドを使用する必要はありません。

デプロイの事前準備 (タスク定義の登録など) までは ecspresso で行うが、実際の CodeDeploy でのデプロイ実行は ecspresso 以外で開始したい場合には、次のような手順で AppSpec ファイルを利用します。

  1. ecspresso register でタスク定義の登録を行う
  2. ecspressp appspec で AppSpec ファイルを生成する
  3. AppSpec ファイルを S3 にアップロードする
  4. S3 の AppSpec を指定して CodeDeploy でデプロイメントを作成する

appspec コマンドの実行例

$ ecspresso --config config.yaml appspec
version: "0.0"
Resources:
- TargetService:
    Type: AWS::ECS::Service
    Properties:
      TaskDefinition: arn:aws:ecs:ap-northeast-1:123456789012:task-definition/first-run-task-definition:14
      LoadBalancerInfo:
        ContainerName: nginx
        ContainerPort: 80
      PlatformVersion: 1.3.0
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          SecurityGroups:
          - sg-043eab2d606362f03
          Subnets:
          - subnet-0089ed3e1bdff1fc9
          - subnet-0d750adbd139f411d

appspec コマンドのオプション

usage: ecspresso appspec [<flags>]

output AppSpec YAML for CodeDeploy to STDOUT

Flags:
  --help                      Show context-sensitive help (also try --help-long and
                              --help-man).
  --config=CONFIG             config file
  --debug                     enable debug log
  --color                     enalble colored output
  --task-definition="latest"  use task definition arn in AppSpec (latest, current or Arn)

--task-definition

AppSpec ファイルに出力する TaskDefinition: を指定します。デフォルトは latest です。

  • latest: 現在 ECS に登録されている最新の(リビジョンが一番大きい)タスク定義
  • current: 現在 ECS サービスが使用しているタスク定義
  • タスク定義の Arn: 直接 ARN を指定できます
    arn:aws:ecs:{AWS_REGION}:{ACCOUNT_ID}:task-definition/{TASK_DEFINITION_NAME}:{REVISION}

19日目は、定義ファイルで Terraform の tfstate ファイルを読み込んで使用する方法を説明します。

Discussion