はじめに
時代は、IaC(Infrastracture as Code)が主流ということで、コードに苦手意識ある私が開発環境を整え、Terraformの基本知識を学習したことのまとめです。
勉強方法
最初は独学で調べながら、既存のコードをWindowsでのWSL環境でapplyできるように、コードに変更を加えたりしていたのですが、基礎を学ばなければ応用はできぬと限界を感じたのでUdemyの講座を受講しました。
受講した講座を参考に、改めて、開発環境を整えるところからTerraformの基本の"き"
を記事を書いています。
具体的にはよく使うコマンドや必要不可欠な設定ファイルについて触れようと思います。
受講講座:AWS と Terraformで実現するInfrastructure as Code
※使用しているバージョンが古かったが、基本を学ぶには非常にわかりやすかった。
Terraformとは
Terraformは、クラウド上のサーバー(AWSのEC2など)やネットワーク、データベースといったリソースを、コード(HCLという言語)で記述し、そのコードを実行することで自動的に構築・変更・削除できるようにします。
主な特徴は以下の通りです。
コードによる管理: マウス操作ではなく、テキストファイルにインフラの構成を記述
マルチクラウド対応: AWS, Azure, GCPなど、様々なクラウドやサービスに対応
状態管理: terraform.tfstateファイルにより、インフラの現在の状態を把握し、必要な差分だけを適用できる
ローカル環境の整備
まずはTerraformが動かせるローカル環境を整えます。
※前提AWSの管理者権限アカウントを保有、私の環境がWindowsのためWindowsで、VScodeをしようして構築している話を記載しています。
AWS CLIインストール
AWSをコマンドで操作・管理する公式ツールです。
ブラウザにて「aws cli download」で検索していただき、上の方に出てくるAWS公式のページからインストーラをダウンロードして、インストールいただければ問題ないです。インストール時の設定もデフォルトで問題なかったです。
インストールが完了しているかは以下をコマンドプロンプトで実行してみて、AWS CLIのバージョンが返ってくればOKです。
aws --version
GitBathインストール
terraform推奨のWindowsでの開発環境です。ブラウザで「git download」と検索して、git公式のサイトにてインストーラをダウンロード、インストールです。インストール時にいろいろオプションがあり、基本はデフォルトで問題ないですが以下2点を変更しました。
・デフォルトのエディタを「Use Visual Studio Code as Git’s default editor」
・チェックアウトとコミット時に、ファイルの改行コードを自動変換するかを設定する個所で、デフォルトでは自動変換がオンになっているので、変換させたくない場合は一番下の「Checkout as-is, commit as-is」を選択しました。
以下をコマンドプロンプトで実行し、インストールが正常に完了していればgitのバージョンが表示されればOKです。
git version
ここから初期化作業です。以下コマンドで順に自身のEメールアドレス、名前を登録し、最後のコマンドで登録を確認します。
git config --global user.email "自分のEメールアドレス"
git config --global user.name "自分の名前"
git config --global --list
tfenv、Terraformのインストール
tfenvは、Terraformのバージョンを管理、切り替えるツールです。これをインストールしておくことでTerraformのバージョンをコマンドのみで切り替えできるようになります。
tfenvは、tfutils/tfenvのGitページからクローンを行います。GitBathにて以下のコマンドを実行します。
git clone https://github.com/tfutils/tfenv.git "任意のフォルダ"
クローンが完了するとフォルダ内 binフォルダがあるので、以下の手順でパスを設定します。
1、C:¥Users¥[自身のユーザー名] 配下に「.bashrc」というファイルを作成します。
2、「.bashrc」を開き、「export PATH=$PATH:"ダウンロードしたパス"/bin
」と記載して保存します。
3、GitBathを再起動して、以下コマンドを実行してバージョンが返ってくれば、パスが通っていることが確認できます。※この時、WARNINGが表示されるが無視で問題ないです。
tfenv
ここからようやくTerraformのインストールです。
1、GitBathにて、使用可能なTerraformのバージョンを確認します。
tfenv list-remote
2、必要なバージョンを以下のコマンドでインストールします。
tfenv install "最新バージョン"
3、以下コマンドでインストールしたバージョンを使用する設定をし、使用するバージョンが正常に表示されればTerraformが使用できる状態です。
tfenv use "使用するバージョン"
terraform version
Terraformの基本の"き"
開発環境も整ったので、Terraformでよく使うコマンドや重要なファイルについてまとめています。
コマンド
覚えておくべき、よく使うコマンド集です。
| コマンド | 動作 | 備考 |
|---|---|---|
| terraform init | Terraform初期化&必要なプラグインをダウンロード | 新しいTerraformの環境構築時は必ず実施 |
| terraform fmt | 設定ファイルを標準的な形式にフォーマット | |
| terraform plan | 変更計画の確認 | ErrorやWarningの確認が適応前に可能 |
| terraform apply | 適応 | -auto-approveでyesの入力を省略できる |
| terraform destroy | 削除 | -auto-approveでyesの入力を省略できる |
main.tfやproviders.tf
Terraformは複数のプロバイダー(AWS、Azureなど)に対応しているため、プロバイダー情報やTerraformのバージョン情報を記載する必要があります。
任意なファイル名で問題ないがmain.tfやproviders.tfにすることが多いです。
terraform {
required_version = ">=0.13" # Terraformのバージョン指定0.13以上
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.33.0"
}
}
}
provider "aws" {
profile = "terraform"
region = "ap-northeast-1" #メインで使うリージョン(東京)
}
terraform.tfstate
このファイルはTerraformを1回でもapplyすると自動生成されます。
Terraformが管理するすべてのインフラストラクチャの「現在の状態」を記録しているJSON形式のファイルです。
Terraformはこのファイルを参照することで、実際のインフラ(AWSなど)とコード(HCL)の間の差分を把握し、次に行うべき変更(作成、更新、削除)を判断します。
あまり触ることはないですが重要ファイルです。
terraform.tfvars
よく使う変数(variable)をまとめるファイルです。このファイル名にしておくとTerraformが自動的に読み込んでくれます。以下のように記載します。
変数名 = "値"
プロバイダー公式ドキュメント
Terraformコードで定義する際の、正確なリソース名、必須となる引数(パラメータ)、および利用可能な設定オプションを知るために、プロバイダー公式ドキュメントを確認します。AWSのページをリンクしておきます。
AWS Provider
HCL2 という言語
HCL2(HashiCorp Configuration Language Version 2)は、HashiCorp社が作成した言語です。JSONと違い、リソースの最終的な形で記述することが特徴の一つです。
以下に書き方の例を記載します。
<タイプ> "<ラベル1>" "<ラベル2>" {
<属性> = <値>
<ネストされたブロック> {
# ...
}
}
resource "aws_vpc" "main" {
# resource はタイプ、"aws_vpc" はリソースタイプ、"main" はローカル名(ラベル)
cidr_block = "10.0.0.0/16" # 属性 (Attribute)
tags = {
Name = "MyVPC" #任意のVPC名
}
}
まとめ的な感想
今回はTerraformについての基本の"き"というのをテーマに、座学的なことを中心に書いてみました。Terraformに詳しい方からするとアレの話はどうした!!コレについては触れないのか!と言われそうですが、私が学んでいてまずは開発環境を整えんと始まらんということでそっちが中心になってます。他Terraformについては、ここは抑えておいた方が良いなというポイントを独断と偏見でまとめてみました。これからTerraformを始める人への一助となれば幸いです。