Slide 1

Slide 1 text

Lambdaで カスタムウィジェットを作ろう 2023/10/19 JAWS-UG CLI専門支部 富士通株式会社 齋藤理沙子 © 2023 Fujitsu Limited 1

Slide 2

Slide 2 text

自己紹介 齋藤理沙子 富士通株式会社 オンプレからクラウドまで、インフラまわり色々 2023 Japan AWS Jr. Champions 2023 Japan AWS All Certifications Engineers 好きなサービス:FSx for NetApp ONTAP © 2023 Fujitsu Limited 2

Slide 3

Slide 3 text

CloudWatch カスタムウィジェット Lambdaで実装してみる CLIでカスタムウィジェットのLambdaを 実行したい…… まとめ © 2023 Fujitsu Limited 3

Slide 4

Slide 4 text

CloudWatch カスタムウィジェット ⚫CloudWatchダッシュボードのカスタムウィジェットを使うと Lambda 関数を呼び出すことができる ⚫実行した関数はHTML, JSON, Markdown 形式で結果を返却し、 ダッシュボードに表示する ⚫ダッシュボード側からパラメータを渡すこともできる © 2023 Fujitsu Limited 4

Slide 5

Slide 5 text

CloudWatch カスタムウィジェット ⚫コードで実装できればメトリクス監視以外のこともできる (パラメータの情報をグラフ描画、リソースの操作など) ⚫カスタムウィジェット内でhtmlでボタンを実装し、 クリックするとLambda関数を呼び出す、といったこともできそう (参考)developersIO「[アップデート]CloudWatch dashboardに任意のLambda関数の結果を表示 できるcustom widgetsが使えるようになりました」 https://dev.classmethod.jp/articles/cloudwatch-dashboard-custom-widgets/ © 2023 Fujitsu Limited 5

Slide 6

Slide 6 text

CloudWatch カスタムウィジェット Lambdaで実装してみる CLIでカスタムウィジェットのLambdaを 実行したい…… まとめ © 2023 Fujitsu Limited 6

Slide 7

Slide 7 text

EC2を起動/停止するカスタムウィジェット ⚫Lambdaはサーバレスでコードを実行できるサービス ⚫EC2の起動/停止を行うコード(Python)をLambda関数として 実装する ⚫作成したLambda関数をCloudWatchダッシュボードのカスタム ウィジェットに設定する © 2023 Fujitsu Limited 7

Slide 8

Slide 8 text

EC2の状態を判断して起動/停止するコード(一部) def lambda_handler(event, context): client = boto3.client('ec2’) #(中略 client.describe_instances()でインスタンスの情報を取得する) if state == "stopped": client.start_instances( InstanceIds=[ instance['InstanceId'], ], ) elif state == "running": client.stop_instances( InstanceIds=[ instance['InstanceId'], ], ) © 2023 Fujitsu Limited 8

Slide 9

Slide 9 text

停止しているインスタンス © 2023 Fujitsu Limited 9

Slide 10

Slide 10 text

ウィジェットを更新すると関数が実行される © 2023 Fujitsu Limited CloudWatchダッシュボード 10

Slide 11

Slide 11 text

インスタンスが起動 © 2023 Fujitsu Limited 11

Slide 12

Slide 12 text

カスタムウィジェットの注意点 カスタムウィジェットの利用自体に料金はかかりませんが、 カスタムヴィジェットを表示したり更新するたびにLambda関数が実行されるので、 その分Lambdaの利用料金が掛かります © 2023 Fujitsu Limited 12

Slide 13

Slide 13 text

CloudWatch カスタムウィジェット Lambdaで実装してみる CLIでカスタムウィジェットのLambdaを 実行したい…… まとめ © 2023 Fujitsu Limited 13

Slide 14

Slide 14 text

CLIでカスタムウィジェットを作った段階で Lambdaを実行したい © 2023 Fujitsu Limited > aws cloudwatch put-dashboard --dashboard-name --dashboard-body CLIでカスタムウィジェットを作るコマンド --dashboard-bodyでウィジェットの内容を指定できるので、 Lambdaをカスタムウィジェットとして指定したら Lambda関数を実行できるのでは…? 14

Slide 15

Slide 15 text

EC2を起動/停止するLambdaを 指定してカスタムウィジェットを作ってみる def lambda_handler(event, context): client = boto3.client('ec2’) #(中略 client.describe_instances()でインスタンスの情報を取得する) if state == "stopped": client.start_instances( InstanceIds=[ instance['InstanceId'], ], ) elif state == "running": client.stop_instances( InstanceIds=[ instance['InstanceId'], ], ) © 2023 Fujitsu Limited 15

Slide 16

Slide 16 text

結果 ⚫put-dashboardコマンドを実行しただけでは、カスタムウィジェッ トに指定したLambda関数は実行されなかった →GUIでCloudWatchのダッシュボード画面を開いたときLambda 関数が実行され、EC2が起動/停止された ⚫put-dashboardコマンドの--dashboard-bodyにLambda関数を指 定するとき、Lambda関数のパラメータ指定ができなかった (のでパラメータ指定不要のコードに書き換えて試した) →今のところ--dashboard-bodyでLambdaのパラメータを 指定する方法があるのか不明、今後の課題としたい © 2023 Fujitsu Limited 16

Slide 17

Slide 17 text

CloudWatch カスタムウィジェット Lambdaで実装してみる CLIでカスタムウィジェットのLambdaを 実行したい…… まとめ © 2023 Fujitsu Limited 17

Slide 18

Slide 18 text

まとめ ⚫CloudWatchのカスタムウィジェットで Lambda関数を実行した結果を表示できる ⚫CLIでもCloudWatchのダッシュボードでカスタムウィジェットを 作成するコマンド(put-dashboard)にLambda関数を指定すること で、カスタムウィジェットを作成することができる ⚫put-dashboardでウィジェットにLambda関数を指定する場合、 Lambda関数のパラメータも同時に指定する方法(があるのか)は 今後の課題 © 2023 Fujitsu Limited 18

Slide 19

Slide 19 text

参考サイト AWS「カスタムウィジェットの詳細」 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/ add_custom_widget_dashboard_about.html カスタムウィジェットサンプルコード AWS “aws-samples/cloudwatch-custom-widgets-samples” https://github.com/aws-samples/cloudwatch-custom-widgets- samples/tree/main/samples @Pretzelisa「【AWS】CLIでCloudWatchのカスタムダッシュボードを作成する」 https://qiita.com/Pretzelisa/items/b2af4c17be0223aba589 © 2023 Fujitsu Limited 19

Slide 20

Slide 20 text

© 2023 Fujitsu Limited Thank you