vCPUの上限をチェックするLambdaを作成しました2019-10-24vCPUの上限をチェックするLambdaを作成しましたAWSはじめに先日、EC2の上限管理方法が各インスタンスタイプの個数ではなく、インスタンスファミリーごとの合計vCPU数となりました。rioner2525.hatenablog.com今回はこちらのアップデートに対応するため、vCPUの上限をチェックするLambdaを作りました。Alarmを用いてvCPUの閾値に達したらメールを出すといった方法になるかと思います。アラームの作成は各クォータから簡単に作成できます。作成したアラームにSNSトピックを紐づけるだけで、閾値になったらメール通知するといったチェック方法が簡単に実装できます。実際に上限を引き上げた場合はアラームの閾値を手動で変更しなおす必要があるので注意してください。この方法は多分ベストプラクティスというか、AWSさんが想定しているであろうチェック方法ですね。チェック方法2他にもLambdaでチェックする方法があるかなと思い、今回作成したのでコード紹介します。Lambdaでチェックする意味はあるのか...と考えましたが、とりあえず以下に羅列しておきます。チェックするためのリソースが1つのLambdaで完結できる。ロールを引き受けて複数アカウントを横断してチェックすることも可能。メールやslackなど通知方法や通知内容が柔軟に対応可能。コードコードの置き場所はここです。GitHub軽い解説やっていることは以下。1週間のうち最大値のメトリクスを取得する。現在の制限値と比較する。上記を各インスタンスファミリーに対して実行する。閾値を超えていたものがあったら通知する。今回は1週間のメトリクスで考えました。運用の想定としては1週間のメトリクスを見て、慢性的にEC2が起動されてきてるなーとなったら上限緩和申請を出す。スパイクで一瞬だけ閾値を超えるぐらいならスルーするといった感じです。Ruleに紐づけます。20~29行目あたり、1時間間隔のメトリクスを取得していますが間隔はなんでもよいです。最大値を取りたいだけなので。76行目など、関数を読んでいる箇所。入れていますが、これは各クォータの実際のクォータコードを入力してください。このクォータコードはリージョンごと?などでアカウントが違っても同じ文字列だと思っていますがビビって公開してません(;^ω^)その他は特に難しいコードなどもないので問題ないかと思います。何かしら読者の皆様の参考になれば幸いです。メール本文は以下のような感じになります。上限緩和の検討しましょう。CloudWatchメトリクスのURLは以下となります。https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#metricsV2:graph=~(metrics~(~(~'AWS*2fUsage~'ResourceCount~'Resource~'vCPU~'Service~'EC2~'Type~'Resource~'Class~'Standard*2fOnDemand))~period~300~stat~'Maximum~view~'timeSeries~stacked~false~title~'Running*20On-Demand*20Standard*20*28A*2c*20C*2c*20D*2c*20H*2c*20I*2c*20M*2c*20R*2c*20T*2c*20Z*29*20instances~region~'ap-northeast-1~start~'2019-10-17T03*3a00*3a00.999Z~end~'2019-10-24T02*3a59*3a59.000Z)さいごにサービスクォータのboto3を使ったLambdaをはじめて作成しましたが、制限値はぱっと取れるのですが現在値はぱっと取れないのですね...。サービスクォータが取ってきているであろうメトリクスの情報が取れますので、今回は現在値については1週間のメトリクスから取ってくる方向にいたしました。表題のメールがAWSから来ました。こちらの講演に行ってきました。投稿主アラサーの一般CCoE担当マンです。