今週やったこと
既存のAWS環境の整備を行うための技術選定
既存のAWS環境がコードで管理されていなかったので、IaCツールをするため技術選定を行いました。
TerraformかAWS CDKが選択肢になりましたが、元々個人的にTerraformの方が経験があったし、改めて調査してもTerraformの方が保守性が高そうということでTerraformで進めることでチームで合意できました。
MWAA環境の構築
バッチ処理のワークフローを管理するためにMWAAのdev環境を構築して開発を進めていく必要がありましたので、まずはTerraformでMWAAの環境を構築しました。
構築するにあたってこちらのリポジトリのコードがかなり参考になりました。
Terraform Registryで公開されているのでおそらくモジュールとしてこちらのリポジトリのコードを使うこともできそうですが、できるだけ一つ一つのリソースを定義しておきたかったのでモジュールとしては使わずMWAAをTerraformで構築する際の実装方法の学習用途で活用させてもらいました。
まずはシンプルなDAGはMWAAのdev環境で動かせるようになりました。
ESLintに!=を禁止するルールを追加
TypeScriptでフロントエンドの実装を行う際、厳格に比較するため!=
ではなく!==
を使おうという方針をチームで決めているのですが、時々プルリクエストのコードに!=
が含まれてレビューで指摘をもらうことがあったので仕組みで解決する方法を調査しました。
おそらくLinterで警告を出して実装時点で気付けるのが一番生産性が上がるだろうと考えてESLintのルールを調べたら以下のeqeqeq
というルールで!=
などの等価演算子を禁止することができるというのがわかったので追加しました。
今週学んだこと
Lambda Labsについて
GPUのインスタンスを動かす際、Lambda Labsという会社が提供しているLambda GPU Cloudというサービスが料金は安そう。
TerraformでLambda GPU Cloudを構築している記事などはまだ見たことがないですが、今後機械学習関連のプロダクトに携わる際に活用することもあり得るので調べておきたいと思います。
Amazon RDSの証明書をTerraformで指定する方法
TerraformのRDSの証明書はca_cert_identifierで指定できるということを知りました。
選択肢としてはrds-ca-rsa4096-g1などがあるようで、有効期限などが証明書によって違ってくるみたいです。
DjangoのMiddleware
チームメンバーのプルリクエストでDjangoのMiddlewareの機能があるのを知りました。
クラスや関数としてMIddlewareを実装した後に、settings.pyのMIDDLEWARE=[]
の中に追加するとviewの呼び出し時に実行されるようです。
Terraform Registryについて
Terraform RegistryというプラットフォームでTerraformのモジュールが共有されているということを知りました。
AWS Batchの料金
AWS Batchの料金について調査しました。
AWS Batch に対する追加料金はありません。アプリケーションを保存および実行するために作成した AWS リソース (EC2 インスタンス、AWS Lambda 関数、AWS Fargate など) に対してのみ料金が発生します。AWS Batch は、AWS Batch コンピューティング環境のセットアップ時にコンピューティングタイプ要件を指定して、リザーブドインスタンス、Savings Plan、EC2 スポットインスタンス、AWS Fargate と併用することができます。割引は請求時に適用されます
Infracontでコスト監視ができそう
これからTerraformでAWS環境を管理していくにあたってコストもしっかり把握するための仕組みを作っておきたいと考えて調査しました。
Infracostというツールではワークフローを設定しておけばプルリクエストの時点でAWSのコストを算出してくれるみたいです。
既存環境をTerraformでコード化する方法
前任者がコンソールから構築したAWSリソースが複数あるので、それらも全てTerraformで管理したいと考えています。
ツールとしてはTerraformer、Terraformingなどがあるようなのでちょっとずつ触ってみたいと思います。
FigmaとFigJamについて
チームでプロダクトについて議論する際にオンラインのホワイトボードに図を書いてもらっていて、それがFigmaを使っていると思っていたのですが正確にはFigJamというツールでした。
このあたりのツールの使い方にも慣れておいたほうがプロダクト立ち上げ時の要件定義や設計の議論を効率良く進められそうだと思いました。
面白そうな記事など
システムデザインの勉強用Gitリポジトリ
システムデザインについて勉強になりそうなリポジトリがあるのを知りました。 github.com
クックパッドのFigma運用
クックパッドのFIgmaの運用方法が非常に参考になりました。
GitHubのイシューのリンクも貼っておいたり、完成したデザインとプロトタイプを分けておくなど使いやすいところは真似していきたいです。