2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSで「楽」をしたい!2つの処理を順番に動かす自動化の仕組みをCodeBuildで作ってみた

2
Posted at

はじめに

AWSを利用する中で、「ちょっとした作業を自動化したい」「手動の手間を減らして楽をしたい」と思うことはありませんか?
今回は、「特定の順番で実行しなければならない2つの処理」 を、AWS CodeBuildを使って定期実行できるようにした事例を紹介します。

今回の背景と目的

複数の処理を自動化する場合、AWSではCodePipelineなどの利用が一般的ですが、今回は以下の背景からCodeBuildでの実装を選択しました。

  • 実現したかったこと: 2つのCodeBuildプロジェクトを順番通りに実行する
  • 選定理由: - 恒久的な仕組みではなく、一時的な対応としての側面が強かったため
    • パイプラインを新規構築する工数を抑え、既存のCodeBuildを活かして迅速に実装したかったため

実装の概要

本来であればCodePipelineを導入するのが定石ですが、今回はスピード感とシンプルさを重視し、CodeBuildのみで完結させています。

  1. CodeBuild A: 最初の処理を実行
  2. CodeBuild B: Aの完了後、次の処理を実行
  3. cronベースのスケジュールでトリガー: これらをスケジュールに基づいて定期実行するように設定

構成について

version: 0.2

phases:
  build:
    commands:
      # --- プロジェクトAの実行 ---
      - echo "Starting Project A..."
      - |
        BUILD_ID_A=$(aws codebuild start-build --project-name "Project A" --query 'build.id' --output text)
        echo "Build ID: $BUILD_ID_A"

      # --- プロジェクトAの完了を待機 (ポーリング) ---
      - |
        echo "Waiting for Project A to complete..."
        while true; do
          # ステータスを取得
          STATUS=$(aws codebuild batch-get-builds --ids "$BUILD_ID_A" --query 'builds[0].buildStatus' --output text)
          echo "Current Status: $STATUS"

          if [ "$STATUS" = "SUCCEEDED" ]; then
            echo "Project A succeeded!"
            break
          elif [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "STOPPED" ] || [ "$STATUS" = "FAULT" ] || [ "$STATUS" = "TIMED_OUT" ]; then
            echo "Project A failed with status: $STATUS"
            exit 1  # 呼び出し元のビルドも失敗として終了させる
          else
            # IN_PROGRESS などの場合は30秒待機して再試行
            sleep 30
          fi
        done

      # --- プロジェクトBの実行 ---
      - echo "Project A finished successfully. Now starting Project B..."
      - aws codebuild start-build --project-name "Project B"
  • 1つ目のCodeBuildのSTATUSを一定時間ごとに確認を行い、進捗状況によって2つ目の実行を行うようにしました
  • トリガーを作成し、cronベースのスケジュールで実行しました

まとめとこれから

今回の対応を通じて、AWSでの効率化を始めて自主的に挑戦してみました。

これまでは「とりあえず動くもの」を作る段階でしたが、これからは、何かを効率化したいと思ったときに、「どのAWSサービスを組み合わせるのが最適か」を即座に判断し、すぐに実行に移せるスキルを身につけていきたいと考えています。

AWSで「楽」をもっとできるよう、引き続き学習を進めていきます。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?