column

コラム

[ECS/Fargate/IaC] EventBridgeからECSコンテナに引数を渡す

DockerFileに引数を渡すEvent Bridgeを作成しよう!

こんにちは、クラウドCoEの熊谷です。

javaコマンドにバッチアプリの名称を引数として設定してjavaのバッチアプリを起動するとします。

その場合のDockerfileの記載例、EventBridgeの記載例をご説明します!

Dockerfile

Dockerfile内では変数JOB_NAMEを指定します。

FROM public.ecr.aws/amazoncorretto/amazoncorretto:11

MAINTAINER aaa@hogehoge.com

VOLUME /tmp

RUN /usr/bin/yum install -y jq python37 curl procps wget tar unzip\
  && rm -rf /var/cache/yum/* \
  && yum clean all

RUN python3 --version
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python3
RUN pip install awscli
RUN aws --version

COPY hogehoge.jar /
COPY start.sh /
RUN ["chmod", "+x", "/start.sh"]

ENTRYPOINT /start.sh ${JOB_NAME}

javaコマンド実行シェル

Dockerfileで定義した変数を第一引数にjavaコマンドを実行するシェルを定義します。

#!/bin/bash
java -jar ./hogehoge.jar "--job=${1}"

Event Bridge(CloudFormation)

ポイントはcontainerOverridesのJOB_NAMEです。
これで実行したいバッチの本数分Event Bridgeを作成し、Event Bridgeで引数JOB_NAMEを定義することで実行するバッチ処理を定義します。

※ECSクラスタ・IAMロール・VPC等の設定は割愛します。

  BT0101EventRule:
    Type: AWS::Events::Rule
    Properties:
      State: ENABLED
      # https://docs.aws.amazon.com/eventbridge/34f8171/userguide/eb-create-rule-schedule.html
      ScheduleExpression: "rate(10 minutes)"
      # UTCなので+9:00で記載する必要があるため、この設定は00:00で起動する意味になります。
      #ScheduleExpression: cron(0 9 * * ? *)  
      Targets:
      - Id: bt0101execute
        Arn: #ECSClusterのArn
        RoleArn: 
          #EventBridgeがECSタスクを実行する為のIAMロール 
        EcsParameters:
          TaskDefinitionArn: # タスク定義
          TaskCount: 1
          LaunchType: FARGATE
          NetworkConfiguration:
            AwsVpcConfiguration:
        # PublicSubnetを利用する場合はENABLEDにする必要があります。
              AssignPublicIp: DISABLED  
              SecurityGroups:
              - # Security Group
              Subnets:
              - # コンテナを実行したいサブネット
              - # コンテナを実行したいサブネット
        Input: !Join [
          '',
          [
            "{",
            "   \"containerOverrides\": [ ",
            "     {",
            "       \"name\": \"bt0101-batch\",",  
            "       \"environment\": [",
            "            {",
            "                \"name\": \"JOB_NAME\",",
            "                \"value\": \"pekepekejob\"",   
            "            }",
            "        ]",
            "     }",
            "   ]",
            "}",
          ]
        ]

ECSクラスタのタスクスケジュールのタブから確認できます。

引数が設定されていることが分かります。

皆さんのお役に立てれば幸いです!

RECOMMEND

おすすめ記事一覧