「AWS」×「Terraform」でインフラ自動化に挑戦してみよう「AWS」×「Terraform」で学ぶクラウド時代のインフラ管理入門(1)

自動化ツールの一つである「Terraform」について、これから学ぼうという方、使っていきたい方を対象に、Terraformの導入方法や、基本的な使い方を紹介していきます。初回は、Terraformの概要と導入方法を解説します。

» 2023年06月26日 05時00分 公開
[鎌田啓佑サイオステクノロジー]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

はじめに

 Amazon Web Services(AWS)やGoogle Cloud Platform(GCP)などのパブリッククラウドは、オンプレミス環境と違ってインフラリソースの作成や削除が容易です。一方、管理すべきインフラリソースの種類が多岐にわたり、その数も多くなりがちです。用意するインフラリソースの目的に応じてネットワークやリージョンを使い分ける場合、インフラ管理は非常に煩雑なものになります。

 このような状態でクラウドリソースを変更、管理しようとすると、部門やプロジェクトごとに使用しているリソースの一覧を管理しているドキュメントの加筆、修正などが必要です。特に、クラウドの場合、手軽にリソースの作成や削除が可能であるため、リソースの作成状況とドキュメントを合わせる手間が課題になってきます(中には割に合わないと感じる人も少なくないでしょう)。

 またリソースの作成や削除が手軽であるために、一時的に作って使用したリソースがそのまま残りがちです。そのリソースが従量課金対象の場合、利用料の請求書が届いて思わぬ支払いが生じたなんていう事態につながることもあるかもしれません。

 こうした業務負荷、ヒューマンエラーを軽減できるとして注目されているのがインフラの自動化(Infrastructure as Code:IaC)です。本連載では、IaCツールの一つである「Terraform」について、これから学ぼうという方、使っていきたい方を対象に、導入方法や、基本的な使い方を解説します。

Terraformとは

 Terraformは、インフラをコードで表現し、その構築を自動化できるツールです。そのコードは独自形式である HCL(Hashicorp Configuration Language)で記述します。テキストファイルで記述するため、Gitなどのバージョン管理システムとも親和性が高いです。

 インフラをコードで表現したファイルのことを、Terraformの公式サイトでは「設定ファイル(configuration files)」と呼んでいます。Terraform以外の設定ファイルなどと混同して少々伝わりづらいかと思いますので、本連載では「Terraform コード」と呼ぶことにします。

 Terraform コードは 、.tfという拡張子で表すテキストファイルで、その中にインフラリソースの設定を書き込みます。Terraformは、そのTerraform コードをもとに、操作対象となるクラウド環境に対して各リソースを作成します。下記に Terraform コードの一例を紹介します。

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

 このTerraform コードは「10.0.0.0/16」をCIDRブロックとする、「Amazon Virtual Private Cloud」(VPC)を「main」という名前で管理することを示しています。ここで指定している名前はTerraform コード上で扱う上での名前であって、この名前を実際にクラウド環境側で使用するというわけではありません。

 Terraform コードを作成して、Terraformを動作させると、クラウド環境上で設定した通りのリソースが作成されます。次に、Terraform コードを削除して再度Terraformを動作させると、Terraformから削除したリソースがクラウド環境でも削除されます。このように、TerraformはTerraform コードの追加や削除に応じて、クラウド環境側でも設定した通りにリソースの追加や削除を実施します。

 また、Terraformが扱えるクラウド環境は、AWSやGCPの他にも、たくさんの環境を扱うことができます。一例として、TerraformのWebサイトに記載されているものとして以下のようなものがあります。

  • AWS
  • Microsoft Azure
  • GCP
  • Kubernetes
  • Alibaba Cloud
  • Oracle Cloud Infrastracture

 上記以外にも扱える環境は多数存在します。詳細はTerraformの公式サイトをご確認ください。

Terraformのインストール方法

 TerraformはさまざまなOS向けにパッケージが提供されています。本記事の執筆時点で提供されている対象OSは以下の通りです。

  • macOS
  • Windows
  • Linux(Ubuntu/CentOS/Red Hat Enterprise Linux/Fedora/Amazon Linux/Homebrewなど)
  • FreeBSD
  • OpenBSD
  • Solaris

 本記事では、この中でもLinux(UbuntuおよびRocky Linux)を対象にインストール方法を紹介します。Terraform は、それぞれのLinuxディストリビューション向けにリポジトリを提供していますので、そのリポジトリを登録した上でインストール可能です。インストール方法は以下の通りです。

$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
$ sudo dnf -y install terraform
Rocky LinuxでのTerraformインストール
$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
$ sudo apt update && sudo apt install terraform
UbuntuでのTerraformインストール

 正しくインストールされたかどうかを確認するために、以下のようなコマンドを実行してバージョン情報が出力されることを確認してください。

$ terraform -version
Terraform v1.4.6
on linux_amd64

 次に、TerraformでAWSの環境を操作するための準備を実施します。TerraformからAWSを操作するには「AWS CLI」のインストールが必要ですので、以下の手順でインストールします。

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

 あわせて、AWSを操作するご自身のAWS IAMアカウントでアクセスキーを作成し、発行されたアクセスキーIDとシークレットアクセスキーを以下の手順で登録しておきます。

$ aws configure
AWS Access Key ID [None]: (アクセスキーIDを入力)
AWS Secret Access Key [None]: (シークレットアクセスキーを入力)
Default region name [None]: (何も入力せずエンター)
Default output format [None]: (何も入力せずエンター)

 これでTerraformからAWSを操作する準備が整いました。

Terraform プロジェクトの作成

 次に、空のディレクトリを作成してTerraformプロジェクトとして初期化する準備を行います。ディレクトリ名は任意ですが、今回は「terraform」という名前で作成します。

$ mkdir terraform
$ cd terraform

 次に、main.tfというファイルを作成してTerraformからAWS環境にアクセスする設定を行います。main.tfには以下の内容を記述します。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}
provider "aws" {
  region = "ap-northeast-1"
}

 最後に、以下のコマンドを実行して、これまでの設定を基にTerraform プロジェクトの初期化を行います。

$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 4.0"...
- Installing hashicorp/aws v4.66.1...
- Installed hashicorp/aws v4.66.1 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

 上記のようなメッセージが出力されれば初期化は成功しています。

おわりに

 初回は、Terraformの概要と導入方法を解説しました。次回は「Amazon EC2」(Amazon Elastic Compute Cloud)のインスタンス作成や変更、削除までの一連の作業をTerraformを活用して自動化する方法を解説します。

筆者紹介

鎌田啓佑

サイオステクノロジー所属。OSS よろず相談室でサポート対応をしているテクニカルサポートエンジニア。Ansible に出会ってから自動化に取り憑かれ、自身の業務やプライベートであらゆるものの自動化に取り組む。プライベートでは Java でちょっとしたツールの開発を趣味にしている。

サイオス OSS よろず相談室

サイオステクノロジーエンジニアブログ

サイオステクノロジーエンジニア YouTube チャンネル


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。