準備編~Terraformを利用してAzureリソースをデプロイしてみる!
皆さん、こんにちは!
今回は、準備編として、Terraformのインストール方法を解説いたします。
もう当たり前のように定着しているIaCでのクラウドインフラ管理、実は日本政府も提唱しているクラウドの管理方法でもあります。
ガートナー社による今後のITトレンドによると、単にクラウドを利用するだけではなく、クラウドを最適に活用すること、すなわち「クラウドスマート」な利用方法が定着していくとされています。
クラウドスマートに利用する手段として、IaCは一つの選択肢です。
クラウド移行後の運用管理のネクストステップとして、是非IaCを検討していただきたいですし、この記事が少しでも助けになればと思います。
それではやっていきましょう!
目次
1. Terraformのダウンロード
まずは、ローカル端末にTerraformをダウンロードしますが、利用するうえでの2つの前提条件があります。
① PowerShellモジュールがダウンロードされていること
② Azure CLIがダウンロードされていること
1-1. PowerShellモジュールのインストール
より正確に記載すると、Azure PowerShell azモジュールをインストールさせる必要があります。MSからの推奨でもある、Wingetコマンドを利用した方法をご紹介します。
最新バージョンのPowershellを検索
1 |
winget search Microsoft.PowerShell |
idパラメータを使用して、PowerShellまたはPowerShellプレビューをインストールします。
1 2 3 4 |
#powershell winget install --id Microsoft.Powershell --source winget #powershellプレビュ winget install --id Microsoft.Powershell.Preview --source winget |
1-2. Azure CLIインストール
PowerShellをインストールさせましたので、PowerShellを使ってCLIをインストールする方法をご紹介します。
まずは、管理者としてPowerShellを起動します。起動したら、
1 |
$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; Remove-Item .\AzureCLI.msi |
これで、azコマンドが実行できるようになります。
番外編 – Azure CLIの補完機能のご紹介
補完機能とは、キーボードの「Tab」を押すと、候補コマンドが表示され、一言一句、英語のコマンド名を覚える必要がなくなります。
変数:$profileが必要になりますので、作成します。
1 |
notepad $PROFILE |
メモ帳が起動します。メモ帳は閉じないことをおすすめします。ファイル(PowerShell_profile)がない場合は作成しますか?と警告画面が表示されますのでOkを押しましょう。
起動したメモ帳に以下のコードを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Register-ArgumentCompleter -Native -CommandName az -ScriptBlock { param($commandName, $wordToComplete, $cursorPosition) $completion_file = New-TemporaryFile $env:ARGCOMPLETE_USE_TEMPFILES = 1 $env:_ARGCOMPLETE_STDOUT_FILENAME = $completion_file $env:COMP_LINE = $wordToComplete $env:COMP_POINT = $cursorPosition $env:_ARGCOMPLETE = 1 $env:_ARGCOMPLETE_SUPPRESS_SPACE = 0 $env:_ARGCOMPLETE_IFS = "`n" $env:_ARGCOMPLETE_SHELL = 'powershell' az 2>&1 | Out-Null Get-Content $completion_file | Sort-Object | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_) } Remove-Item $completion_file, Env:\_ARGCOMPLETE_STDOUT_FILENAME, Env:\ARGCOMPLETE_USE_TEMPFILES, Env:\COMP_LINE, Env:\COMP_POINT, Env:\_ARGCOMPLETE, Env:\_ARGCOMPLETE_SUPPRESS_SPACE, Env:\_ARGCOMPLETE_IFS, Env:\_ARGCOMPLETE_SHELL } |
これで補完機能を利用することができるようになりました。
1-3. Terraformダウンロード
メインミッションであるTerraformをダウンロードしていきます。
公式サイトからTerraformそのものをダウンロードし、特定のフォルダに移行させ、PowershellでTerraformを認識できるよう環境変数($Path)を通す必要があります。
#公式サイトからダウンロード
Windows – AMD64を選択して、ローカルフォルダにダウンロードしましょう。
#特定フォルダに移動
Zipファイルの解凍が完了したら、特定のフォルダに移動させます。C:配下にあるプログラムが集まった適切なディレクトリにフォルダを作成、移動させました。
#環境変数の設定
コントロールパネルから、右上の検索枠に「環境変数」と入力すると、「環境変数を編集」という項目が出てきます。
「Path」という項目があるはずですので、編集を押下ください。
環境変数名の編集画面が出てきますので、「新規」選択してください。
そこに、#特定のフォルダに移動、で移したTerraformのフルパスをコピーして追加します。PowerShellを再起動しましょう。
ちゃんと変数が取っていれば、Terraformのバージョン情報を確認することができます。
2. Azureに接続する
Terraformを利用してAzureのリソースを操作する訳ですから、Azure環境にTerraformを認証させる必要があります。
ここで注意したいのが、Terraform は、Azure CLI を使用した Azure に対する認証のみをサポートしています。 Azure PowerShell を使用した認証はサポートされていません。
そのため、Terraform の作業を行うときには Azure PowerShell モジュールを使用できますが、まず Azure CLI を使用して Azure に対する認証を行う必要があります。
今回はMicrosoftアカウントを使用して、Azureに対する認証を実施します。
2-1. Azure環境へのログイン
それでは、PowerShellを起動してaz loginを実行します。
1 |
az login |
ログインに成功しました。
適切なサブスクリプションが表示されているか確認をしてください。
1 |
az account show |
2-2. サービスプリンシパルの作成
Terraformは操作を自動化してくれるものですから、想定外の動きをさせないように制限をかける必要があります。
ですので、Azure環境のリソースを操作できるフル権限を持たせながら、サービスプリンシパルを利用することで制限をかけます。
改めて、管理用のAzureアカウントにアクセスします。
1 |
Connect-AzAccount |
ログイン完了後にも表示されていますが、今適用されているサブスクリプションを確認したい場合は、こちらのコマンドを実行してください。
1 |
Get-AzContext |
指定されているサブスクリプションを変更したい場合は、
1 2 3 4 5 |
#サブスクリプション一覧を表示 Get-AzSubscription #既定のサブスクリプションを指定 Set-AzContext -Subscription "<subscription_id_or_subscription_name>" |
それでは、サービスプリンシパルを作成します。
1 |
$sp = New-AzADServicePrincipal -DisplayName <service_principal_name> -Role "Contributor" |
正常に完了したか確認します。
1 |
$sp.AppId |
実際にAzureポータル画面からも確認することができます。
Microsoft EntraID → アプリの登録を見てみると…
登録されていることを確認できました。
最後に、自動生成されたパスワードをテキストに変換して、忘れずに保管してください。
1 |
$sp.PasswordCredentials.SecretText |
番外編 – サービスプリンシパルの環境変数を指定
特定のPowerShellに先ほど発行したサービスプリンシパルの資格情報を登録する手順をご紹介します。
資格情報を補完するため、以下のコードを利用します。パラメータにはそれぞれの情報を入力し、実行してください。
1 2 3 4 |
$env:ARM_CLIENT_ID="<service_principal_app_id>" $env:ARM_SUBSCRIPTION_ID="<azure_subscription_id>" $env:ARM_TENANT_ID="<azure_subscription_tenant_id>" $env:ARM_CLIENT_SECRET="<service_principal_password>" |
ARM_CLIENT_ID:サービスプリンシパルID
ARM_SUBSCRIPTION_ID:あなたが操作したいリソースがあるサブスクリプションID
ARM_TENANT_ID:サブスクリプションがあるテナントID (ポータル画面からEntraIDを検索すると出てきます)
ARM_CLIENT_SECRET:サービスプリンシパルをテキスト変換したもの ($sp.PasswordCredentials.SecretTextの実行結果)
環境変数が無事登録されたか確認します。
1 |
gci env:ARM_* |
すべてのPowerShellのセッションに対して環境変数を適用させたい場合は、notepad $profileに上記のID情報を入力してください。
これで環境の準備が完了しました。ちなみに、この環境変数に登録されたサービスプリンシパルなどのID情報は、Terraformを利用するうえで必須のパラメータになります。
次回のチュートリアル編では、Terraformを利用して簡単な自動化トライしてみたいと思います。
この記事を書いた人
- 森 信之介
- テクニカルマーケターとして、ブログ執筆、セミナー講師を行っております!
この投稿者の最新の記事
- 2024年3月26日ブログWindowsのメモ帳にスペルチェック機能が追加!
- 2024年3月25日ブログBCPの策定や見直しのhow to – ガートナー社が抑えておくべき3のポイントを発表
- 2024年3月22日ブログスポーツにもAIの力を~「TacticAI」が登場
- 2024年3月21日ブログChatGPTやGeminiに並ぶ「Claude3」のプロンプトライブラリをご紹介!