LoginSignup
12
14

Terraform少しだけ入門してみた

Last updated at Posted at 2023-05-27

Terraformとは

Terraformは、オープンソースのサービスで、 開発リソースを効率的に構築できるIaC(Infrastructure as Code)ツールの一種と言われています。クラウドシステム開発に必要なインフラを、コードにより定義された構築設定に従って自動でawsなどのクラウド環境にデプロイしてくれるツールです!

※今回はAWSを使って話を進めていきます

Terraformを使った開発の流れ(ざっくり)

  1. アカウント作成(Terraformがクラウド環境を操作するため)
  2. コードによる環境の定義
  3. デプロイ

※最新のクラウドリソースだと、Terraformが対応しておらず、手動で対応する必要があるものもあるらしいので全てTerraformで完結するわけでもないみたいです。。。

Terraformを使うための環境構築編

1. AWS CLIをインストール

下記URLを参考にCLIをインストールします!
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

$ aws --version

こちらを入力してバージョンが表示されていればインストール完了です!

2. IAMユーザーを作成

Terraform用にIAMユーザーを作成します。
Terraformが、EC2などのリソースを作成・変更・削除などの操作を行うので必要なポリシーをアタッチします。
今回は、手元でお試しで使うだけなので、全てのリソースに対してFullAccessができるように設定しました。

【手順】

  1. AWSマネジメントコンソールにログイン
  2. IAM > ユーザー からユーザーを作成
    「ポリシーを直接アタッチする」から、今回は「AdministratorAccess」を付与しました。
  3. IAM > ユーザー > (作成したユーザー) > セキュリティ認証情報 > アクセスキーを作成 を選択します。
    ここで取得した、アクセスキーIDとシークレットレアアクセスキーを保存します。

※これが外部流出すると、そのユーザーで何でも操作ができるので扱いに注意が必要です。
git-secretsを導入するなどして対策しておくこと方が良いと思います!

さて、ユーザーが作成できたので
$ aws configureで認証情報をセットします。
自分は下記のように入力していきました!

$ aws configure --profile terraform_test
AWS Access Key ID: (先程取得した、アクセスキーID)
AWS Secret Access Key: (先程取得した、シークレットアクセスキー)
Default region name: ap-northeast-1
Default output format: json

認証情報が登録されているかの確認は、下記コマンドで行えます

$ cat ~/.aws/credentials

3. Terraformのインストール

Terraformのバージョン管理をしてくれるtfenvというツールをインストールします。tfenvを使ってTerraformをインストールしていきます。

$ brew install tfenv

これでtfenvが使える状態になっています。
インストールできるバージョンを下記コマンドで確認します。

$ tfenv list-remote

ずらーっとたくさん表示されると思いますが今回は1.4.6を利用することにしました。

$ tfenv install 1.4.6

$ tfenv use 1.4.6

$ terraform --version
Terraform v1.4.6
on darwin_arm64

これでTerraformが使えるようになったことが確認できました!

4. VSCodeでTerraformの拡張機能をインストール

HashiCorp Terraformをインストールします。コード補完などしてくれるので便利だと思います!

Terraformをちょこっと使ってみる

ゴール:デフォルトであるVPCとsubnetにEC2を配置して起動するところまで試してみます。

フォルダを作成します。

$ mkdir terraform_test

ファイルを作成していきます。

$ touch main.tf

main.tfに、EC2を起動するところまで書いてみる

# ----------------------------
# Provider
# ----------------------------
provider "aws" {
  profile = "terraform_test"
  region  = "ap-northeast-1"
}

# ----------------------------
# Variables
# ----------------------------
variable "project" {
  type = string
}

variable "environment" {
  type = string
}

# ----------------------------
# EC2 instance
# ----------------------------
resource "aws_instance" "test_ec2" {
    ami = "ami-◯◯" #AMIのID
    instance_type = "t2.micro"

  tags = {
    Name    = "${var.project}-${var.environment}-ec2"
    # Namw  = test-dev-ec2 となります。
   }
}
$ touch terraform.tfvars 
project = "test"
environment = "dev"

ここまで書けたらEC2を起動していきます。
上記2ファイルがあるディレクトリ内で下記を実行していきます!

初めて実行するので、初期化するinitを実行します。

$ terraform init

コード整形したければ下記コマンドで整形ができます!

$ terraform fmt

記述したコードの定義内容を確認します!

$ terraform plan

意図した挙動となりそうか(今回の場合はEC2インスタンスが作成されそうか)確認します。

最後に、定義した内容を実行してEC2を作成します。

$ terraform apply

AWSマネジメントコンソールでEC2が作成されていれば成功です!!

Terraformで定義したAWSリソースを全て削除する

$ terraform destory

毎回terraformって打つのがめんどくさい・・・

~/.zshrcにaliasを書いておいた

#terraform
 alias tf='terraform'

おわりに

tfファイル内では、HCL2という独自の構文?書き方?になっています。私もまだ手探り状態なので、公式ドキュメントを読みつつ書いてみました。。。。
https://developer.hashicorp.com/terraform/language

一旦お試しで使ってみてのアウトプットになるので、もっと良い書き方・運用の仕方は勉強していきます。
慣れてきてもう少し複雑な環境の作成ができたらその時またアウトプットしようと思います。

とりあえず、Terraform少しだけ入門してみました。
ここまで読んでいただきありがとうございました!

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14