インフラの構築自動化(コード化)ツールTerraformの入門記事です。
以前から気になっていたので書籍を購入して学習中です。
以下の書籍がわかりやすく、参考にしています。
(2024/10/16 07:51:12時点 Amazon調べ-詳細)
AWSだけだとCloudFormationだけを学習していればいいですが、Azure、GCPなど他のパブリッククラウドでも利用が出来るのでマルチクラウド環境を触る場合は便利ですね。
今後インフラエンジニアはTerraformとAnsibleは必須な気がします。
入門編の本記事では、Mac(Catalina)にTerraformをインストールしてEC2の立ち上げと終了までをTerraform経由で行ってみたいと思います。
前提条件
- AWS CLIが設定済み
- Homebrewが導入済み
設定の概要
TerraformをMacにインストールしてEC2を立ち上げる方法
Terraformのインストール
以下のコマンドを実行してAWS CLIが正常にセットアップされているか確認します。
aws sts get-caller-identity --query Account --output text
12桁の数字がAWSアカウントIDが表示されていれば正常にセットアップされています。
続いてTerraformをインストールします。
以下コマンドでインストールしてください。
brew install terraform
以下のような表示が出ましたらインストール完了です。
######################################################################## 100.0%
==> Pouring terraform-0.13.0_1.catalina.bottle.tar.gz
🍺 /usr/local/Cellar/terraform/0.13.0_1: 6 files, 67.5MB
以下コマンドを実行してインストールされたバージョンを確認します。
terraform --version
バージョンが表示されましたら正常にインストールが完了しております。
Terraform v0.13.0
tfenvのインストール
バージョンマネージャーのtfenvを導入します。
簡単にバージョンの切り替えが出来るので、チーム内でバージョンを合わせることが簡単に出来ます。
以下のコマンドを実行してインストールします。
brew install tfenv
下記エラーが表示されたらbrew unlink terraformを実行してください。
Terraformがインストールされている状態だとunlinkを行う必要があるとのことです。
Error: Cannot install tfenv because conflicting formulae are installed.
terraform: because tfenv symlinks terraform binaries
参考URL:Terraformのバージョン切り替えにtfenvを試してみる
以下のコマンドを実行してバージョンを確認します。
tfenv --version
tfenv 2.0.0
続いて以下のコマンドを実行してインストール出来るバージョンの一覧を確認します。
tfenv list-remote
0.13.0
0.13.0-rc1
0.13.0-beta3
0.13.0-beta2
0.13.0-beta1
0.12.29
0.12.28
0.12.27
…..
以下のコマンドを実行して指定したバージョンを導入します。
tfenv install 0.13.0
続いて以下のコマンドを実行して導入されているバージョン、使用するバージョンが確認できます。
tfenv list
以下のようにインストール可能な一覧が表示されます。
上記が出る時は、tfenv useでデフォルトで使用するバージョンを指定してください。
cat: /usr/local/Cellar/tfenv/2.0.0/version: No such file or directory
Version could not be resolved (set by /usr/local/Cellar/tfenv/2.0.0/version or tfenv use <version>)
tfenv-version-name failed
以下のコマンドを実行して使用するバージョンを指定します。
tfenv use 0.13.0
Switching default version to v0.13.0
Switching completed
一覧を以下のコマンドを実行して確認します。
「*」が付いているバージョンが利用するバージョンです。
tfenv list
* 0.13.0 (set by /usr/local/Cellar/tfenv/2.0.0/version)
0.12.29
定義ファイルの作成
続いてTerraformで実行する定義ファイルを作成します。
フォルダを作成して.tfファイルを作成します。
mkdir terraform cd terraform touch main.tf
main.tfは以下の内容を記述してください。
resource "aws_instance" "example" { ami = "ami-0c3fd0f5d33134a76" instance_type = "t3.micro" }
リソースの作成
以下のコマンドを実行してリソース作成に必要なバイナリファイルをダウンロードします。
terraform init
「Terraform has been successfully initialized!」が表示されましたら成功です。
続いて以下のコマンドを実行して「実行計画」を出力します。
terraform plan
実行するリージョンを指定します。
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value: ap-northeast-1
Refreshing Terraform state in-memory prior to plan…
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
リージョンを指定すると以下のように実行計画が表示されます。
————————————————————————
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.example will be created
+ resource “aws_instance” “example” {
+ ami = “ami-0c3fd0f5d33134a76”
+ arn = (known after apply)
+ associate_public_ip_address = (known after apply)
+ availability_zone = (known after apply)
+ cpu_core_count = (known after apply)
+ cpu_threads_per_core = (known after apply)
+ get_password_data = false
+ host_id = (known after apply)
+ id = (known after apply)
+ instance_state = (known after apply)
+ instance_type = “t3.micro”
……..
Plan: 1 to add, 0 to change, 0 to destroy.
————————————————————————
以下のコマンドを実行して計画されたプランを実行します。
terraform apply
先ほどと同様にリージョンを指定します。
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value: ap-northeast-1
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
以下の表示がされましたら「yes」を入力してください。
リソースが作成されます。
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
プランが実行されて以下のようにインスタンスが作成されます。
リソースの削除
削除は以下のコマンドを実行して削除します。
terraform destroy
以下の画面が表示されましたらリージョンを指定します。
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value: ap-northeast-1
aws_instance.example: Refreshing state… [id=i-xxxxxxxxxxxx]
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
以下の画面が表示されましたら「yes」を入力して削除を実行します。
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only ‘yes’ will be accepted to confirm.
Enter a value: yes
aws_instance.example: Destroying… [id=xxxxxxxxxxxx]]
正常に削除が出来ました。
EC2だけしか作成しておりませんが、簡単につくれますね!
.tfファイルをサービス毎に作ればわかりやすいかもしれません。
次はVPCから作成してみようと思います!
(2024/10/16 07:51:12時点 Amazon調べ-詳細)