CloudWatchイベントをトリガーにFargateタスクを実行

CloudWatchイベントをトリガーにFargateタスクを実行してみます。Lambdaの実行上限時間で終わらないタスクを実行するのに便利です。ECRにDockerイメージの登録 Fargeteタイプのタスク定義 タスクのスケジュール設定 といった作業を行っていきます。

Dockerイメージを作成

Dockerfileを作成します。

FROM node:10-alpine

ENV SAMPLE_ENV1=abcdefg
ENV SAMPLE_ENV2=1234567

RUN mkdir /app
RUN echo "console.log(process.env); setTimeout(() => { console.log('end')}, 10000);" > /app/index.js

CMD ["node", "/app/index.js"]

Dockerfileからイメージを生成します。

$ docker image build -t sample_fargate_node:latest .

作成したイメージを実行してみます。

$ docker container run sample_fargate_node
{ PATH:
   '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
  HOSTNAME: '755675595ec0',
  NODE_VERSION: '10.15.3',
  YARN_VERSION: '1.13.0',
  SAMPLE_ENV1: 'abcdefg',
  SAMPLE_ENV2: '1234567',
  HOME: '/root' }
end

リポジトリ作成( ECR )

643-aws-fargate-cloudwatch_ecr1.png

リポジトリの作成をクリック

643-aws-fargate-cloudwatch_ecr2.png

namespaceにはAWSアカウントIDが含まれます。

643-aws-fargate-cloudwatch_ecr3.png

後ほど、このURIを利用します。

DockerイメージをECRに登録

ECRに登録するためのイメージを作成

$ docker image ls
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
sample_fargate_node   latest              822aa745ff11        37 minutes ago      71MB

先ほど作成した リポジトリのURI を指定してイメージを作成します。

$ docker tag sample_fargate_node:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fargate_test
$ docker image ls
REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fargate_test   latest              822aa745ff11        37 minutes ago      71MB
sample_fargate_node                                              latest              822aa745ff11        37 minutes ago      71MB

ECRにログイン

下記コマンドを実行するとECRへログインするためのコマンドが出力されます。

aws ecr get-login \
--region ap-northeast-1 \
--no-include-email

出力されたコマンドを実行してECRにログインします。

イメージをECRにプッシュ

$ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fargate_test

以下のように、イメージを登録できました。

643-aws-fargate-cloudwatch_ecr4.png

Fargate起動タイプのタスクを定義

643-aws-fargate-cloudwatch_task1.png

新しいタスク定義の作成をクリックします。

643-aws-fargate-cloudwatch_task2.png

FARGATEタイプを選択します。

643-aws-fargate-cloudwatch_task3.png

タスク定義名を入力します。

643-aws-fargate-cloudwatch_task4.png

メモリサイズ、CPUサイズを指定後、コンテナの追加をクリックします。

643-aws-fargate-cloudwatch_task5.png

イメージには、ECRで作成した リポジトリURI を指定します。

643-aws-fargate-cloudwatch_task6.png

作成をクリックするとタスク定義が完了します。

Fargateクラスタを作成

643-aws-fargate-cloudwatch_cluster1.png

「ネットワーキングのみ」を選択します

643-aws-fargate-cloudwatch_cluster2.png

クラスター名を入力して、作成をクリックします。

クラスタ上でタスクのスケジュール設定

643-aws-fargate-cloudwatch_task_schedule1.png

タスクのスケジューリングを選択して、作成をクリックします。

643-aws-fargate-cloudwatch_task_schedule2.png

イベントの実行タイミングを設定します。今回は、3分ごとに実行するように設定しました。

643-aws-fargate-cloudwatch_task_schedule3.png

先ほど定義したタスクを選択します。

643-aws-fargate-cloudwatch_task_schedule4.png

ネットワークの設定を行います。サブネットの設定で気をつける点があります(後述)。

643-aws-fargate-cloudwatch_task_schedule5.png

環境変数を上書きすることができます。

設定が完了したら作成をクリックします。

643-aws-fargate-cloudwatch_task_schedule6.png

作成されたリソースを確認できます。

643-aws-fargate-cloudwatch_task_schedule7.png

タスクのスケジューリングを登録できました。

動作確認

CloudWatchイベント

643-aws-fargate-cloudwatch_event.png

この画面から、トリガータイミングなど確認できます。

タスクが実行されてなかった
( 設定修正 )

トリガータイミングになってもCloudWatchでログ出力されなかったので、原因調査します。

タスク一覧ページで Stoppedステータス のタスクを確認します。

643-aws-fargate-cloudwatch_run_ng1.png

STOPPED(Task faild と表示されています。タスクの詳細ページを確認します。

643-aws-fargate-cloudwatch_run_ng2.png

CannotPullContainerError と表示されています。コンテナイメージを取得できなかったようです。

原因としては、ネットワークの設定で、プライベートサブネットを選択したためです。そこで、パブリックサブネットに設定を修正しました。

今度は成功
( 実行結果確認 )

今度はタスクが実行され、以下のようにCloudWatchにログ出力されました。

643-aws-fargate-cloudwatch_run_ok1.png

環境変数が上書きされていることを確認できます。

タスクのスケジューリング機能を停止する

643-aws-fargate-cloudwatch_stop.png

スケジューリング機能を停止するには、チェックを外して、更新をクリックします。

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。