【Cloud Automator】Amazon EC2 を定期的に起動/停止【AWS運用自動化】

記事タイトルとURLをコピーする

今期、体脂肪率を 7% 減らした技術三課の手塚です。ダイエットの成功には、我慢しなくても自然と減量が進む環境作りが重要と考えますが、この話は長いので別の機会にしましょう。

さて今回は Amazon EC2(以下 EC2) の起動・停止をノンプログラミングで自動化する方法を紹介します。 もし一日数時間しか利用せず未使用時に stop できるサーバがあれば、少ない労力でランニングコスト削減に貢献できると考えます。

概要

EC2 の起動・停止テストとして、下記の設定を行います。 - 1. EC2 を平日深夜 1:00 から 1:05 の間だけ起動すること - 2. 土日祝日は何もしないこと - 3. 起動/停止の失敗時にメール通知すること

また上記の設定をノンプログラミングで容易に設定・メンテナンス可能な運用とするため、Cloud Automator(以下 CA) を使用します。

Cloud Automator とは?

サーバーワークスが提供する AWS 運用自動化サービスです。 - 公式サイト: https://cloudautomator.com/ - 1 ヶ月間の無料トライアルがあり (2019/08/27 現在) - AWSリセールサービス(pieCe) 加入の場合、無償で利用可能です(pieCe は有償なんで、無償ではない!というツッコミありそうですが...)

準備

テスト用の EC2 を 1 台作成します。 - 参考: Linux 仮想マシンの起動 / クラウドならアマゾン ウェブ サービス 【AWS 公式】

1. 初期設定

CA とテスト用 EC2 を作成した AWS アカウントを紐付けます。

1-1. サインアップ&サインイン

こちらの手順に従います。無料トライアルの方はまずサインアップが必要です。

1-2. IAMロールによるAWSアカウントの登録

こちらの手順に従います。私が気づいた注意点が 2 つあります。

  • CA と対象 AWS アカウントの両方にサインインできること
    • 手順 (2)「IAMロールを作成」のサイト間連携に必要です
  • スタックのクイック作成ページ が正しい AWS アカウントのものであること
    • もしAWS アカウントを複数利用中の場合、誤った AWS アカウント上に IAM ロールを作成しないよう注意です

ここで作成するグループ名は任意です。以降の説明では テストサーバーグループ とします。

2. ジョブ作成

概要 の設定を実現するため、CA 上に 2 つのジョブを作成します。

起動ジョブ

  • 毎週 月 火 水 木 金 の 1:00 に EC2 を起動
    • 日本の祝日と重なる場合は実行しない
    • 起動/停止の失敗時にメール通知する

停止ジョブ

  • 毎週 月 火 水 木 金 の 1:05 に EC2 を停止
    • 日本の祝日と重なる場合は実行しない
    • 起動/停止の失敗時にメール通知する

2.1 起動ジョブ作成

[caption id="attachment_73387" align="alignnone" width="5180"]ジョブの追加 ジョブの追加[/caption] 以降のステップ 1 から 9 を実行するとジョブが完成します。

ステップ 1: グループの選択

1-2. IAMロールによるAWSアカウントの登録 で作成した テストサーバーグループ を選択します。 [caption id="attachment_73388" align="alignnone" width="5180"]ステップ1 ステップ1[/caption]

ステップ 2: トリガーの選択

タイマートリガー を選択します。 [caption id="attachment_73390" align="alignnone" width="5180"]ステップ2 ステップ2[/caption]

ステップ 3: トリガーの条件

ジョブのトリガー条件を設定します。 [caption id="attachment_73391" align="alignnone" width="5180"]ステップ3 ステップ3[/caption]

設定
実行日付/曜日 毎週 月 火 水 木 金
実行時間 1 時 0 分
例外条件 日本の祝日と重なっていた場合はアクションを実行しない にチェック

ちなみに下記は登録済の祝日一覧です (2019/08/27 現在)。 [caption id="attachment_73392" align="alignnone" width="5180"]祝日一覧 祝日一覧[/caption]

ステップ 4: 有効期間

今回は有効期間を設定しません。 [caption id="attachment_73393" align="alignnone" width="5180"]ステップ4 ステップ4[/caption]

ステップ 5: アクション

アクションとして EC2: インスタンスを起動 を選択します [caption id="attachment_73394" align="alignnone" width="5180"]ステップ5 ステップ5[/caption]

ステップ 6: AWSアカウント

対象 AWS アカウントを選択します。 [caption id="attachment_73397" align="alignnone" width="5180"]ステップ6 ステップ6[/caption]

ステップ 7: アクションのパラメータ

作成した EC2 のリージョンとインスタンス名を選択します。 また リソースの終了ステータスをチェックする にチェックします。これにより API のリクエスト成否ではなく、実際に EC2 が起動/停止したか否かの確認を行うことができます。 [caption id="attachment_73400" align="alignnone" width="1280"]ステップ7 ステップ7[/caption]

設定
リージョン アジアパシフィック(東京)
インスタンス 作成した EC2 インスタンス
リソースの終了ステータスをチェックする チェックする

ステップ 8: 後処理

起動/停止の失敗時にメール送信する設定をします。 失敗時 の右の + をクリックします。 [caption id="attachment_73402" align="alignnone" width="5180"]ステップ8 ステップ8[/caption]

後処理を入力し、追加 ボタンを押します。 [caption id="attachment_73403" align="alignnone" width="1712"]後処理 後処理[/caption]

設定
後処理名 ジョブ失敗時メール送信
グループ テストサーバグループ
サービス Eメール
メールアドレス 受信可能なメールアドレス

選択して下さい をクリックし、リストから後処理を選択します。 [caption id="attachment_73404" align="alignnone" width="6964"]後処理を選択 後処理を選択[/caption]

ステップ9: ジョブ名

ジョブ名は任意で構いませんが、ここでは テストサーバ起動 とします。 入力後に 作成する をクリックし、起動ジョブの作成は完了です。 [caption id="attachment_73405" align="alignnone" width="10380"]ステップ9 ステップ9[/caption]

2.3 停止ジョブ作成

2.2 起動ジョブ と同様の手順で作成しますが、次の 3 つが異なります。 - ステップ 3 の時刻を 01:05 にする - ステップ 5 のアクションを EC2: インスタンスを停止 にする - ステップ 9 のジョブ名を テストサーバ停止 等、重複しないものにする

ジョブの作成は以上です。

2.4 起動ジョブの動作確認

作成したジョブは、タイマーを待たずに手動実行も可能です。これにより迅速にジョブのテストを行うことができます。 [caption id="attachment_73406" align="alignnone" width="5180"]今すぐ実行 今すぐ実行[/caption]

2.5 実行ログ

運用ジョブ > 実行ログ一覧 より確認できます。 [caption id="attachment_73407" align="alignnone" width="2580"]実行ログ一覧 実行ログ一覧[/caption]

詳細 をクリックすると次のような表示となります。 [caption id="attachment_73408" align="alignnone" width="2580"]実行ログ詳細 実行ログ詳細[/caption]

まとめ

今回は Cloud Automator により EC2 の起動・停止等の作業をノンプログラミングで自動化しました。他にも AMI バックアップ等、様々なアクションが実行可能です。ぜひ一度お試しください!

以上