【3分で読める！】AWSソリューションを用いたサーバ起動停止の自動化

## はじめに
こんにちは。

先日、AWSの公式サイトで公開されているこちらのセミナー動画を視聴しました。


>2022年7月開催「AWS Builders Online Series」より
『T2-4: まず知っておきたい！サーバー開始と停止の自動化によるコスト削減の第一歩 (Level 100)』



https://resources.awscloud.com/aws-builders-online-series-japanese/bos21-t2-4-aws-builders-online-series-2023-q1-video-6


動画は初心者向けに分かりやすく作成されており、

内容も自身の業務と重なる部分があったため、覚え書きのためにもゆるっとまとめてみようと思います。


<br>


## 動画について


動画の内容を一言でまとめるなら、

**「『AWSソリューション』を活用して、サーバの起動/停止を自動化する方法の紹介」**

といった感じでした。

アジェンダは実際の動画の通り、


<br>

1. AWSソリューションとはそもそも何なのか

2. サーバの起動停止を自動化するとはどういうことなのか

3. AWSソリューション：「Instance Scheduler on AWS」


<br>

という順番で進めていこうと思います！


<br>
<br>
<br>

## 1. AWSソリューションとはそもそも何なのか？

日々の業務の中で、私たちは様々な課題にぶつかります。

「コストをもっと下げたい！」
「運用の自動化を進めたい！」

などなど…。

そして世界には、既に同じような課題にぶつかった人達が多くいるものです。

そういった"よくある課題"の解決方法をAWS側で用意し、集めてくれているのが**AWSソリューション**です。

▽AWSクラウドソリューション

https://aws.amazon.com/jp/solutions/

<br>
<br>

#### ▽具体的に何が提供されている？
AWSソリューションでは、様々な課題の解決方法として以下が提供されています。

- 既に組み合わされたAWSサービスをデプロイする**CloudFormationテンプレート**
- GitHubにて公開された**ソースコード**
- 使い方が書かれた**デプロイガイド**

これらを利用することで、より迅速に課題を解決することが可能となります。


<br>
<br>
<br>
<br>

## 2. 「サーバの起動/停止を自動化する」ということ

ここからは今回の動画のテーマである

**「サーバ起動/停止を自動化する」**

という課題について改めて考えていきます。

<br>
<br>

#### ▽サーバの起動/停止を行う必要性

起動/停止が必要となる主な理由として、**コストの削減**が挙げられます。
　
AWSは従量課金制のため、**起動時間**がコストを決める大きな要素となります。

つまり、使用していない時間帯はサーバを停止させることで、大幅なコスト削減が見込めるというわけです。

<br>
<br>

#### ▽手動でも出来るのでは？      
もちろん手動でサービスを起動/停止することも可能です。
方法としては以下のような方法があります。

<dl>
  <dt>①マネジメントコンソール</dt>
  <dd>GUIで起動/停止を操作。</dd> <dd>ただし起動のし忘れや停止のし忘れ、対象のサーバを間違えるといった人的ミスが発生する恐れがある。</dd><dd>　</dd>
  <dt>②CLI（コマンドラインインターフェイス）</dt>
  <dd>コマンドやスクリプトの実行で起動/停止を操作。</dd> <dd>複数のインスタンスを指定したり、定期的に実行する仕組みおよび環境が別途必要になる。</dd><dd>　</dd>
  <dt>③AWS SDK</dt>
  <dd>プログラムの実行で起動/停止を操作。</dd> <dd>Pythonなどを用いたプログラムの開発およびコードを実行する環境が別途必要になる。</dd><dd>　</dd>
</dl>


このように、手動でもサーバの起動/停止は可能ですが、様々なデメリットもついて回るようです。


<br>
<br>

さらに上記のことから、サーバの起動/停止を自動化するためには
大きく分けて以下2つの要素が必要であると分かりました。


<br>

**■　定期的にプログラムを実行する仕組み**

**■　プログラムとその実行環境**

<br>
<br>

これを踏まえ、AWSソリューションではどのような解決方法が用意されているのかを見ていきましょう。


<br>
<br>
<br>

## 3. AWSソリューション：「Instance Scheduler on AWS」
AWSソリューションの１つである **「Instance Scheduler on AWS」** は

まさに上記のような課題の解決策です。

先ほど述べた必要な2つの要素が、提供される**CloudFormationテンプレート**によって一気に揃います。

<br>

<dl>
  <dt>■　定期的にプログラムを実行する仕組み</dt>
  <dd>- Amazon EventBrigde</dd><dd>　</dd>
  <dt>■　プログラムとその実行環境</dt>
  <dd>- AWS Lambda　…ソースコードをGitHubで公開</dd><dd>- Amazon DynamoDB　…いつ起動/停止するかなどの設定値を保持</dd><dd>　</dd>
</dl>

そしてこれらの利点として、以下のような事項が挙げられます。


<br>

#### ★---「Instance Scheduler on AWS」の利点 ---★

<dl>
  <dt>☆ 簡単にデプロイができる</dt>
  <dd>CloudFormationテンプレートとソースコードが公開されているので、自身での構築作業やコーディングが不要。</dd><dd>　</dd>
  <dt>☆ 柔軟なスケジュール設定</dt>
  <dd>日を跨いだ時間指定、曜日指定、毎月第一月曜日…といった複雑なスケジュール設定が分単位で可能。</dd><dd>※データベースへの登録はマネジメントコンソールから実施可能。</dd><dd>　</dd>
  <dt>☆ 複数リソースにも対応</dt>
  <dd>対象のサーバ（EC2,RDS）は「タグ付け」を行うことで指定できるため、複数のリソースにも対応可能。対象の変更や追加も容易に実施可能。</dd><dd>　</dd>
</dl>


このように「Instance Scheduler on AWS」を活用することで、

**コスト改善だけでなく、作業工数の大幅な短縮**も望めそうです。


<br>
<br>

## さいごに

「AWS公式のセミナー動画」と聞くと、何だか難しそうな上に分かりにくそう…という勝手なイメージを抱いていたのですが、
いざ見始めると「へぇ、そうなんだ…」「お〜、それすご…」と穏やかに最後まで視聴することが出来ました。

個人的には、対象リソースをタグで指定できてしまうというのが驚きでした。便利すぎる…。

実際の動画ではデモも実施されておりましたので、ぜひご覧ください。

ありがとうございました！