これは「弁護士ドットコム Advent Calendar 2021」の 22 日目の記事です。
はじめに
AWSに既存で構築しているインフラリソースをコードとして吐き出したいという需要があるかと思います。
その中でFormer2を使う選択をする方は多いのではないでしょうか?
私もこれまでFormer2を使用してCloudFormationやCDKを生成してきましたが、その中で注意するポイントがいくつか見えてきたので以下に記載します。
0. Former2とは
既存のAWSリソースからインフラコードを生成してくれるサードパーティのツールです。(AWSのサービスではない)
CloudFormation、CDKやTerraformのテンプレートを生成してくれます。
また、試験段階ではあるもののFormer2 CLIというコマンドライン上でFormer2を実行できるライブラリもあります。
https://former2.com/
1. 注意点
1.1 出力されるインフラコードを信頼しすぎないこと
Former2はあくまでサードパーティツールです。
そのため、リリースされたばかりののサービスのインフラコードを出力しようとすると対応していなかったり、対応していても不具合があったりします。
私の例で言えば手動で立てたOpenSearchのインフラリソースをコード生成した際に、重複するパラメータが出力される不具合に遭遇しました。
出力されるインフラコードが本当に正しいかは、常に確認を取るのが安全です。
1.1.1 Former2のインフラコードの確認方法
CloudFormationについてはcfn-lintというlintツールがあります。
cfn-lintはCloudFormationテンプレートの構文が間違っていないかを確認することができます。
そのため、CloudFormationをデプロイする際のバリデーションエラーに遭遇する頻度を少なくすることができます。
cfn-lintはVScodeのプラグインとしても用意されていて、インストールするとプロパティ補完機能も使えます。
また、デプロイするCloudFormationテンプレートが何をAWS上に構築するかを確認するRainを入れるのもオススメです。
1.2 アクセスキーの権限は必要最低限にすること
Former2を使用してAWS のリソースを取得するには IAM ユーザーのアクセスキーが必要になってきます。
公式ドキュメントでも書いていますが、Read Onlyの権限のみを渡すようにしてください。
アクセスキーをFormer2に渡すのが不安な方は、以下で公開されているリポジトリをクローンしてDockerを立ち上げることで、ローカルで起動することもできます。
https://github.com/iann0036/former2
1.3 CDKはLow Level Constructで生成される
Former2はCDKも生成することができますが、現在(2021年12月時点)の仕様だとLow Level Constructと呼ばれるライブラリで記述されたコードで出力されます。
しかし、CDKをよく使う方はご存知だとは思いますが、High Level Constructと呼ばれるライブラリを使う方が記述量も少なく済み、後にリファクタを進めていく上でもいいです。
また、Former2で生成されたCDKのコードはプログラミング的視点で見ると、冗長なものになっていることが多いので共通化するなどの工夫をした方が後々の運用を考えるといいです。
Former2から生成されたCDKをどう使うかにもよりますが、注意してください。
※Construct Libraryについては以下の記事で詳しく説明してくれています。
https://dev.classmethod.jp/articles/aws-cdk-construct-explanation/
3. まとめ
Former2はAWSが推奨しているツールとはいえあくまでサードパーティのツールです。
何かあった際に責任を取るのは使用した側になります。
便利なのは間違いありませんが、注意をして活用するようにしていきましょう。