PulumiによってToilを可視化するAWSのコンポーネントを構成する

Pulumiを使ってToilを可視化するAWS上にホストされたバックエンドを管理します

December 27, 2019
pulumi aws lambda

Architecture

4年ぶりぐらいにAWSを触りました。EC2インスタンスを立てて、ルーターだのNATだの設定していた昔が懐かしいです。 けど、相変わらずGCPより使いづらいです。

普段はTerraformによってリソースを管理していますが、最近ではPulumiを使っています。 前から知っていたのですがKubeConでもセッションがあって聞いてから自動化ツールとして重宝しています。

チーム内のToilを可視化するためのファーストステップとして、SREへのお問い合わせ可視化する君を作成しました。

今日はその開発の簡単なメモを残します。

Toil: SREお問い合わせ

SREとしてお問い合わせのためのリポジトリがあって、Issueを作成することによってSREにタスクを投げることができます。

例えばSREしか権限がないような操作をSREにやってもらうことができます。特にメルペイは決済事業をやっているので誰が、何をできるかを管理しており、SREしかできないがデベロッパーが要求する操作というものが多々あります。

そのお問い合わせを各SREがさばいていますが、その数やお問い合わせのカテゴリなどが可視化できていなかったです。

そのため、SREの中で誰がどのくらい貢献(=負荷)があって、自動化すればどのくらい恩恵があるかなど根拠を示すのが難しい状態でした。

可視化の方法

Issueがassignやcloseされると、そのイベントのGithub Webhookを受け取ってDatadogにメトリクスをあげています。

アプリケーション

アプリケーション自体はJava、ビルドツールにはGradleを使っています。

アーキテクチャ

API Gateway + AWS Lambda + DynamoDBで作成しています。メトリクスはDatadogにあげています。

Architecture

Pulumiによる管理

PulumiによってAWSのリソースは管理をしています。非常に簡単ですがTerraformを置き換えるものではないので中が必要です。

Typescriptを使ってリソース管理をできるため、便利です。クラウドリソースの依存関係も命令的に逐次的に書けばいいので、そこらへんを意識することなく書くことができるのでよかったです。

例えばAWS Lambdaは以下のクラスをインスタンス化するだけでよいです。

new Function(name: string, args: FunctionArgs, opts?: pulumi.CustomResourceOptions)

そしてpulumi upするだけ。非常に簡単です。

これをAPI Gatewayとつなげたりするのですが、コードで記述できるので楽です。

最後に

来年はToilの可視化はどんどんやっていきたいです。

年末は地元の友人と飲み歩いて終わります。お疲れ様でした。