Terraformの起動


Introduction


公式文書ではTerraformを以下に紹介します.

Terraform is an infrastructure as code (IaC) tool that allows you to build, change, and version infrastructure safely and efficiently. This includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc. Terraform can manage both existing service providers and custom in-house solutions.
簡単に言えば、TeraFormはコード型インフラストラクチャツール(IaC)であり、インフラストラクチャを安全かつ効率的に構築、変更、バージョン化することができます.GUIを使用してインフラストラクチャを管理するのが一般的ですが、コードで管理できる点が大きなメリットのようです.AWS、Azure、Docker、GCP、OCI、Terraform Cloudなど、さまざまなクラウドプラットフォームをサポートし、バージョン管理をサポートします.以前AWS CloudFormationを使用したことがありますが、Terraformはこれと非常に似ており、より多くのプラットフォームをサポートしているようです.

Key Features


https://www.terraform.io/intro/index.html#key-features
Infrastructure as Code
インフラストラクチャを読み取り可能なコードにすることができます.これにより、バージョン管理、共有、再利用が可能になります.
Execution Plan
実行するタスクを記述する実行計画を生成します.これにより、実行計画をチェックすることができます.また、実際に適用する前に承認を要求することで、インフラストラクチャをより安全に管理できます.
Resource Graph
リソースグラフを作成し、依存しないリソースを並列に作成および変更します.これにより、リソースを最大限に迅速かつ効率的に実行できます.
Change Automation
複雑なインフラストラクチャの変更を適用および管理しながら、人為的な介入を最小限に抑えることができます.プロファイルを更新すると、Terraformは変更を確認し、相関性を考慮してインクリメンタル実行計画を生成します.(正直、この点はまだ感じていません.もっと勉強して、理解してくれれば、もう一つ詳しい説明を書いて...)

Getting Started with AWS


https://learn.hashicorp.com/collections/terraform/aws-get-started
私はTerraformを勉強してAWSリソースを管理しています.私が管理するインフラストラクチャがAWSに構築されているからです.そして、ちょうど正式な書類の中で、この内容はとてもよく整理されています.AWSだけでなく、Azure、Dockerなど様々なプラットフォームでどのようにスタートするか、茫然とした人々のために簡単で親切なガイドを用意し、私のように最初はTerraformの人は正式なドキュメントを見て簡単にフォローすることを強くお勧めします.以下に学習中に記録した内容を書きます.
Write Configuration
# sample configuration

# Terraform 셋팅 관련 설정을 위한 블록
terraform {
  required_providers { # Terraform이 인프라를 provisioning 하기 위해 필요한 소스
    aws = {
      source  = "hashicorp/aws" # optional hostname
      version = "~> 3.27" # optional, but recommended. 만약 설정하지 않으면, Terraform은 가장 최신 버전을 사용함!
    }
  }

  required_version = ">= 0.14.9"
}

# provider란 Terraform이 당신이 정의한 리소스를 생성 및 관리하기위해 사용할 플러그인
# 구체적인 provider를 정의하기 위한 블록. 이 경우에는 "aws"
provider "aws" {
  profile = "default" # 이 값은 Terraform 이 너의 local에 AWS config file의 AWS credencials를 참고한다.
  region  = "us-west-2"
}

# 인프라의 컴포넌트들을 정의하기 위해 사용하는 블록
# resource "{RESOURCE_TYPE}" "{RESOURCE_NAME}"
resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}
Command
terraform init # download necessary providers
Inspect state
  • Terraformを申請した後tftstateという名前のファイルが生成されます.Terraformは、管理するすべてのリソースのIDと属性値をこのファイルに格納します.
  • Terraform stateファイルは、リソースを追跡する唯一の方法です.
  • では、機密情報がたまに表示されるため、ファイル内の情報が安全であることを確認する必要があります.(Teraformはこの情報をRemoteに保存して管理することを推奨)
  • TerraformShowコマンドでチェックできます.
  • Change Infrastructure
    -   : 리소스를 제거한다는 의미
    +   : 리소스를 생성한다는 의미
    -/+ : 리소스를 제거하고 다시 생성한다는 의미 (교체가 아님)