LoginSignup
3
1

More than 3 years have passed since last update.

CloudWatch Eventsを利用してCodeBuildの環境変数をOverrideし定期実行する方法

Last updated at Posted at 2020-12-07

この記事は、CloudWatch Eventsを利用し、CodeBuildの環境変数を上書きしつつ定期実行する方法についてまとめたものです。

アーキテクチャ

シンプルな図になるのですが今回作成したいものは、このような構成を想定しています。

やり方

  • CloudWatchのコンソールを開き、[イベント]、[ルールの作成]の順に選択します。
  • スケジュールから、Cronを選択し、Cron式指定します。
  • [ターゲット]より、[ターゲットの追加、CodeBuildプロジェクト]を選択します。
  • プロジェクトARNには、ビルドプロジェクトのARNを入力します。
  • CodeBuildに環境変数などのパラメータを渡すには、[入力の構成]、[定数(JSONテキスト)]を選択します。

環境変数をOverrideするにはどうするか

上記の最後に記載した、入力構成から、json形式でパラメータをCodeBuild側に渡すことができます。
実際に渡せるパラメータは、こちらを参照してください。CodeBuildに渡せるパラメータ

今回注目するのは、environmentTypeOverride:です。
こちらを使用することで、環境変数の上書きができます。
注意点
現在(2020/12/8 時点)では、公式のドキュメントのサンプルがオブジェクトを要素にもつ配列として書かれていない為、そこが注意点です。
下記のような形式だとうまくいきました。

Sample.json
{
    "projectName": "Test-Project",
    "environmentVariablesOverride": [
        {
            "name": "testName",
            "value": "testValue",
            "type": "PLAINTEXT"
        }
    ]
}

terraformで実装する場合

上記の設定をterraformで実装する場合は、こちらを参照してください。Terraformでの実装方法

実装としては、aws_cloudwatch_event_targetを利用します。また、上記のjsonを定義する方法は、inputに記載することで適用されます。

sample.tf

resource "aws_cloudwatch_event_target" "ecs_scheduled_task" {
  target_id = "run-scheduled-task-every-hour"
  arn       = aws_ecs_cluster.cluster_name.arn
  rule      = aws_cloudwatch_event_rule.every_hour.name
  role_arn  = aws_iam_role.ecs_events.arn

  ecs_target {
    task_count          = 1
    task_definition_arn = aws_ecs_task_definition.task_name.arn
  }

  input = <<DOC
{
  "containerOverrides": [
    {
      "name": "name-of-container-to-override",
      "command": ["bin/console", "scheduled-task"]
    }
  ]
}
DOC
}

参照

CloudWatch Eventsの設定
CodeBuildに渡せるパラメータ
Terraformでの実装方法

3
1
0

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
3
1