【Terraform】Terraform ~ 環境構築編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/12/09/222057

の続き。

 今、行っているプロジェクトでは、
インフラは、Terraformを使うことになったそうなので
これを機に覚えるとする、、、(前々から気になっていた技術だし)

 中期的な目標として、
AWS GlueのコンポーネントとTeraformを使って構築すること (※)
だが、そもそも、あんまりよくわかっていないので、
今回は、基本的な部分とお勉強環境をそろえるところから
始めてみようと思う。

(※)Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411

目次

【1】ローカル環境の設定
 1)Windows の場合
 2)Linux の場合
 補足:tfenv / asdf によるインストール方法
【2】Hello World
 1)Terraformのコードを書く
 2)初期化処理を実行する
 3)実行結果を事前確認する
 4)Terraformコードを実行する
 5)動作確認
 6)後片付け
【3】トラブル
 1)HashiCorp GPG keyをインストールしたら文字化け

【1】ローカル環境の設定 - 簡易版 -

* 公式サイトに載っている

https://developer.hashicorp.com/terraform/downloads

1)Windows の場合

* 以下、Windowsの場合の設定方法

[1] Terraformのダウンロード

* 以下の公式サイトから、対象OSのモジュールをダウンロードする
 => 今回は「terraform_1.4.4_windows_amd64.zip」

https://developer.hashicorp.com/terraform/downloads

[2] Terraformをインストール

* Windowsの場合、ダウンロードしたZIPファイルを解凍し
 任意の場所に置く
 => 今回は「C:\terraform\terraform.exe」

[3] 環境変数「Path」に追加

* Windowsの場合、環境変数「Path」にインストール場所を追加
 => 今回は「C:\terraform」

[4] 動作確認

* コマンドプロンプトで、「terraform -help」を入力し、
 ヘルプが表示されればOK
 => 「Usage: terraform [global options] <subcommand> [args]」的な感じで。

2)Linux の場合

* 以下の公式ドキュメントを参照

https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli

[1] 以下を実行し、Terraformをインストールする

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /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

[2] 動作確認

$ terraform -version
Terraform v1.4.4 <= versionが表示されたらOK

補足:tfenv / asdf によるインストール方法

Terraformはバージョンごとに動かすみたいなことが必要になってくるので
例えば、tfenv や asdf などを利用する方がいいかも、、、
詳細については、以下の関連記事を参照のこと

Terraform ~ tfenv / バージョン管理 ~
https://dk521123.hatenablog.com/entry/2023/01/14/000000
asdf ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/01/17/180212

【3】Hello World

1)Terraformのコードを書く

/*
Terraformのコードを書き、
任意の場所(今回はC:\tmp\tf)へ保存
*/

#  This is a sample terraform code
resource "local_file" "helloworld" {
  content  = "hello world!!!?"
  filename = "hello.txt"
}

2)初期化処理を実行する

# コマンドプロンプトを立ち上げて、以下を入力

cd C:\tmp\tf
terraform init

# 「Terraform has been successfully initialized!」が確認できたらOK

3)実行結果を事前確認する

# 実行結果を事前確認するために、以下を実行
terraform plan

# 「Plan: 1 to add, 0 to change, 0 to destroy.」が確認できたらOK

4)Terraformコードを実行する

terraform apply

「terraform apply」実行後の出力結果例

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes << yes と入力し、Enterキー押下

local_file.helloworld: Creating...
local_file.helloworld: Creation complete after 0s [id=xxxxxxxxxxxxxxxx]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

5)動作確認

# 実行後、「hello.txt」を確認
dir

# # ファイルの内容が「hello world!!!?」であることを確認
type hello.txt

6)後片付け

# どうせなら、「terraform destroy(リソース破棄)」も経験しておく

# [1] まず、破棄されるリソースを確認
terraform plan -destroy

# [2] 次に、「terraform destroy」実行
terraform destroy
# => 実行後、作成した「hello.txt」が破棄されていることを確認

【3】トラブル

1)HashiCorp GPG keyをインストールしたら文字化け

https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli

# Install the HashiCorp GPG key.
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
<文字化け>

発生環境

* OS: Ubuntu

解決案

(本当はこんなんじゃだめだろーが)

[1] Linux の [Settings]-[Region & Language]を選択
[2] Formatsを「日本」から「United Kingdom」に変更
[3] OS 再起動
 => 再度試したら、文字化けせずに実行できた

参考文献

https://zenn.dev/sway/articles/terraform_biginner_helloworld

関連記事

Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ 基本編 / 変数 ~
https://dk521123.hatenablog.com/entry/2023/12/24/173633
Terraform ~ 基本編 / Data Sources ~
https://dk521123.hatenablog.com/entry/2024/01/16/191006
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ 基本編 / tfstateファイル ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ テンプレート ~
https://dk521123.hatenablog.com/entry/2023/05/22/101325
Terraform ~ Terraformあれこれ ~
https://dk521123.hatenablog.com/entry/2023/05/15/205352
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411
Terraform ~ AWS KMS ~
https://dk521123.hatenablog.com/entry/2023/05/26/000000
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
Terraform ~ AWS CloudWatch ~
https://dk521123.hatenablog.com/entry/2023/05/17/123335
Terraform ~ AWS EC2 ~
https://dk521123.hatenablog.com/entry/2023/05/21/003048
Terraform ~ AWS MWAA ~
https://dk521123.hatenablog.com/entry/2023/12/25/000152
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Terraform ~ AWS CodeArtifact ~
https://dk521123.hatenablog.com/entry/2024/01/26/232109
Terraform ~ AWS MSK ~
https://dk521123.hatenablog.com/entry/2023/05/14/122215
Terraform ~ AWS MSK Connect ~
https://dk521123.hatenablog.com/entry/2023/05/25/000000
AWS MSK Connect 内の 接続情報を設定を考える
https://dk521123.hatenablog.com/entry/2023/06/04/230737
Terraform ~ tag あれこれ ~
https://dk521123.hatenablog.com/entry/2023/06/05/224944
Terraform ~ Docker ~
https://dk521123.hatenablog.com/entry/2023/04/10/193239
Terraform ~ Datadog ~
https://dk521123.hatenablog.com/entry/2023/05/12/000000
Terraform ~ 特定リソースのみデプロイする ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823
Terraform ~ 複数環境へデプロイすることを考える ~
https://dk521123.hatenablog.com/entry/2023/05/06/003645
Terraform ~ 機密情報の扱いを考える ~
https://dk521123.hatenablog.com/entry/2023/05/18/005103
Terraform ~ tfenv / バージョン管理 ~
https://dk521123.hatenablog.com/entry/2023/01/14/000000
Terraform ~ direnv / プロジェクト隔離 ~
https://dk521123.hatenablog.com/entry/2023/01/15/000000
asdf ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/01/17/180212