富士通クラウドダイレクトブログ

初心者エンジニア向けTechBlog

富士通クラウドダイレクトブログ

初心者エンジニア向けTechBlog

【レポート】Terraformで始めるインフラ自動化超入門

こんにちは。 ニフクラエンジニアミートアップ事務局の鮫島です。

2023年9月13日(水)に第64回ニフクラエンジニアミートアップを開催しました。

fujitsufjct.connpass.com

今回は、代表的なInfrastructure as Code(IaC)のツールとして幅広く利用されている、Terraformによるインフラの自動化がテーマです。

Terraformを入り口にして、自動化がなぜ必要なのか?何から始めたらいいのか?といった内容を、インフラ構築に精通した講師陣がやさしく解説すると言う内容でした。

TerraFormで手作業を排してインフラ構築の自動化にサクセスしているイメージ

ニフクラで実践 Terraform 〜入門編〜

メインのセッションでは、ニフクラ/FJCloud-Vの中の人、藤井哲崇氏が「Terraformを触ってみたいとそわそわしている」人向けに、「Terraform」を動かしてみるための基礎から解説してくれました。

そもそもTerraformとは?

箇条書きにするとこんな感じです。

・HashiCorp社のIaCツール
・宣言的にインフラを管理可能
・HashiCorp Configration Language(HCL)を用いてインフラを定義
・管理するインフラ及び構成に関する状態をStateファイルに保存

図にするとこういう感じです。

HCLファイルでインフラを定義して、状態をStateファイルに保存

かなり単純化すると、HCLで「~.tf」という拡張子のファイルを作成して、「Terraform CLI」からさまざまなコマンドを実行することでさまざまなインフラ構築を行う流れになります。

クラウドサービス上にリソースを作成する場合だと、各サービスごとに「なんとか Provider」というのが用意されているので、そちらを利用することになります。

今回はニフクラのProviderを使います。 github.com

実際にNginxサーバーを構築してみる

手順だけを説明してもなかなかイメージがつかめないので、Nginxサーバーを構築してみます。

HCLで必要なリソースの定義ファイルを作成して、ニフクラでいうところのファイアウォールグループを作成しポート80番を許可するような設定にします。

インスタンスにはNginxをインストールして、グローバルIPアドレス宛にhttpでアクセスできるかを確認するという流れです。

nifcloudプロバイダーを使う場合のtfファイルの中身はこんな感じ

Nginxサーバーの作成から接続までの手順は、動画アーカイブをご覧いただくと良く理解できると思います。

チーム開発でTerraformを活用する場合

最後に、TerraformによるInfrastructure as Code(IaC)をチーム開発で生かす際の注意点です。

重要なポイントは、
Stateファイルをチーム間で共有することです。

Stateファイルは、管理するインフラの構成と状態を保存したファイルで、デフォルトではローカルに「terraform.tfstate」というファイル名で保存されます。また、テキストファイルなのですぐ中身は確認できますし、terraform stateコマンドで編集可能です。

terraform applyコマンドを実行すると、Stateファイルと構成ファイルを参照しリソースに対する作成/更新/削除のアクションが決まります。
そのため、terraform applyコマンドを実行する際には最新のStateファイルを参照する必要があり、チーム=複数名で作業する際には最新のStateファイルを共有する方法について検討する必要があります。
共有する方法は様々な方法がありますが、ここではGitLabのTerraform States機能を用いた共有手順が紹介されていました。

GitLabのTerraform Stateを使用する理由とは?

通常、コードを共有する手段としてよく使われるのがGitHubやGitLabといったバージョン管理ツールですが、TerraformのStateファイルの共有においては下記のような課題があるためそれなりの注意が必要になってしまいます。

 ・排他制御
 ・最新のStateファイルをgit pushし忘れるリスク
 ・機微情報の管理

まとめ

繰り返しになりますが、まとめです。

**Terraformの特徴
 ・宣言的にインフラを管理できる
 ・HashiCorp Configration Language(HCL)を用いてインフラを定義
 ・管理するインフラ及び構成に関する状態をStateファイルに保存

チーム開発の考慮
 ・リソースに対するアクションはStateファイルで決まる   →チーム内でのStateファイルの共有が必要
 ・Stateファイル管理用のバックエンドを用意して利用する **

詳しくはこちらの動画をご覧ください。

youtu.be

TerraformとAnsibleでニフクラにリモート開発環境を構築した話

続いて、日本仮想化技術株式会社の田中智明氏によるLTです。 実は、下記のブログ記事がわりと最近公開されたのを事前に見ていたので、今回もこういう話かな?と思っていたらちょっと違いました。

devops-blog.virtualtech.jp

リモート開発環境の要件

下記のようなリモート開発環境を用意するにあたって…

Visual Studio Code

要件は
 ・適当なインスタンス
 ・↑のインスタンスにSSH接続できる
 ・下記のパッケージが使える
  Docker、Git、GitHubCLI

・・・といったところです。

TerraformとAnsibleを併用する事例

これを実行するツールは、TerraformとAnsibleを併用するということで、インスタンスの管理は前者、中身の管理は後者という役割分担になっているとのこと。

TerraformやAnsibleの比較とか併用については、必ず質問が出る鉄板ネタですが、実際に機能的な得手不得手があって役割を分けて併用するパターンの一つという事かと思いました。

実際に、併用する際にそれぞれのツールをどのように連携するのか?が気になるところですが、「ダサい」手動部分を無くすためにTerraformでインスタンスを構築した後、Ansibleのインベントリーとなるファイルを出力(Ansible_inventry)して、それをAnsibleが参照して実行するようにした模様。

デモ環境は下記にあります。
github.com

詳しい手順は、下記の動画をご覧ください。

youtu.be

ぜひ、ニフクラ/FJcloud-Vの無料枠でリモート開発環境を作ってみてください。

QAセッション

最後に、恒例のQAセッションが行われました。
今回は、本当の初心者からそこそこ使っている方まで幅広い層の方からの質問が沢山集まりました。ありがとうございます。

TerraformとAnsibleの比較

予想通りTerraformとAnsibleの使い分けや比較についての質問もありました。「インフラに変更が蓄積される」という点について「もっと詳しく」という質問がありましたが、Terraformの初心者に「Immutableなインフラストラクチャー」という概念を非常に丁寧に解説していたのが印象に残りました。

インフラに変更が蓄積されるか否かの説明はなかなか難しい

実際に、AWS等のクラウドサービスでTerraformを利用する際の細かい挙動に関する質問なども飛び出しましたが、豊富な知識を持つ回答者の皆さんよってほぼ時間通りに全質問にコメントすることができました。

詳しくは下記の動画をご覧ください。

www.youtube.com

それでは次回もお楽しみに。

最後に宣伝です。
今なら、最大半年無料でサーバー主になれるチャンス!
ニフクラのTerraformプロバイダーも利用できるFJCloud-Vをお試しください。
こちらをクリック↓↓↓↓↓↓↓