LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Terraform 入門・基本的な仕組み・チュートリアル紹介:インフラ齧り始めのバックエンドエンジニアより

Last updated at Posted at 2024-06-28

前段

業務の一環で Terraform に関わることになりましたが、まずはキャッチアップを行うために基本的な内容をしっかり整理していきます。

概要

Terraform は HashiCorp 社によって開発されたIaC(Infrastructure as Code)を実現する OSS(Open Source Software) です(GitHub / README)。

ちなみに、同社が開発したHCL(HashiCorp Configuration Language)という設定言語を利用します。

インフラ構築や設定をテンプレートファイルを使って自動化してくれます。
様々なクラウドサービス(AWS,Kubernetes,VMWare,…)に対応しており、インフラ構成をコード上で宣言的に定義することで、コードベースでの管理を実現してくれます。

基本コマンド

初期化

terraform init

ワークスペースを初期化してくれます。
.terraformディレクトリが作られ、Provider Plugin と Module に関するキャッシュファイルが作成されます。

以下 terraform コマンドの実行前に必要です。
また設定変更時にも、改めて実行が必要です。

実行計画の確認

terraform plan

.tf(テンプレート)ファイルを元に、.tfstateファイルとの差分を検知して、どのようなリソースが作成(create)・更新(update)・削除(destroy)されるかを事前に確認できます。

適用

terraform apply

.tf ファイルに記載された情報を元にリソースを作成します。

なおリソース作成後、terraform.tfstateに、作成リソースの関連情報が保存されます。
このtfstateファイルはローカルで管理することもありますが、複数人の運用では Amazon S3 などのストレージに保存してチーム間で共有するのが一般的です。自動で更新されていくため、手動での変更は厳禁です。

2度目以降の実行後は、1世代前のものがterraform.tfstate.backupに保存されます。

なお複数変更を同時に実行されないよう LOCK 機能を用いて 1 つの処理が完了するまで他の処理を受け付けないという設定もできます。

リソースを取り込む

terraform import

既に存在するリソースを Terraform 管理下に取り込みます。
例)terraform import aws_s3_bucket.bucket bucket-name

importコマンドの実行ではなく、importブロックを使用しての取り込みも可能です。
対象の.tfファイルを修正して、以下のように記述。terraform applyにより適用できます。

import {
  id = "terraform-import-example" # リソースの識別子
  to = aws_s3_bucket.example      # import 先
}

基本的な仕組み

運用者が terraform コマンドを叩くことで、下図のように Terraform Provider を介して各クラウドプロバイダーの API が実行され、必要なインフラ構築がなされます。
assets.jpg
画像の引用元:HashiCorp 社による Terraform 開発者向け公式ドキュメント「What is Terraform? / How does Terraform work?」( https://developer.hashicorp.com/terraform/intro )より

チュートリアル紹介

基本操作を確認するために公式のチュートリアルをやってみましたが、これが体感としてとても良かったのでオススメします。
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli#quick-start-tutorial

なお自分はCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?とのエラーが出たので、下記記事を参考に Docker Host の指定をして解決しました。
https://zenn.dev/konbu33/articles/bae0ed3671b457

Terraform を介して、ローカル環境で Nginx の Docker Image を元に Docker Container を立ち上げ、http://localhost:8000/ でアクセスできるようになることを確認する流れになっています。

こういうちょっとしたことでも出来ると嬉しい!🙌
スクリーンショット 2024-06-28 17.36.52.jpg

0
0
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
0
0