こんにちは。 ニフクラエンジニアミートアップ事務局の鮫島です。
2023年9月13日(水)に第64回ニフクラエンジニアミートアップを開催しました。
今回は、代表的なInfrastructure as Code(IaC)のツールとして幅広く利用されている、Terraformによるインフラの自動化がテーマです。
Terraformを入り口にして、自動化がなぜ必要なのか?何から始めたらいいのか?といった内容を、インフラ構築に精通した講師陣がやさしく解説すると言う内容でした。
ニフクラで実践 Terraform 〜入門編〜
メインのセッションでは、ニフクラ/FJCloud-Vの中の人、藤井哲崇氏が「Terraformを触ってみたいとそわそわしている」人向けに、「Terraform」を動かしてみるための基礎から解説してくれました。
そもそもTerraformとは?
箇条書きにするとこんな感じです。
・HashiCorp社のIaCツール
・宣言的にインフラを管理可能
・HashiCorp Configration Language(HCL)を用いてインフラを定義
・管理するインフラ及び構成に関する状態をStateファイルに保存
図にするとこういう感じです。
かなり単純化すると、HCLで「~.tf」という拡張子のファイルを作成して、「Terraform CLI」からさまざまなコマンドを実行することでさまざまなインフラ構築を行う流れになります。
クラウドサービス上にリソースを作成する場合だと、各サービスごとに「なんとか Provider」というのが用意されているので、そちらを利用することになります。
今回はニフクラのProviderを使います。 github.com
実際にNginxサーバーを構築してみる
手順だけを説明してもなかなかイメージがつかめないので、Nginxサーバーを構築してみます。
HCLで必要なリソースの定義ファイルを作成して、ニフクラでいうところのファイアウォールグループを作成しポート80番を許可するような設定にします。
インスタンスにはNginxをインストールして、グローバルIPアドレス宛にhttpでアクセスできるかを確認するという流れです。
Nginxサーバーの作成から接続までの手順は、動画アーカイブをご覧いただくと良く理解できると思います。
チーム開発でTerraformを活用する場合
最後に、TerraformによるInfrastructure as Code(IaC)をチーム開発で生かす際の注意点です。
重要なポイントは、
Stateファイルをチーム間で共有することです。
Stateファイルは、管理するインフラの構成と状態を保存したファイルで、デフォルトではローカルに「terraform.tfstate」というファイル名で保存されます。また、テキストファイルなのですぐ中身は確認できますし、terraform stateコマンドで編集可能です。
terraform applyコマンドを実行すると、Stateファイルと構成ファイルを参照しリソースに対する作成/更新/削除のアクションが決まります。
そのため、terraform applyコマンドを実行する際には最新のStateファイルを参照する必要があり、チーム=複数名で作業する際には最新のStateファイルを共有する方法について検討する必要があります。
共有する方法は様々な方法がありますが、ここではGitLabのTerraform States機能を用いた共有手順が紹介されていました。
通常、コードを共有する手段としてよく使われるのがGitHubやGitLabといったバージョン管理ツールですが、TerraformのStateファイルの共有においては下記のような課題があるためそれなりの注意が必要になってしまいます。
・排他制御
・最新のStateファイルをgit pushし忘れるリスク
・機微情報の管理
まとめ
繰り返しになりますが、まとめです。
**Terraformの特徴
・宣言的にインフラを管理できる
・HashiCorp Configration Language(HCL)を用いてインフラを定義
・管理するインフラ及び構成に関する状態をStateファイルに保存
チーム開発の考慮
・リソースに対するアクションはStateファイルで決まる
→チーム内でのStateファイルの共有が必要
・Stateファイル管理用のバックエンドを用意して利用する **
詳しくはこちらの動画をご覧ください。
TerraformとAnsibleでニフクラにリモート開発環境を構築した話
続いて、日本仮想化技術株式会社の田中智明氏によるLTです。 実は、下記のブログ記事がわりと最近公開されたのを事前に見ていたので、今回もこういう話かな?と思っていたらちょっと違いました。
リモート開発環境の要件
下記のようなリモート開発環境を用意するにあたって…
要件は
・適当なインスタンス
・↑のインスタンスにSSH接続できる
・下記のパッケージが使える
Docker、Git、GitHubCLI
・・・といったところです。
TerraformとAnsibleを併用する事例
これを実行するツールは、TerraformとAnsibleを併用するということで、インスタンスの管理は前者、中身の管理は後者という役割分担になっているとのこと。
TerraformやAnsibleの比較とか併用については、必ず質問が出る鉄板ネタですが、実際に機能的な得手不得手があって役割を分けて併用するパターンの一つという事かと思いました。
実際に、併用する際にそれぞれのツールをどのように連携するのか?が気になるところですが、「ダサい」手動部分を無くすためにTerraformでインスタンスを構築した後、Ansibleのインベントリーとなるファイルを出力(Ansible_inventry)して、それをAnsibleが参照して実行するようにした模様。
デモ環境は下記にあります。
github.com
詳しい手順は、下記の動画をご覧ください。
ぜひ、ニフクラ/FJcloud-Vの無料枠でリモート開発環境を作ってみてください。
QAセッション
最後に、恒例のQAセッションが行われました。
今回は、本当の初心者からそこそこ使っている方まで幅広い層の方からの質問が沢山集まりました。ありがとうございます。
TerraformとAnsibleの比較
予想通りTerraformとAnsibleの使い分けや比較についての質問もありました。「インフラに変更が蓄積される」という点について「もっと詳しく」という質問がありましたが、Terraformの初心者に「Immutableなインフラストラクチャー」という概念を非常に丁寧に解説していたのが印象に残りました。
実際に、AWS等のクラウドサービスでTerraformを利用する際の細かい挙動に関する質問なども飛び出しましたが、豊富な知識を持つ回答者の皆さんよってほぼ時間通りに全質問にコメントすることができました。
詳しくは下記の動画をご覧ください。
それでは次回もお楽しみに。
最後に宣伝です。
今なら、最大半年無料でサーバー主になれるチャンス!
ニフクラのTerraformプロバイダーも利用できるFJCloud-Vをお試しください。
こちらをクリック↓↓↓↓↓↓↓