Microsoft Azure

【Azure】IaCとは?リソースを自動で作成する

こんにちは、インフラエンジニアのryuです。

今回の記事では、AzureのリソースをIaCで作る方法を解説します。Terraformというツールを使い、LinuxのVMを作成します。インフラの設定をコードで書くことによって、サーバーの環境構築を自動化できます。

IaCとは?リソースを自動で作成する

IaCをすることによって、インフラ構築の工数を大幅に削減できます。理由は、自動化するからです。まずIaCが何なのかを説明します。

IaCとは?

Infrastructure as Code(IaC) はコンピューティング・インフラ(プロセス、ベアメタルサーバー、仮想サーバーなど)の構成管理・機械処理可能な定義ファイルの設定・プロビジョニングを自動化するプロセスである。

(wikipediaより)

つまり、インフラの設定をファイルに書いておいて、それを基に自動でインフラを作ることです。

Terraformとは、このIaCをするためのツールです。

IaCのツールをインストールする

IaCのツールはTerraformを使います。 Terraformのインストール方法については、Microsoftのドキュメントを参考にしてください。

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/terraform-install-configure

ドキュメントの内容を簡単に説明します。

1. Azure Cloud Shell を起動

Terraformをローカル環境でもインストール可能ですが、Azure Cloud Shellを使うと、すでにTerraformがインストールされているので手順が省けます。

Azure Cloud ShellはAzureポータルの上部の↓のアイコンをクリックすると起動できます。

Azure Cloud Shellの作成

bashかpowershellの選択がありますが、bashで起動しておきましょう。

2.AzureADサービスプリンシパルの作成

サービス プリンシパルを作成することでTerraformがリソースを自動で作ってもいいよ!というアクセス許可を出します。

以下のコマンドを実行します。

az account list --query "[].{name:name, subscriptionId:id, tenantId:tenantId}"
az account set --subscription="${SUBSCRIPTION_ID}"
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"

最後のコマンドでappIdとpasswordが返されるのでメモっておきます。

3.スクリプトを実行して初期設定

新しくディレクトリを作りカレントディレクトリを変えます。

もしくは、そのままのディレクトリでもよいです。

ドキュメントのサンプルコードをコピーしtest.tfを作ります。

test.tfがあるディレクトリで以下のコマンドを実行します。

terraform init

” Terraform has been successfully initialized! “と返されます。

エラーが出た場合は、test.tfが正しく作られているか確認してください。

エラーについては、こちらの記事を参照してください。

そして最後に、

terraform apply

を実行します。途中でリソースグループを作ってもよいですか?と聞かれるので「yes」と入力します。

これで完了です。

Azureリソースグループに、”testResourceGroup”ができていたら完成です。

Iacの準備

Terraformでコードからリソースを作成する。

今回は、Micosoftのドキュメントのコードを使用します。

ドキュメントの中の、「完全な Terraform スクリプト」を使用します。

terraform_azure.tfという名前でファイルを作り、スクリプトをコピーします。

一番最初のかたまりの

provider “azurerm” { ……}のxxxxxxxxは自分のidを入力します。

IaCの準備方法

スクリプトが完成したら、先ほど作った”test.tf”を消して、以下のコマンドを入力してTerraformの環境を初期化します。

terraform init

次にテンプレートの検証です。

terraform plan

すると Plan:9 to add, 0 to change, 0 to destroy.

という文が返されます。特にエラーが出ていなければ、リソースを作成します。

terraform apply

よし!完成と思ったら・・・

Error: compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=400 — Original Error: Code=”InvalidParameter” Message=”The value of parameter linuxConfiguration.ssh.publicKeys.keyData is invalid.” Target=”linuxConfiguration.ssh.publicKeys.keyData”

こんなエラーがでしまいました。

SSHで使用する公開鍵でエラーがでていましたね。

とりあえず、エラーを解消するために公開鍵を作ります。

ssh-keygen -t rsa -b 2048

公開鍵の中身の見方は、

cat ~/.ssh/id_rsa.pub

これで表示されたものを、 terraform_azure.tf

key_data = “公開鍵”

の公開鍵の部分に貼り付けます。

これでもう一度、”terraform apply”を実行すると、

リソースを自動で作成

Apply complete!ようやく完成しました。

Azure内のリソースグループ内を確認すると、リソースが自動でつくられていることが分かります。

自動作成完了

さいごに

Terraformを使い、AzureのリソースをIaCで作る方法を解説していきました。 インフラをコードで作るIaCはインフラエンジニアとして覚えておきたい技術の1つです。今回はLinuxでしたが、ほかのリソースもIaCで作成できるので便利ですね!

ABOUT ME
ryu
大手メーカのIT部門でインフラエンジニアやってます。 サーバ、ネットワーク、セキュリティ、クラウドについて投稿します。 AI、ARも勉強中です! youtubeでも技術ネタを発信していきます。↓のアイコンよりご覧ください!