【登壇】今こそ筋トレと健康をIaC化する時が来ました(GCP:Infrasturacture Managerも語りました)

Infrastructure Managerと筋肉のIaCと題して、登壇した時の内容をブログにまとめました。
2023.12.21

概要

12/15(金)クラスメソッド社内にて「Infrastructure as Code(IaC)の素晴らしさを語らせろ」という社外向け勉強会を開催しました。

詳細はこちら → https://classmethod.connpass.com/event/302466/

今回は、その時の登壇内容について、ブログで共有させていただきます。

【会場の雰囲気】

登壇資料

IaCとTerraform

IaCとは

IaC(Infrastructure as Code)は、ITインフラストラクチャの定義とそのプロビジョニングを自動化するための方法です。 Google Cloud(GCP)の場合では、Terraform(Infrasturacture Manager)、DeploymentManagerCDKが存在します。

個人的な感覚ですが、TerraformCDKが頻繁に使用されている認識があります。

Terraformとは

Google Cloudのみならず、多くのクラウドプロバイダー(AWS, Azureなど)と互換性があるIaCツールです。
これにより、マルチクラウド環境を管理するための一元化したツールとしても使用することができます。

Terraformは宣言的な構文を記述することにより、あるべき状態を定義します。よって、環境の複製差分をより簡素化して管理することが可能です。

Infrastructure Manager

GCPネイティブなIaCツール

Infrastructure Manager(Infra Manager)はGCPエコシステム内で完全に統合されており、リソースのプロビジョニング構成管理を行うために特別に設計されているGCP専用のIaCツールという位置づけになります。

Terraform仕組みを利用して、GCP環境のリソースのデプロイと管理を自動化することを可能にする優れものです。

ステートの管理

基盤はTerraformになるので、Cloud Storageバケットはもちろん、Gitリポジトリでもバージョン管理が可能です。

引用:ストレージ バケットを使用すると、構成へのアクセスを制御できます。アクセス制御を必要としない構成を使用している場合は、パブリック Git リポジトリを使用できます。

リビジョン

個別のリソースの展開のバージョンという位置付けになります。
最初にデプロイメントを作成するとき、リビジョンIDが付けられ、更新する事にこの数値が増加されます。

(例)r-0 → r-1 → r-2

後ほどコードの詳細は記述しますが、リビジョンのイメージを掴むためにデプロイ情報の一部を抜粋します。

stateDetail: revision "projects/prj-inframanager/locations/us-central1/deployments/quickstart-deployment/revisions/r-0"

このコードはInfra ManagerでデプロイしたVPCの情報であり、末尾のr-0がバージョン番号になります。

初心者でもTerraformを扱える仕組み

今回お伝えするデモの内容は、Terraformのモジュールを使って、VPCをデプロイしていきます。

通常のTerraformであれば、ディレクトリを作成し、プロバイダーバージョンの指定を行い、あらかじめ構成を保存するGCSを作成し...のような、セットアップが必要になります。

ただ、上記の画像のようにInfrastructure Managerでは、GCPのコマンドツールであるgcloudでTerraformモジュールを扱えるため、コマンド1発でリソースをデプロイすることが可能になるのです。

(もちろん、多様なリソースも簡単にセットアップできる)

このブログの下の方で、デモの短縮版を載せますが、興味のある方は冒頭に記載したスライドを参考にしてください。

筋トレと健康をIaC化

いったん、箸休めです。今回の裏メインでもある、筋トレと健康をIaCについて、私の考えをみなさまにご共有します。

事前に1点だけお伝えしておくと、下記のメニューはあくまでも個人的な経験これまで収集した知識によるものなので、参考程度にお読みください。

もし興味ない方は、Infrastructure Managerのデモから拝見ください。

前提-なぜ人はダイエットや筋トレが続かないのか?

先日Googleさんからも、Geminiがリリースされたばかりですが、現代では正しい情報もすぐにAIやコミュニティチャット、ネット検索で見つけられるようになりました。

この状況の中で考えられるのが、情報が多すぎるゆえに正しいメニューが自分で考えられない、よってダイエットが長続きしない、そういった状況です。

個人的にダイエットで目に見えた成果を出すには最低でも1ヶ月以上、筋トレで筋肥大を実感するのが3ヶ月~半年以上かかります。
この期間できつい筋トレを継続するのは難しい、、そういった気持はとてもわかります。

今回ご紹介する健康&筋トレの IaC はそのような方に向けて、基礎的なモジュール として使用いただくことを願っております。

そして誰でも取り掛かりやすいように、かなり簡潔に書いておりますので、レベル1といったような認識で見てください。

健康のIaC-食事編

上記のメニューはあくまでも私の脳内健康のレポジトリにある食事管理のモジュールです。
このテンプレートをもとに、個人により取捨選択、メニューの追加を行なってください。

例えば、上記のメニューは基本的にダイエットを主軸に置いています。
よって、筋肉を増やしたい健康的に太りたい、そういった方であれば摂取Kcalはこのメニューより+500~+1000kcalは必要になります。

こういった考え方をもとに、ボディメイクを行っていく、そういった基礎理解に役立ててください。

ダイエット = 健康じゃないよね??

ここで、上記のように「ダイエット = 健康じゃないよね??」という疑問が出る可能性があります。
確かに過度なダイエットは健康とは真逆になるかもしれません。

実際に、ボディビルやボクシングなどの試合前には、極限まで体脂肪率を低くするのですが、この時の身体は著しく免疫力が落ち、風邪などの病気になりやすくなります。(経験談含む)

ですが、そもそもそこまでの減量を一般の方がやる必要もなく、適正な食事量を調節することにより、身体へのダメージは軽減されます。(糖化などを防ぐ)

よって、まずは自身の食事量を把握し、そして今日の自分にはどのくらいの食事量が必要なのかを考え、今回の食事のモジュールを当てはめながら、よりあなたネイティブにモジュールをカスタムしてみてください。

健康のIaC-運動編

こちらのメニューもあくまでも私の脳内健康のレポジトリにある運動のモジュールです。
このテンプレートの最大の意義は、日常生活を運動に変えるという目標があります。

見てわかるように、全て皆さまが日頃から行っている生活の一部意識を切り替えることにより、運動と化すようにしているだけです。

いやいや、、具体的な筋トレを教えてくれよ。そういった声ももちろん正しいです。
ですが、1時間の筋トレよりも、1日の日常生活の方が圧倒的にダイエットにも健康にも効果的です。(もちろん筋トレも超重要ですが、1日のみの重要度を見たときの話)

皆さん、日常生活は運動です。
この運動を常日頃から継続出来れば、きついトレーニングをしなくても、結果が見えてくるはずです。

Infrastructure Managerのデモ

公式ドキュメント

ここからはInfrastructure Managerのデモを行います。
内容は完結にまとめております。

利用するのは、公式ドキュメントになります。
https://cloud.google.com/infrastructure-manager/docs/deploy-vpc-with-terraform?cloudshell=true

事前準備

APIの有効化

gcloud services enable config.googleapis.com

サービスアカウントの作成

gcloud iam service-accounts create サービスアカウントID

サービスアカウントにロールを付与

gcloud projects add-iam-policy-binding プロジェクトID --member="サービスアカウントID@test-inframanager.iam.gserviceaccount.com" --role=roles/config.agent

請求アカウントを紐づける

ここは注意が必要です。
チュートリアルにように、新規で作成したプロジェクトには請求アカウントの紐付けされておらずエラーになりますので、下記コマンドで対応してください。

gcloud billing projects link プロジェクトID --billing-account=請求アカウントID

VPCに対する操作権限を付与

gcloud projects add-iam-policy-binding プロジェクトID \
    --member=serviceAccount:サービスアカウントID@test-inframanager.iam.gserviceaccount.com \
    --role=roles/compute.networkAdmin

実際のデプロイ

VPCの作成

gcloud infra-manager deployments apply projects/プロジェクトID/locations/us-central1/deployments/quickstart-deployment \
    --service-account=projects/test-inframanager/serviceAccounts/サービスアカウントID@test-inframanager.iam.gserviceaccount.com \
--git-source-repo=https://github.com/terraform-google-modules/terraform-google-network \
--git-source-directory=modules/vpc \
--git-source-ref=master \
--input-values=project_id=プロジェクトID,network_name=VPCの命名する名前(今回はquickstart-deployment)

GCSのデプロイ

VPCのデプロイ後に、ステートを管理するGCSが作成されます。
名前はquickstart-deploymentで、VPCリソースのIDの末尾の部分が採用されています。

VPCのデプロイ

quickstart-vpcというリソースが作成されました。
こちらは任意で命名することができます。

まとめ

今回のブログは完結に書くために、省略している部分が多いです。
スライドを見ていただき、ご質問などあればコメントなどでいただければ幸いです!!

改めまして、ご来場いただいた皆さまありがとうございました。