LoginSignup
19
15

More than 3 years have passed since last update.

AWS LambdaでECSのRunTaskを実行する

Posted at

はじめに

ECSを用いたDockerでRailsのデータベース更新する場合、どうやってデータベース更新をすればいいのか悩むことになった。

色々と調べた結果、ECSのRunTaskでデータベース更新を行う企業が多いと判明。
RunTaskをAWS Lambdaで実現するためにはどうすれば良いのかを纏める。

ECS RunTaskとは

ECSでDockerコンテナを動作させている。
これはDockerfileで指定したコマンドが動作している。

Dockerコンテナに対して単発で実行できるのが特徴!

構成

  • AWS Lambda(Python 3.8)
  • Elastic Container Service (ECS)

前提

ECSですでにDockerやEC2が立ち上がっている前提とする。

ECS情報

  • クラスター名: cluster-name
  • タスク定義: task-definition-family

RunTaskでbundle exec rails routesを実行する

import json
import boto3

ecs = boto3.client('ecs')

def lambda_handler(event, context):
    # ECSタスクの実行(単発)
    response = ecs.run_task(
        cluster='cluster-name',
        taskDefinition='task-definition-family',
        launchType='EC2',
        overrides={
            'containerOverrides': [
                {
                    'name': 'container_name',
                    'command': ["bundle","exec","rails", "routes"],
                    'memory': 64
                }
            ]
        }
    )

    # エラーの検知
    print(response)
    failures = response['failures']
    if len(failures) != 0:
        print(failures)
        return {
            'statusCode': 500,
            'body': json.dumps('NG!')
        }

    # 正常終了
    return {
        'statusCode': 200,
        'body': json.dumps('OK!')
    }

説明

参考:ECS RunTask

run_taskのパラメータ

  • cluster: ECSのクラスター名を指定する
  • launchType: EC2で起動するかFargateで起動するかを指定する
  • taskDefinition: 実行するタスク定義を指定(デフォルトでlatest)
  • overrides: 上書きするコンテナ情報を設定する
    • containerOverrides
    • name: コンテナ名
    • command: Dockerコマンドに上書きするコマンド
    • memory: Dockerのメモリー

上記以外のパラメータ以外はboto3の公式を参照。

まとめ

ECS RunTaskをAWS Lambdaで実行できる様にすることでCodePipelineと組み合わせたりCodeDeploy→SNSと組み合わせることもできてアーキテクチャの自由度が増すのでおすすめ!

19
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15