はじめに

運用現場での「定型作業」や「インシデント対応時の一次切り分け」を自動化したいと考えたことはありませんか?

本連載で利用する PagerDuty Runbook Automation(以下、RBA) は、インフラの運用手順やスクリプトを「ジョブ」として定義し、安全かつ簡単にチームへ委譲・自動化できる強力なプラットフォームです。
本連載では、この RBA を使用して Amazon EC2 インスタンスに対して自動化ジョブを実行するためのセットアップ手順を、全3回にわたって解説します。

第1回目となる今回は、自動化の基盤となるプロジェクトの作成と、ジョブを実際に AWS 環境内で代行実行するエージェントである「Runner」の構築手順をご紹介します。

本連載のゴールとアーキテクチャの概要

アーキテクチャ構成図

一般的な自動化チュートリアルでは、SSH キーを発行してサーバーに直接接続する手法がよく紹介されます。しかし本連載では、セキュリティと運用保守性を高めるために、AWS Systems Manager(SSM)を経由したアーキテクチャを採用します。

これにより、SSH 鍵の管理や踏み台サーバーの維持が不要になり、AWS のベストプラクティスに沿ったより安全な自動化基盤を構築することができます。

実行環境・前提条件

本記事の構築手順は、以下の環境を前提として検証を行っています。RBA 実行環境(Runner)の推奨要件については、公式ドキュメント(System Requirements) および Runner のドキュメント を併せてご確認ください。

項目 RBA 推奨環境 実行環境(今回の検証環境)
OS Linux / Windows 等 Amazon Linux 2023
Java Java 11 または 17 OpenJDK 17.0.15 (Amazon Corretto)
Python 3.x 系 3.9.21
boto3 最新版 1.38.15
  • 前提条件:
    • PagerDuty Runbook Automation のアカウントを保有していること。
    • Amazon EC2 を構築するための AWS アカウントおよび適切な IAM 権限があること。
    • RBA 上で API キー(User Token)を発行済みであること。

【Step 1】PagerDuty Runbook Automation でのプロジェクト作成

まずは、自動化タスク(ジョブ)を管理するための「プロジェクト」という箱を作成します。

  1. RBA コンソールにログインし、画面左上のプルダウンメニューを開きます。
  2. Create Project をクリックします。
    Create Projectのクリック
  3. プロジェクト名(例:AWS-Automation-Project)と説明を入力し、作成 をクリックします。
    プロジェクト設定の入力

【Step 2】Runner 実行用 Amazon EC2 の構築と環境準備

次に、RBA からの命令を受け取り、AWS 環境内で実際の処理を代行する「Runner」をホストするサーバーを構築します。

AWS マネジメントコンソールから Amazon EC2 インスタンス(Amazon Linux 2023)を起動し、SSH 等でログインして以下の準備を行います。

1. Java のインストール

Runner は Java アプリケーションとして動作するため、Java 11 または 17 が必要です。今回は Amazon Corretto 17 をインストールします。

sudo dnf update -y
sudo dnf install -y java-17-amazon-corretto

インストール後、バージョンを確認します。

java -version

2. Python と boto3 のインストール

Amazon Linux 2023 には、デフォルトで Python 3 が標準搭載されています。
まずはバージョンが正しく表示されるか確認し、続けて AWS の API を操作するためのライブラリ「AWS SDK for Python (boto3)」を追加インストールします。

# Python 3 の確認
python3 --version

# pip を使用して boto3 をインストール
pip3 install boto3

# インストールの確認
pip3 show boto3

【Step 3】プロジェクト内での Runner 作成と設定

EC2 側の受け入れ準備が整ったら、RBA コンソール上で Runner を発行します。プロジェクト内で作成された Runner はそのプロジェクト専用となり、他のプロジェクトからは隔離されて安全に運用できます。

1. Runner 作成画面への遷移

  1. 対象のプロジェクトへ移動し、左メニューから Project Settings > Runner Management を開きます。
    対象プロジェクトの選択
    Runner Managementの選択
  2. Create Runner をクリックします。
    Create Runnerボタン

2. Runner の基本設定と Node Dispatch

作成画面にて、以下の項目を設定していきます。

  • Name / Description: Runner の名前と説明を記載します。
    Runnerの名前設定
  • Tags: AWS などのタグを定義します。これはジョブ実行時に対象の Runner を指定する際に役立ちます。
    Runnerのタグ設定
  • Platform: Linux を選択します。(※プラットフォームは一度作成すると変更できないため、ご注意ください)
    プラットフォーム設定(Linux)
    Nextボタンのクリック

次に進むと、Node Dispatch の設定画面が表示されます。ここでは Remote Node DispatchDisabled から Enabled に変更しておくことで、特定の Node Filter を使った柔軟なノード選択が可能になります。設定が完了したら Create Runner をクリックします。

Node Dispatchの設定

💡 参考:公式ドキュメント(プロジェクト内での Runner 作成)
Creating Runners within a Project | Rundeck Docs

【Step 4】Runner のダウンロードと自動起動設定

Runner を作成すると、ダウンロードとインストールのための手順が表示されます。手動でファイルをアップロードする手間を省くため、curl コマンドを利用して Amazon EC2 上へ直接ダウンロードする方法がおすすめです。

まずはダウンロードに必要な API キー(User Token)を発行します。

1. RBA での API キー(User Token)取得

  1. RBA コンソールの画面右上にあるユーザーアイコンをクリックし、Profile を選択します。
    RBAコンソールのプロフィール選択画面
  2. プロフィール画面が表示されたら、User API Tokens の横にある「+」ボタンをクリックします。
    User API Tokensの追加ボタン
  3. トークンの名前(任意の名前)を入力し、他の設定はデフォルトのまま Generate New Token をクリックします。
    トークン生成画面
  4. 発行された API キーが表示されるので、必ずコピーして手元に控えておいてください。(※セキュリティ上、一度画面を閉じると再確認できません)
    APIキー表示画面
  5. 元の画面に戻り、作成したトークンが一覧に反映されていれば成功です。
    トークン一覧画面

💡 参考:公式ドキュメント(User API Tokens)
User API Tokens | Rundeck Docs

2. API トークンを使用した Runner のダウンロード

Runner の作成画面でプラットフォーム(今回は Linux)を選択すると、ダウンロード手順が表示されます。手動でファイルをアップロードする手間を省くため、curl コマンドを利用して Amazon EC2 上へ直接ダウンロードする方法がおすすめです。

以下のように環境変数として設定してからコマンドを実行してください。(※URL や jar ファイル名は発行された固有のものを指定してください)

# RBA の API キーを設定(取得したものを入力します)
export RUNDECK_API_TOKEN=""

# curl コマンドで対象の jar ファイルをダウンロード
curl "https://.runbook.pagerduty.cloud/api/52/runnerManagement/download/" \
--header "X-Rundeck-Auth-Token: $RUNDECK_API_TOKEN" \
--output runner-example-1234.jar

【実行例】

[ec2-user@ip-10-0-0-10 ~]$ export RUNDECK_API_TOKEN=""
[ec2-user@ip-10-0-0-10 ~]$ curl "https://.runbook.pagerduty.cloud/api/52/runnerManagement/download/" \
> --header "X-Rundeck-Auth-Token: $RUNDECK_API_TOKEN" \
> --output runner-example-1234.jar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   159    0   159    0     0    325      0 --:--:-- --:--:-- --:--:--   325

💡 注意点: ダウンロードされる .jar ファイルの名前は Runner を作成するたびに一意に生成されます。メモなどを忘れて再作成した場合は、ファイル名が変更されるためダウンロード手順を一から実施し直す必要があります。

3. Runner の手動起動とステータス確認

ダウンロードが完了したら、まずは手動で Runner を起動し、正常に動作するか確認します。

手動起動コマンドの確認

java -jar -Drunner.log.output=console runner-example-1234.jar

RBA コンソールの Runner Management 画面を開き、対象 Runner のステータスが Healthy になっていれば成功です!

Healthyステータスの確認

4. Runner を Service として自動起動させる(systemd)

サーバーの再起動時にも Runner が自動で立ち上がるように、systemd を用いてデーモン化(バックグラウンドで常に実行される状態)します。

① 実行ユーザーとパスの確認

systemd の設定ファイルを作成する前に、jar ファイルの所有権と配置場所(パス)を確認しておきます。

# グループとユーザーの権限を確認(ec2-user であることを確認)
ls -la runner-example-1234.jar

# 保存場所の絶対パスを確認(自身が保存した場所であることを確認)
pwd

② systemd 構成ファイルの作成

/etc/systemd/system/runner.service ファイルを新規作成し、以下の内容を記述します。WorkingDirectory(保存場所)や User、実行する jar ファイル名は、先ほど確認したご自身の環境に合わせて書き換えてください。

[Unit]
Description=Runbook Automation Runner 

[Service]
WorkingDirectory=/home/ec2-user 
Type=simple
User=ec2-user
Group=ec2-user

# ダウンロードした Runner の jar ファイル名を指定します
ExecStart=/usr/bin/java -jar runner-example-1234.jar

Restart=on-failure

[Install]
WantedBy=multi-user.target

③ サービスの有効化と起動

構成ファイルを保存後、以下のコマンドでサービスを有効化し、起動します。

sudo systemctl daemon-reload
sudo systemctl enable runner
sudo systemctl start runner

最後に、再度 RBA コンソールでステータスが Healthy になっていることを確認できれば、基盤構築はすべて完了です!

自動起動後のステータス再確認

💡 参考:公式ドキュメント(Runner のサービス化について)
Running the Runner as a Service | Rundeck Docs

アイレットエンジニアの視点:環境構築のポイント

今回、Runner の構築やデーモン化を行う中で、実運用に向けていくつか気づいたポイントがありました。実は私自身、初めて RBA に触れた際にいくつかの箇所で躓き、何度も公式ドキュメントを読み返しながら試行錯誤した記憶があります。

1. API トークンの取得場所が分かりにくい

一つ目の躓きポイントは、API トークンを使用した Runner のダウンロードでした。
画面上に表示されるダウンロードコマンドには RUNDECK_API_TOKEN を設定するよう指示が出ますが、肝心の「その API キーを RBA のどこで発行するのか」が最初は分からず、うまくダウンロードを進めることができませんでした。
そのため、本記事の【Step 4】では、あえて「Profile 画面からのトークン取得手順」から丁寧に解説するように構成しています。

2. systemd 構成ファイルの「どこを書き換えるべきか」迷う

二つ目は、systemd を使った自動起動の設定です。
構成ファイルのテンプレートを見ても「自分の環境の場合、具体的に何の情報が必要で、どこを確認して書き換えればいいのか?」が直感的に分からず、設定に手間取ってしまいました。
この経験から、設定ファイルを作成する直前に ls -lapwd コマンドを実行し、「実行ユーザー」と「jar ファイルの絶対パス」を確実に把握しておく事前準備のステップを本編に組み込みました。

公式ドキュメントを行き来しながらの試行錯誤でしたが、一度「どこに何の情報があるか」を理解してしまえば、非常にスムーズに構築できるようになります。本記事の手順が、読者の皆様の「運用自動化の第一歩」を最短ルートで踏み出すためのショートカットになれば嬉しいです!

おわりに

今回は全3回シリーズの第1回として、PagerDuty Runbook Automation のプロジェクト作成から、要となる Runner の構築と systemd を用いた自動起動設定までを行いました。

次回は、この Runner と操作対象の Amazon EC2 が安全に通信するための「AWS セキュリティおよび IAM 権限の設定」について解説します。External ID(外部 ID)を使用したセキュアな認証方法を詳しくご紹介しますので、お楽しみに!