AWS LambdaでRubyを実行してiOSアプリの証明書とかの有効期限をSlackに通知する を利用してmobileprovisionやcertの有効期限を定期的にSlackに投稿していたのですが、先日何故か動かなくなりました。
修正ついでに先日AWS Fargateがスケジュール実行をサポートされたので、そっちに移行する事にしました。
TL;TR
アプリ入れたDockerイメージ公開したので、それ使ってFargateで実行すれば通知してくれます。
Lambda版からの変更点
nodeを削除してrubyのみへ
Lambda版ではNode側でAppleDeveloperPortalのID/PassとSlackのWEBHOOKURLをKMSで復号していました。Dockerコンテナにrubyとnodeの両方のランタイムを入れると無駄にサイズが大きくなるので、ruby側に寄せました。
ruby, fastlaneを最新へ
TravelingRubyやLambdaのサイズ制約がなくなりましたので、存分に最新版を使えます。
CloudFormation
今回のアプリが入ったDockerイメージはdockerhubで公開しているので、Fargate側で指定して実行するだけで動かせます。動かすためのIAM Role, ECSのタスク定義, ECSのクラスタまでを作成するymlを書きました。
CloudFormationにはスケジュール実行のリソースもあるのですが、実行するVPC情報が必要で不特定多数向けに正常動作するように書くのは面倒だったので省きました。
かわりに作成時のスクショを置いておきます。
スケジュール実行の定義
名前は適当につけましょう。 cron(0 1 1 * ? *)
で毎月1日の10時JSTに実行されます。
コンテナの上書きの箇所で環境変数を変更します。ID
, PASS
, WEBHOOKURL
にはKMSで暗号化したものを入れます。
これで毎月1日に有効期限がSlackに通知されます!
ところで
アプリ側のコード変えてないのですが、Fargateでちゃんと動いています。なんでLambda版は失敗しだしたんでしょうかねぇ。。たぶんApple側の変更で古めのfastlaneだとうまく取得できていなかった・・・とかでしょうか。
Repo
Source: https://github.com/hands-lab/ios-cer-profile-expiration-date-checker
DockerImage: https://hub.docker.com/r/rplusplus/ios-cer-profile-expiration-date-checker/