AWSのサーバはオンプレミスと比較して高い?
はい、高くて当たり前です。だって超絶高機能ですもん。
(自動バックアップや、リソース拡張はほぼ無限)
でもコストを下げることは十分に可能。
使っていない時はサーバを停止すればOK。
例えば検証や開発環境は使いたい時だけサーバを起動すればいい、という時あるよね。
もしくはケチケチ精神で平日日中帯だけサーバを起動させておく、といった運用もあり。
このようなコストを少しでも節約しつつ、運用を自動化することがAWSなら簡単にできる。
このようなサーバの自動起動、自動停止はEventBridge + Lambdaを使えば同じような対応ができる。
むしろ昔からそのような方法がメジャーだった。
でも祝日も考慮するとちょっとしたロジックが必要になってくるよね。
はたまたLambdaを使うとランタイムライブラリのサポート期限も気にする必要が出てくる。
そもそも俺はアプリ開発者じゃないのでPython全くわからんw
というわけで、今回は「Systems Manager」を使って
平日日中帯(9:00-18:00)のみEC2を起動させるような設定をやってみた。
実際に試したのは半年以上前ですwwwwwww
ブログに書くのサボってましたwwww
元ネタ:https://dev.classmethod.jp/articles/ec2-startstop-withchangecalendar/
クラメソさんいつもありがとうございます。
カレンダー作成
まずはカレンダーの作成。
Systems Managerを開いて、「Change Calandar」から「変更カレンダーを作成」をクリック。
次に「カレンダー名」に任意の名前を入力。
カレンダータイプは「デフォルトで開く」を選んでカレンダーを作成する。
カレンダーが作成できたら、「イベントを作成」をクリックする。
予定されたイベントを以下の通り設定する。
- スケジュールされたイベントの名前 : 任意
- イベント開始日 : 直近土曜の00:00:00
- イベント終了日 : 直近土曜の23:59:59
- タイムゾーン : (GMT+09:00) Asia/Tokyo
- 繰り返しをチェック
- Weekly
- Every week
- SuturdayとSundayを選択
- Repeat forever
これで土曜と日曜に予定が入った。
あとは同様にして祝日のイベントも追加していく。
つまるところ、この作成したイベントの日にちが終日EC2が起動しない日となる。
休日の設定が完了したら、
次にカレンダーの「説明」タブをクリックして、「Calendar use」の項目を展開して、カレンダーのARN情報をメモする。
Systems Managerリソース作成
Cloudformationを使う。
リンク先のテンプレートファイルをDLして、Cloudformationからスタックを作成する。
「テンプレートの準備完了」を選択し、「テンプレートファイルのアップロード」からDLしたyamlファイルをアップロード。
スタックの名前は適当。
パラメータはそれぞれ以下の通り設定する。
- ChangeCalendarARN : 先ほど確認したカレンダーのARN
- CronExpressionStart : EC2を起動する時間(CRON形式)※これだと9:00
- CronExpressionStop : EC2を停止する時間(CRON形式)※これだと18:00
- IAMRoleName : Systems Manager用のロール。デフォルトのままでOK
- ResouceGroupName : EC2をグルーピングする名前。デフォルトのままでOK
- EC2TagKey : タグキーの指定。デフォルトのままでOK
- EC2TagValue : タグ値の指定。デフォルトのままでOK
- DocumentNameStart : カレンダーに表示される名前。デフォルトでOK
- DocumentNameStop : カレンダーに表示される名前。デフォルトでOK
あとは普通にスタックを作成。
成功すると、「リソース」タブが全てCREATE_COMPLETEになる。
EC2にタグ付与
自動起動・停止させたいEC2にタグを設定する。
Key:EC2Calendar
Value:true
このタグを付与したEC2だけが自動実行の対象となる。
実際に起動時間もしくは終了時間になると、Systems Managerのオートメーションが働く。
以下の画面では18:00(09:00 GMT)にEC2が2台停止している。
自動停止もしくは自動起動を止めたい場合
時間外にメンテナンス作業がある等で、自動停止(起動)を一時的に止めたい場合は
設定したタグをtrue以外にすればOK。
逆にtrueに戻さないと自動実行の対象とならないので注意。
カレンダー通りに運用させたい場合は便利
土日以外の祝日や年末年始・GWなど、カレンダーの営業日だけ動かしたい、といったニーズに合致するかと。
事実、この運用でEC2の利用料を1ヶ月間常時起動した時よりも半額以下に抑えることに成功してます。
1ヶ月常時起動=720時間(24H * 30日)
平日日中起動=180時間(9H * 20日)
起動時間だけで見ても1/4なので、EC2の利用料としては多めに見積もって1/3は減らせられる。
使い時にだけ課金されるという従量課金モデルだと、運用次第でかなりコストを下げることが可能。
少しでもコストを下げたい方はお試しあれ!
0 件のコメント:
コメントを投稿