🌟

Terraform Cloud Architecture : AWS EC2 on Brainboard

2023/09/29に公開

概要

MEGAZONE JAPANのジョンです。🫡

私はTerraformが好きで、迅速に環境を構築できるようにTemplateを作成して保管しています。しかし、Templateが多くなるにつれて、その管理に頭を悩ませるようになりました。例えば、Codeを書いても、Cloud構成を見直すのを忘れてしまったり、Codeを読んで理解するための時間が無駄にかかったりしました。そこで、Terraformの可視化を行うためにGraph Commandを利用しましたが、Codeが増えるにつれて可視化が難しくなることもありました(好みの問題もあるかと思います)。このような経験から、Terraform Visualizeなどを検索していたところ、Brainboardというツールを偶然見つけました。

Brainboardとは

Brainboardは、2019年にリリースされたフランスの企業が提供するツールです。このツールはエンジニアがCloud Infraを視覚的に設計し、管理できる共同作業ソリューションです。その特徴は以下の通りです。

  • Brainboardは一回の作業で視覚的かつ直感的なソリューションを提供します。
  • Multi Cloudに対応しています。
  • Cloud Architectureを効率的に構築および維持できます。
  • 社内規格を確立および維持し、Best Practiceに基づくプロセスをシンプルにするのに役立ちます。

Diagramだけでどこまで管理できるのかが気になり、試してみました。セキュリティーと料金プランを確認したところ、問題ないようです。セキュリティーに関しては、SOC2(※)を取得し、料金はProプランが21日間無料で使えます。

※ SOC2を簡単に説明すると、Cloud Providerなどの組織が顧客のデータを安全に管理しているかどうかなどのセキュリティ体制(内部統制)を「Trustサービス原則と規準」という基準に基づいて評価し、保証するための枠組みや、評価内容をまとめた保証報告書のことです。SOC2は、一定期間(半年以上)にわたって内部統制が適切に運用されていることを保証します。

Hands-on

今回は、以下のシンプルなAWS EC2構成をBrainboardを利用して、Cloud Architecture作成、Terraform Code自動生成、Terraform Plan/Apply/Destroyまでやってみます。    

説明の流れば、各Resourceの手順を記載し、Brainboard作業に関わる部分は補足説明します。
(同じ内容は省略する)

Top Page

まず、BrainboardにLoginすると、以下のTop Pageに移動されます。
AWSのTemplate作成手順は以下の通りです。

① Cloud選択欄からAWSを選択
② New architectureをクリック
③ Template, Blank, ImportのModalが表れ、Blankを選択 
④ Architecture Nameを入力し、以下のCREATEボタンをクリック

AWS EC2構成図作成

Region

Region作成手順は以下の通りです。

① 左サイドメニューからAZを選択
② ①のResourceをDrag
③ Region: Tokyo

ResourceをDragし、右サイドメニューに表れる項目はTerraform各ResourceのOptionsとなります。
また、その項目に入力すると、自動保存されます。

VPC

VPC作成手順は以下の通りです。

① 左サイドメニューからVPCを選択し、Template上にDragする
② Resource name : main (e.g. Terraform code resource name)
③ Advanced configuration > Cidr Block : var.vpc_cidr (この変数名はVariables&localsに自動生成される)

VPCの変数作成手順は以下の通りです。

① 左サイドメニューからVariablesを選択すると、Variables&locals Modalが表れる
② vpc_cidrを選択
③ type : String
④ default : "10.0.0.0/16"
⑤ UPDATEボタンをクリック

VPCと変数までの設定ができ、Templateに戻って、右側にある小さい矢印をクリックすると、Terraform Codeが確認できます。
ちなみに、Tagsは先ほどのVariables&locals Modal上に自動生成され、修正も可能ですが、Terraform CodeはRead Onlyです。

このように、対象のResourceをTemplateにDragし、Optionsと変数を設定すると、Terraform Codeが自動生成される仕組みが理解できるでしょう。

Internet Gateway

IGWの作成手順は以下の通りです。

① IGWをTemplateにDragする
② Resource name : main
③ Advanced configuration > Vpc id : aws_vpc.main.id

すると、VPCと同じくTerraform Codeも確認ができます。

Availability Zone

AZの作成手順は以下の通りです。

① AZをTemplateにDragする
② Advanced configuration > Availability Zone : ap-northeast-1a (Region内にDragすると、Regionは勝手に設定される)

Subnet

Subnetの作成手順は以下の通りです。

① SubnetをTemplateにDragする
② Resource name : main
③ Vpc id : aws_vpc.main.id
④ Advanced configuration > Availability Zone : ap-northeast-1a
⑤ Advanced configuration > Cidr Block : var.sb_cidr

Subnetの変数作成手順は以下の通りです。

① sb_cidrを選択
② type : String
③ default : "10.0.10.0/24"
④ UPDATEボタンをクリック

Subnet Terraform Codeが生成されました。

Route Table

Route Tableの作成手順は以下の通りです。

① Route TableをTemplateにDragする
② Resource name : main
③ Vpc id : aws_vpc.main.id
④ Advanced configuration > Cidr Block : var.rt_cidr
⑤ Advanced configuration > Gateway id : aws_internet_gateway.main.id


Route Tableの変数作成手順は以下の通りです。

① rt_cidrを選択
② type : String
③ default : "10.0.10.0/24"
④ UPDATEボタンをクリック

Route Table Associationの作成手順は以下の通りです。

① Route Table AssociationをTemplateにDragする
② Resource name : main
③ Route Table id : aws_route_table.main.id
④ Advanced configuration > Subnet id : aws_subnet.main.id

Route Table Associationまで設定したので、Terraform Codeを確認しましょう。

Security Group

Security Groupの作成手順は以下の通りです。

① Security GroupをTemplateにDragする
② Resource name : main
③ Advanced configuration > Vpc id : aws_vpc.main.id

引き続きOptionsで以下のように、EgressとIngressを設定してください。

④ Advanced configuration > Egress > Cidr Blocks : "0.0.0.0/0"
⑤ Advanced configuration > Egress > From Port : 0
⑥ Advanced configuration > Egress > Protocol : "-1"
⑦ Advanced configuration > Egress > To Port : 0
⑧ Advanced configuration > Ingress > Cidr Blocks : "0.0.0.0/0"
⑨ Advanced configuration > Ingress > From Port : 80
⑩ Advanced configuration > Ingress > Protocol : "tcp"
⑪ Advanced configuration > Ingress > To Port : 80
⑫ Advanced configuration > Ingress > Cidr Blocks : "0.0.0.0/0"
⑬ Advanced configuration > Ingress > From Port : 22
⑭ Advanced configuration > Ingress > Protocol : "tcp"
⑮ Advanced configuration > Ingress > To Port : 22

Security GroupのTerraform Codeを確認します。

ちなみに、DragしてTemplateを調整することも可能です。

Key Pair

Key Pairの作成手順は以下の通りです。

① Key PairをTemplateにDragする
② Resource name : main
③ Public Key : var.pub_key (LocalでSSH Key生成しておく)
④ Advanced configuration > Key Name : var.key_name

③、④は上記で行ったように、Variables&localsから、各のTypeとDefaultを入力してください。

EC2

EC2の作成手順は以下の通りです。

① EC2(t2)をTemplateにDragする

引き続きOptionsで以下のように設定してください。

② Resource name : main
③ Advanced configuration > Ami : var.ami (e.g. "ami-04a735b489d2a0320")
④ Advanced configuration > Associate Public Ip Address : TRUE
⑤ Advanced configuration > Key Name : var.key_name
⑥ Advanced configuration > Instance Type : t2.micro
⑦ Advanced configuration > Security Groups : aws_security_group.main.id
⑧ Advanced configuration > Subnet id : aws_subnet.main.id
⑨ Extra Attributes > Depends On : aws_key_pair.main.id

EC2 Terraform Codeも確認しましょう。

EIP

EIPの作成手順は以下の通りです。

① DIPをTemplateにDragする
② Resource name : main
③ Advanced configuration > instance : aws_instance.main.id

Terraform Code

ここまでがBrainboardを使用して作成したAWS EC2の構成図です。この構成図を作成することで、Terraform Codeの生成が非常に簡単になりました。また、Terraformの初心者でも使いやすいツールだと思います。

AWS EC2 Deploy

Terraform Codeが出来上がったので、Terraform deployまでやってみます。
その前に、Cloud Providerを設定する必要があります。

Cloud Provider設定

Cloud Provider設定ページへの移動は以下の通りです。

① 右上にあるアカウントをクリック
② Cloud Providersをクリック

AWS Credentials設定手順は以下の通りです。

① AWSを選択し、+ボタンをクリック
② ModalにあるNAME, AWS ACCESS KEY ID, AWS SECRIET ACCESS KEYを入力し、SUBMITをクリック

これで、Cloud Provider設定を完了したので、Terraform Commandを動かしてみます。

Terraform Plan

TemplateのTerraformが表示される部分にはPlanボタンがありますので、それをクリックします。そうすると、LocalでCommandを実行しているかのように、Planの結果が表示されます。
ちなみに、無料プランの場合、tfstateの管理はBrainboardのバックエンドで行われています。S3などで管理したい場合は、プランを変更する必要があります。

Terraform Apply

Terraform Planが問題なく動きましたので、Terraform Applyして、AWSにDeployしてみます。

Deployができました。AWSコンソールに入って、EC2を確認すると、きちんとDeployできているようですね。

SSH接続も確認できました。

Brainboardから生成されたTerraform CodeでDeployできるところまで確認できましたので、次はDestroyしてみます。

Terraform Destroy

Destroyボタンをクリックし、AWS Resourceを削除します。

EC2がTerminatedになっていることも確認できました。

他の機能

今回は簡単なCloud Architectureを作成し、Deployを行いましたが、それ以外にもいろんな機能があるようです。無料プランでしたので、細かい部分までは確認できませんでしたが、簡単に説明すると以下のようになると思います。

  • Project管理
    • Multi Cloud ArchitectureのVersion管理
    • メンバー管理(RBAC)
  • Pull Request
    • Azure Devops, Bitbucket, GitlabにPull Request可能
  • CI/CD Design
    • YAML知識がなくても、Pipelineを視覚化することが可能
  • Terraform
    • *.tf files自動生成
    • Module、Cloud ArchitectureのVersion管理
    • Import可能

Importの方が気になりましたので、先ほど生成されたTerraform Codeを利用して、Importしてみました。
以下の左側はHands-onで作成したArchitectureで、右側がImportしたものです。TerraformにあるResourceはある程度作成できたと思いますが、やはり細かい紐づける部分まではわかりにくいと感じました。Importする際には調整が必要だと考えられますね。

Template作成したもの Importしたもの

最後に

IT業界では、Front-End、Back-End、Cloud Infraなど、さまざまなチームと協力していますが、コミュニケーションの誤解などの問題から、進行が滞ることがあります。たとえば、APIに関する最新のドキュメントが必要とされた場合、多数のMicroserviceのドキュメントをどのように管理し提供するかなどが悩みの種となることがあります。テキストファイルを作成する際、YAMLよりもMarkdownの方が時間がかかることや、IaCの作成よりもArchitectureを作成する方が時間がかかる場合もあります。ドキュメントが最新でないと、全体の効率が低下することもありますね。複雑なArchitectureの文書化は、永遠の課題の一つかもしれません。

Brainboardツールは、Diagram as Codeを実現しています。紙の上にArchitectureを描いたかのように、それらを視覚化し、管理し、Terraform Codeを自動生成できます。これにより、情報を最新の状態でチームメンバーに提供でき、Architectureにより集中することができます。ただし、IaCの出力としてはTerraformしかサポートしていないため、たとえば、AzureユーザーがBicepを希望する場合、ツールが使用できないとの意見もあるかもしれません。

個人的には、非常に興味深いツールだと思いますし、仕事に活用できる場面があれば、このツールに慣れていきたいと考えています。

以上、Brainboardについての記事でした。ありがとうございました!

MEGAZONE株式会社 Tech Blog

Discussion