先日 AWS イベント「AWS Summit Online 2021」に参加してきました。
その中で、個人的にとても学びが多いと感じたセッションについてご紹介します。対象セッションは以下。
AWS Summit Japan | 実践的AWSアーキテクチャ 〜LayerX INVOICEの高速開発を支える技術〜(CUS-02)(リンク先はAWS Summit 内の動画視聴ページとなっております。視聴にはログインが必要となります)
「LayerX INVOICE の高速開発を支える技術」として広範囲に渡る説明がありましたが、ここでは特に “Terraform” にフォーカスして整理してみました。
もちろん、Terraform 以外の部分も学びの多いセッションだったと思いますので、(公開されている間に) ぜひ動画もチェックしてみてください。
※お断り※
私はLayerX 社との関係はなく、本レポート作成のモチベーションとしては、シンプルに「LayerX INVOICE でのTerraform 活用には学びが多いからまとめるぜ!」というものです。
(何度もセッションを視聴したり、代表のトークセッション(後述) を視聴する中でLayerX 社のことを好きになってきたのは事実。w)
では、早速!!
まとめ
- Terraform コードを(各環境で) 流用できる状態に保つ
- Terraform によるIaC 化と手動部分の線引きを明確にする
- Terraform コードの単位(リポジトリ範囲) を明確にする
- CI/CD パイプライン × Terraform のセキュリティ対策
上記ポイントを踏まえることによって、
インフラ構築にかける作業コストを最小限に抑えつつ、
高速開発に繋げることができている。(素敵)
LayerX INVOICE とは
LayerX INVOICE とは、「バックオフィス業務のDX」をテーマにスタートしたプロジェクトから生まれたプロダクトです。
プロダクトビジョンは ”「手入力ゼロ」で請求書処理が終わる”。
具体的には経理業務の課題解決を行うものとなっております。
請求書情報の自動読取/入力から、仕訳の自動入力補完/振込データの自動作成、会計システムとの連携など、一連の請求書に関する処理をサポートしてくれるというものです。(めちゃ便利そう。)
LayerX INVOICE のインフラ構成
続いてLayerX INVOICE のインフラ構成。
大きく3つの部分に別れています。
■ (左上) ユーザー情報管理・認証基盤
- ユーザー管理・認証を担う
- フロントエンドにはNuxt を利用したSPA構成、CloudFront による配信
- バックエンドにはGo を利用しAPI サーバーを作成、Fargate を利用、ALB による負荷分散
■ (右上) 共通データ基盤
- 共通して利用するデータを管理する
■ (下部) 非同期処理・バッチ処理
- 請求書受け取りからOCR 処理や仕訳などの一連の処理を担う
- フロントエンド/ バックエンドの構成はユーザー管理・認証部分と(概ね)同じ
- ジョブキューとしてSQS を利用
- メール経由の請求書取り込み用に別途API エンドポイントを作成
LayerX INVOICE におけるTerraform 活用
今回のメインディッシュ、Terraform について。
LayerX INVOICE では可能な限りIaC に取り組んでいるとのこと。
要点をまとめると以下の通り。
→モジュールやネームスペースの追加等は行わない
→リポジトリ分割すべきサイン(目安) として判断する
→plan / apply 実行時に “-var-file=XXXXX.tfvars” のようなオプション指定を行う
→どの環境でも利用するtf ファイルを流用すための手法として有効
→一旦ダミー値を利用してリソースのみ作成し、手動で設定を変更する
→手動設定箇所は、リソースのライフサイクル設定により以後のapply でダミー値に戻ることを防ぐ(lifecycle ブロックで ignore_changes を指定)
LayerX INVOICE のCI/CD パイプライン(インフラ)
続いてTerraform を交えた、CI/CD パイプラインについて。
私もTerraform は利用しているものの、インフラのCI/CD パイプライン構築は経験がないのでかなり勉強になりました。
要点をまとめると以下の通り。
→権限が強力なため、権限周りの情報をAWS 内で閉じる(外部に出さない)
→STS 、スイッチロールを利用した権限(role) の付与
→権限付与は最小かつ最短にする
→plan 実行時には、read only 権限のみを付与する
→plan の内容がPR にコメント追加される
→管理者による承認を経て、プルリクエストがマージされる
→インフラの変更記録の透明性
→CodePipeline が実行され、ビルドステージのCodeBuild によりapply が実施される
→apply 実行時には、read and write 権限を付与する
[ 余談 ]
気になった点(自分への宿題)
前述の通り、Terraform をCI/CD パイプラインに組み込んだことがないので理解が追いついていない部分についてメモ。
● plan 結果と同様、apply 結果についてもPR のコメントとして追記して記録に残しているのか?
→恐らく残しているものと思うが、今回触れられていなかったので気になった。
→(LayerX INVOICE での現状を知りたいというよりは、) 自分が構築する際は、apply 結果も記録に残せるようにしたいな、というお話。
● plan とapply の結果が異なるような場合への対応が気になる
→plan では上手くいく(ように見える)が、apply を行うとエラーが発生するような場合があると思う。そのような場合にはどのようなオペレーションになっているのかが気になった。
→apply でエラーが発生した場合は、ブランチを新たに作成し、PR およびマージを行うことでインフラへの反映を完了させるのかな、と妄想中。
→この辺も、実際にCI/CD パイプラインを構築して運用していく際に整理しておく必要があると思うので、構築時には要確認。
AWS Startup Tech Meetup Online でも登壇されていました
実は、今回のスピーカーの一人である高江さんは、AWS Summit の前に開催された AWS Startup Tech Meetup Online #4 でも登壇されており、そちらも大変面白い内容だったのでご紹介。
(この登壇を見させていただき、AWS Summit での登壇を知る & 要チェックセッションに追加。)
以下の通り、AWS Startup 内でも評判良かったです。
AWS の意図を完全に汲んでて感動してる。。 #AWSStartup pic.twitter.com/o4t9i54sLb
— mats (@mats16k) April 27, 2021
LayerXインボイスのα版時点でのアーキテクチャです
シンプルかつベストプラクティスに沿った、最小リリースに向けて最適な構成になっている気がします!
最初からセキュリティはちゃんと検討されているのもさすがです#AWSStartup pic.twitter.com/SkeI3EfKCF— AWS Startup Community (@startups_on_aws) April 27, 2021
あくまで個人的意見だけど、今日の LayerX さんの話はまさにこれでマジで最高だった。(全てのスタートアップに当てはまるかは別途検討だけど、)とても参考になると思う #AWSStartup https://t.co/UtKBLOae39
— mats (@mats16k) April 27, 2021
AWS Startup ブログでも取り上げられてます
AWS Startup ブログの方で、株式会社LayerX 代表取締役CTO 松本 勇気氏とのトークセッションが掲載されていたので併せて紹介しておきます。→【セッション紹介】カルチャー無きスタートアップに成長なし!? ~ LayerX 代表取締役 CTO と企業カルチャーの核心に迫る~ / AWS Summit Online 2021
以下の5つが、LayerX 社の行動指針。
- Be Animal:動物的に、野性的にいこう。
- Bet Technology:技術に賭ける。テクノロジーがそこにあるか。
- Fact Base:事実に基づいたアクション。
- Trustful Team:仲間を信頼する。
- 徳:信頼を得る。ダサい勝ち方はしない。
こちらのトークセッションでは、
40名ほどの規模感で3事業を手掛ける LayerX における
”カルチャーとはなんぞや” といった部分を垣間見ることができます。
(やっぱ何か好きやな・・・。ぜひ視聴してみてくださいね。)
最後に
今回はTerraform 周りにフォーカスして学びを整理してみたが、
他にも「セキュリティ対策」や「AWSマルチアカウント管理&ガバナンス体制」、「インフラ監視&ログ管理」に関する取り組みは、それぞれ参考になる内容でした。
私が評価するのもおかしな話ですが、
各所で「実践的」かつ「適切」な配慮がなされてて、よき。
もっと雑な言い方をすれば、
見ていてめっちゃ気持ちいインフラ構成(サービス)!!、だと感じました。w
(何かよくわからんのですが、このセッションを聞いていて私は鳥肌が立ちましたw)
改めて、LayerX INVOICE が気になった方はセッション覗いてみては如何でしょうか。
AWS Summit Japan | 実践的AWSアーキテクチャ 〜LayerX INVOICEの高速開発を支える技術〜(CUS-02)(リンク先の動画がいつまで公開されているのかは不明です。また、視聴にはログインが必要となります。)
以上です。
最後まで読んでいただきありがとうございました。