Rundeck: AWS CLIによるEC2サーバ起動&停止ジョブの作成

rundeck_eyecatch

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

小ネタです。

ジョブ管理ツールである『Rundeck』で、EC2サーバの起動・停止を行なう為のジョブ作成についてその手順をまとめておこうと思います。

Rundeck導入先のEC2サーバにて実行環境を準備

とは言っても、特に難しい事をする訳ではありません。RundeckをインストールしているEC2サーバ上でAWS CLIを使える状態にしておき、Rundeck上でAWS CLIコマンドを実行するだけです。

インスタンス起動後、サーバにログインしてaws configureコマンドで必要なクレデンシャル情報を手動入力しておくでも良いですし、

# 動作検証用に別途jqを入れました
$ sudo yum -y install jq

# 設定前の状態:権限無しで実行出来ず
$ aws ec2 describe-instances --region us-east-1 | jq '.Reservations[].Instances[].InstanceId'
Unable to locate credentials. You can configure credentials by running "aws configure".

# aws configureによるクレデンシャル情報の設定
$ aws configure
AWS Access Key ID [None]: (所定のACCESS_KEY_IDを入力)
AWS Secret Access Key [None]: (所定のSECRET_ACCESS_KEYを入力)
Default region name [None]: us-east-1
Default output format [None]: 

# 再実行
$ aws ec2 describe-instances --region us-east-1 | jq '.Reservations[].Instances[].InstanceId'
"i-c3xxxxxx"
"i-62xxxxxx"
"i-32xxxxxx"
"i-22xxxxxx"
"i-edxxxxxx"
"i-24xxxxxx"
"i-a4xxxxxx"
"i-91xxxxxx"

EC2インスタンスにIAM Roleを割り当てておき、そのIAM RoleにEC2起動・停止を実行する為の権限を付与させてAWS CLIでその情報を使って実行させる、でも良いかと思います。下記キャプチャではIAM RoleにPowerUserAccessのポリシーを割りてています。

rundeck-execute-ec2-start-and-stop_01

(ちなみにIAM Roleの権限が無い場合は以下の様なエラーメッセージとなります/Rundeck実行ログより抜粋)

A client error (UnauthorizedOperation) occurred when calling the StartInstances operation:
  You are not authorized to perform this operation. Encoded authorization failure message: FiO(中略)PlSg
Result: 255
Failed: NonZeroResultCode: Result code was 255
Execution failed: 6: [
  Workflow result: ,
  step failures: {1=Dispatch failed on 1 nodes: [localhost: NonZeroResultCode: Result code was 255]},
  Node failures: {localhost=[NonZeroResultCode: Result code was 255]},
  flow control: Continue,
  status: failed]

Rundeck: Jobの作成と実行確認

では実際にジョブを作成してみましょう。プロジェクト作成後に新規ジョブ作成を行い、ジョブ名及び説明文に情報の設定を行います。

rundeck-execute-ec2-start-and-stop_02

コマンドは所定のインスタンスIDを指定したEC2起動のコマンドを設定。(下記画面ではリージョンのオプション指定を行っていますが、こちらはIAM Roleによる権限付与を行っていた(=aws configureによるリージョン指定を行っていない)為、実行時にオプション指定しています)

rundeck-execute-ec2-start-and-stop_03

[save]ボタンを押下しステップとして保存しておき、ジョブを作成します。

rundeck-execute-ec2-start-and-stop_04

ジョブ作成完了。まずは動くかどうかの確認です。[Run Job Now]で即時実行してみます。

rundeck-execute-ec2-start-and-stop_05

実行完了。ログを確認してみると、ちゃんと実行出来ていますね。

rundeck-execute-ec2-start-and-stop_06

あとはジョブの編集で、所定のサイクルでジョブが実行される様に設定しておけばOKです。

rundeck-execute-ec2-start-and-stop_07

さいごに

以上、Rundeck経由でEC2サーバの起動・停止を行なう設定に関するご紹介でした。そこまで手順を煩わせる事無く実現が可能となっていますので、興味のある方は是非試してみてはいかがでしょうか?こちらからは以上です。

AWS Cloud Roadshow 2017 福岡