moderato.適度に歩くように中くらいのテンポで。vlayusukeTweetきっかけ仕事の中で複数持っている自分のタスクを効率よくこなしていくのとともに、散らばっている情報を一つに集約して常に整理していくのはとても重要なことだと思っています。前者に関して、自分のプロジェクト内のタスクコントロールはヌーラボさんのBacklogで完結していて、ものすごく重宝しているのですが、Backlogで管理している課題よりももっと細かい粒度のタスクを個人レベルで管理するにあたって、ガントチャートレベルで期限日を重要度を意識しながらコントロールしていくのがどうも苦手なので、とりあえずこの目的を達するために管理の手段としてredmine使おうと思い、どうせだったら個人で保有しているAWSアカウントの中に、redmineのAMIを使用したEC2インスタンスを立ててしまえばいいじゃん、となったわけです。ところが自分のAWSアカウント、使い始めてかれこれ数年になるので、残念ながら無料枠は使えません。コスト削減のために、自分が普段のルーチンとしてタスクの棚卸をする時間帯だけ起動させるようにしたい、と思ったのがそもそものきっかけです。Lambdaの勉強を掘り下げていたこともあったので、せっかくならば自分でコードを書いてLambda関数を作り、その機能でコントロールさせてあげればいいなと。Lambdaの特徴としては、インフラストラクチャの運用管理が不要イベントドリブンであることコスト効率が高いの3つが挙げられるのですが、何気に2番目って、自分の観測範囲ではなかなか使われていなかったので、この機会に使ってみようと思ったわけです。EventBridgeを使ってLambda関数と連携してあげればOK。いうわけでさっくりとLambda関数上でワークフローを組み上げました。そんなに難しいことはしていません。Lambda関数上で組んだワークフローとりあえず器として”EC2-Auto-Start-Stop”というLambda関数を作成し、トリガーとしてEC2インスタンスを起動するためのEventBridgeトリガーと、EC2インスタンスを停止するEventBridgeトリガーを追加。SNSトピックも送信先として追加。これだけなんですけれどもね。EventBridge側の設定まず最初に、それぞれのEventBridgeのトリガーとして、今回はスケジュールで実行するので、起動・停止したい時刻をcron式で定義してあげます。次に、イベントを起動してあげたいLambda関数を指定します。この時、EC2インスタンスのタグを読み取ってイベントを起動する、というやり方もあるのですが、自分の場合は、Lambda関数のevent引数の中に、起動対象のEC2インスタンスが所属するリージョン情報と、起動したいのか、停止したいのかを示すフラグをjsonで渡してあげるようにしました。Lambdaのイベントターゲットの定義Lambda関数にコードを書くここで、いよいよLambda関数のコードを書いていきます。今回はサクッと書きたいためにラインタイムは”Python3.9′′を選択。アーキテクチャは採用されたばかりの”arm64′′を選択します。デフォルトで作成される”lambda_function.py”に書いたコードは以下の通り。}ざっくり解説すると、EventBridgeの入力の設定で設定したリージョン情報と起動・停止のフラグを読み込んで、EC2インスタンスのタグで自動起動停止設定が”1′′(true)になっているインスタンスIDを探し出し、順繰りに起動または停止してあげるだけというものすごく簡単なコードです。簡単すぎて申し訳ない。まとめこんな感じで、意外にも簡単に、EC2インスタンスを決まった時間に自動的に起動停止する仕組みが出来上がりました。EventBridgeからLambda関数がイベントドリブンでどのように連携されていくのかということをハンズオンレベルで理解ができるというのはいいですね。SOA)でも出てきたりするので侮れないです。これからもこんな感じで楽しみながらコーディングしたり設計したりしつつ、AWSの持つ各サービスの仕組みを理解していきたいと思います。WordPress.。