すべてのプロダクト
Search
ドキュメントセンター

Terraform:Linux で Terraform を使用する

最終更新日:Oct 16, 2025

このトピックでは、Terraform を使用して Linux で Alibaba Cloud リソースを迅速に作成する方法について説明します。

Terraform を使用して、コードとしてのインフラストラクチャ (IaC) を管理できます。プロシージャには、次のステップが含まれます。

  1. Terraform をインストールする。システムが Terraform コマンドを検出して実行できることを確認します。

  2. Terraform を構成する。統一されたメソッドを使用して Terraform の ID 認証情報を管理します。

  3. Terraform 構成ファイルを作成する。構成ファイルは Terraform のコアです。VPC、ECS インスタンス、OSS バケットなどのリソースの作成、構成、依存関係を記述します。

  4. リソースを初期化して作成する。これは、インフラストラクチャ設計を現実のものにするための重要なステップです。

  5. リソースを表示および管理する。デプロイメント後、インフラストラクチャ環境を管理および保守して、最新の要件と設計仕様を満たしていることを確認できます。

  6. リソースを破棄する。作成されたリソースが不要になった場合、対応するフォルダに作成されたリソースを破棄できます。

1. Terraform のインストール

Terraform は、Terraform コマンドを実行してクラウドリソースを作成、管理、バージョン管理できるコードとしてのインフラストラクチャ (IaC) ツールです。Terraform をインストールした後にのみ、Terraform コマンドを実行してインフラストラクチャのデプロイメントを自動化できます。インストール手順の詳細については、「プロバイダーをインストールする」をご参照ください。

2. Terraform の構成

Terraform の ID 認証は、Terraform を使用して Alibaba Cloud インフラストラクチャで操作を実行する前に、Alibaba Cloud Terraform Provider の ID を検証するプロセスです。ID 認証が成功した後にのみ、Alibaba Cloud API と通信し、Alibaba Cloud インフラストラクチャリソースを管理できます。Alibaba Cloud Terraform Provider は、複数の ID 認証メソッドをサポートしています。詳細については、「Terraform の ID 認証」をご参照ください。

このトピックでは、環境変数で RAM ユーザーの AccessKey ペアを使用して ID 認証を構成するメソッドを例として使用します。

export ALICLOUD_ACCESS_KEY="<yourAccessKeyID>"
export ALICLOUD_SECRET_KEY="<yourAccessKeySecret>"
export ALICLOUD_REGION="cn-beijing"

3. Terraform 構成ファイルの作成

構成ファイルは Terraform のコアです。RAM、ECS、OSS など、クラウドまたはオンプレミスにデプロイするインフラストラクチャリソースを定義します。

  1. ram という名前の新しいフォルダを作成し、そのフォルダに main.tf という名前の Terraform 構成ファイルを作成します。

    # 作業ディレクトリを作成し、そのディレクトリに移動します。
    mkdir ram && cd ram
    # 構成ファイルを作成して編集します。
    touch main.tf && vim main.tf
    

    各 Terraform プロジェクトに独立した作業ディレクトリを作成すると、リソースの構成が明確になり、状態ファイルの難読化が防止され、バージョン管理とチームコラボレーションが容易になり、環境の隔離とモジュール管理の実装に役立ちます。このプラクティスにより、構成管理の保守性とセキュリティが向上します。

  2. Terraform 構成ファイルを作成します。このトピックでは、RAM ユーザーを作成し、そのユーザーに ECS を管理する権限を付与する例を使用して、構成ファイルの作成方法を説明します。

    次のリソースが必要です。

    重要

    RAM ユーザーがコンソールにログインして AccessKey ペアを同時に使用することを許可しないことをお勧めします。これにより、各 RAM ユーザーの責任が明確になり、誤用を防ぐことができます。

    リソース

    説明

    alicloud_ram_user

    RAM ユーザーの作成

    alicloud_ram_login_profile

    RAM ユーザーのコンソールへのログインを許可

    alicloud_ram_access_key

    RAM ユーザーの AccessKey ペアを作成

    alicloud_ram_policy

    アクセスポリシーの作成

    alicloud_ram_user_policy_attachment

    RAM ユーザーに権限を付与

    main.tf ファイルに次のサンプルコードをコピーします。次に、Esc キーを押して挿入モードを終了し、:wq と入力して Enter キーを押し、ファイルを保存します。

    variable "user_name" {
      default = "terraform_user_test"
    }
    
    variable "user_password" {
      default = "!Test@123456"
    }
    
    variable "user_display_name" {
      default = "TestAccount"
    }
    
    variable "user_mobile" {
      default = "86-18688888888"
    }
    
    variable "user_email" {
      default = "example@example.com"
    }
    
    resource "alicloud_ram_user" "user" {
      name         = var.user_name
      display_name = var.user_display_name
      mobile       = var.user_mobile
      email        = var.user_email
      comments     = "Created by Terraform"
      force        = true                   
    }
    
    resource "alicloud_ram_login_profile" "profile" {
      user_name = alicloud_ram_user.user.name
      password  = var.user_password
    }
    
    resource "alicloud_ram_access_key" "ak" {
      user_name   = alicloud_ram_user.user.name
      secret_file = "accesskey.txt"
    }
    
    resource "alicloud_ram_policy" "policy" {
      policy_name     = "tf-example-policy"
      policy_document = <<EOF
      {
        "Statement": [
          {
            "Action": "ecs:*",
            "Effect": "Allow",
            "Resource":"*"
          }
        ],
          "Version": "1"
      }
      EOF
      description     = "This is a policy test."
    }
    
    resource "alicloud_ram_user_policy_attachment" "attach" {
      policy_name = alicloud_ram_policy.policy.policy_name
      policy_type = alicloud_ram_policy.policy.type
      user_name   = alicloud_ram_user.user.name
    }

4. リソースの初期化と作成

Terraform 構成ファイルを作成した後、リソースを作成する前に作業ディレクトリを初期化する必要があります。

4.1 Terraform の初期化

現在のターミナルで terraform init コマンドを実行して初期化を実行します。terraform init コマンドは、Terraform 構成ファイルを使用する前に実行する必要がある最初のコマンドです。このコマンドは、Terraform の作業ディレクトリを初期化します。これには、必要な Alibaba Cloud プロバイダープラグインやその他のレコードファイルのダウンロードが含まれます。

4.2 リソースの作成

  1. terraform plan コマンドを実行して実行計画を作成します。この計画には、terraform apply コマンドを実行したときに作成、変更、または破棄されるすべてのリソースに関する情報が表示されます。

    image

  2. terraform apply コマンドを実行して、terraform plan コマンドによって生成された実行計画に基づいてリソースを作成します。作成プロセス中に、プロンプトが表示されたら yes と入力してリソースの作成を続行します。変数値の渡し方の詳細については、「変数」の変数設定メソッドをご参照ください。image

5. リソースの表示と管理

デプロイメント後、インフラストラクチャ環境を管理および保守して、最新の要件と設計仕様を満たしていることを確認できます。

5.1 リソースの表示

  1. terraform show コマンドを実行して、リソースの詳細情報を表示します。

    image

  2. terraform state list コマンドを実行して、作成されたすべてのリソースをリストします。

    image

  3. terraform state show <resource type>.<resource name> コマンドを実行して、特定のリソースの詳細情報を表示します。

    image

  4. 作成されたリソースに関する情報を Alibaba Cloud 管理コンソールで表示します。

5.2 リソースの管理

Terraform がリソースを作成および変更した後、リソースのステータスとプロパティ情報を terraform.tfstate ファイルに保存します。terraform state コマンドを使用して状態を管理できます。詳細については、「状態メカニズムの概要」をご参照ください。

5.3 リソースの変更

  1. main.tf などの構成ファイルで、変更したいリソースの定義を変更します。たとえば、RAM ユーザーの権限を減らして、ユーザーが ECS インスタンスをクエリする権限のみを持つようにすることができます。

    1. vim main.tf コマンドを実行し、i キーを押して編集モードに入ります。

    2. 次のコードをコピーし、それを使用して main.tf ファイルの alicloud_ram_policy セクションを置き換えます。

      resource "alicloud_ram_policy" "policy" {
        policy_name     = "tf-example-policy"
        policy_document = <<EOF
        {
          "Statement": [
            {
              "Action": [
                "ecs:Get*",
                "ecs:List*",
                "ecs:Describe*"
              ],
              "Effect": "Allow",
              "Resource":"*"
            }
          ],
            "Version": "1"
        }
        EOF
        description     = "This is a policy test."
      }
    3. Esc を押し、:wq と入力してファイルを保存します。

  2. terraform plan コマンドを実行して変更をプレビューします。

    image

  3. 変更が期待どおりである場合は、terraform apply コマンドを実行してインフラストラクチャに変更を適用します。このコマンドを実行すると、Terraform は変更の確認を求めます。yes と入力し、Enter キーを押して変更を適用します。image

6. リソースの破棄

作成されたリソースが不要になった場合、terraform destroy コマンドを実行して作成されたすべてのリソースを破棄できます。

重要

複数のバージョンを持つ作成済みのアクセスポリシーを破棄する場合、terraform destroy コマンドではリソースを直接破棄できません。force パラメーターを alicloud_ram_policy に追加し、値を true に設定して、ポリシーのすべてのバージョンを強制削除できます。ポリシーが他の RAM ユーザーまたは RAM ロールによって参照されている場合、ポリシーが削除される前に、関連付けは自動的に削除されます。force プロパティは注意して使用してください。

image

完全な例

Terraform をすぐに試せるように、このトピックでは完全な Terraform コードを提供します。コードをコピーして実行できます。

variable "user_name" {
  default = "terraform_user_test"
}

variable "user_password" {
  default = "!Test@123456"
}

variable "user_display_name" {
  default = "TestAccount"
}

variable "user_mobile" {
  default = "86-18688888888"
}

variable "user_email" {
  default = "example@example.com"
}

resource "alicloud_ram_user" "user" {
  name         = var.user_name
  display_name = var.user_display_name
  mobile       = var.user_mobile
  email        = var.user_email
  comments     = "Created by Terraform"
  force        = true                   
}

resource "alicloud_ram_login_profile" "profile" {
  user_name = alicloud_ram_user.user.name
  password  = var.user_password
}

resource "alicloud_ram_access_key" "ak" {
  user_name   = alicloud_ram_user.user.name
  secret_file = "accesskey.txt"
}

resource "alicloud_ram_policy" "policy" {
  policy_name     = "tf-example-policy"
  policy_document = <<EOF
  {
    "Statement": [
      {
        "Action": "ecs:*",
        "Effect": "Allow",
        "Resource":"*"
      }
    ],
      "Version": "1"
  }
  EOF
  description     = "This is a policy test."
}

resource "alicloud_ram_user_policy_attachment" "attach" {
  policy_name = alicloud_ram_policy.policy.policy_name
  policy_type = alicloud_ram_policy.policy.type
  user_name   = alicloud_ram_user.user.name
}

リファレンス