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

ApsaraMQ for Kafka:Terraform を使用してトピックを管理する

最終更新日:Feb 06, 2025

トピックは、ApsaraMQ for Kafka でメッセージを識別するために使用される第一レベルの識別子です。ApsaraMQ for Kafka を使用するには、まずアプリケーションのトピックを作成する必要があります。このトピックでは、Terraform によって提供される alicloud_alikafka_topic リソースを使用して、トピックを作成、削除、およびクエリする方法について説明します。

説明

このトピックのサンプルコードは、数クリックで実行できます。こちらをクリックしてサンプルコードを実行してください。

始める前に

  • Alibaba Cloud アカウントは、アカウントに属するすべてのリソースに対するフル 権限 を持っています。Alibaba Cloud アカウントの資格情報が漏洩した場合、セキュリティリスクが発生する可能性があります。Resource Access Management(RAM)ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。

  • RAM を使用して、クラウド リソースへのアクセス 権限 を効率的に管理する必要があります。これは、マルチユーザーコラボレーションの要件を満たすのに役立ち、過剰な 権限 によって引き起こされるセキュリティの脆弱性を防ぐために、最小 権限 の原則に基づいてユーザーに 権限 を付与できるようにします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:DeleteVpc",
                    "vpc:DeleteVSwitch",
                    "vpc:CreateVpc",
                    "vpc:CreateVSwitch"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "bss:ModifyAgreementRecord",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "bss:DescribeOrderList",
                    "bss:DescribeOrderDetail",
                    "bss:PayOrder",
                    "bss:CancelOrder"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSecurityGroup",
                    "ecs:ModifySecurityGroupPolicy",
                    "ecs:DescribeSecurityGroups",
                    "ecs:ListTagResources",
                    "ecs:DeleteSecurityGroup",
                    "ecs:DescribeSecurityGroupAttribute",
                    "ecs:AuthorizeSecurityGroup",
                    "ecs:RevokeSecurityGroup"
                ],
                "Resource": "*"
            },
            {
                "Action": "alikafka:*",
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": "ram:CreateServiceLinkedRole",
                "Resource": "*",
                "Effect": "Allow",
                "Condition": {
                    "StringEquals": {
                        "ram:ServiceName": [
                            "connector.alikafka.aliyuncs.com",
                            "instanceencryption.alikafka.aliyuncs.com",
                            "alikafka.aliyuncs.com",
                            "etl.alikafka.aliyuncs.com"
                        ]
                    }
                }
            }
        ]
    }
  • 次のいずれかの方法を使用して、Terraform の実行環境を準備します。

    • Terraform Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンライン実行環境である Terraform Explorer を提供しています。Terraform をインストールすることなく、Terraform Explorer にログインした後に Terraform を使用できます。この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。

    • Cloud Shell で Terraform を使用する: Terraform は Cloud Shell にプリインストールされており、ID 資格情報は構成されています。Cloud Shell で Terraform コマンドを直接実行できます。この方法は、低コストで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。

    • オンプレミス マシンに Terraform をインストールして構成する: この方法は、ネットワーク接続が不安定な場合、またはカスタム開発環境が必要な場合に適しています。

必要なリソース

説明

このトピックで必要な特定のリソースに対して課金されます。リソースが不要になった場合は、できるだけ早くリソースを解放するか、サブスクライブを解除してください。

トピックを作成する

次の例では、中国(深セン)リージョンに example-topic という名前のトピックを作成します。トピックを作成した後、トピックの名前を変更することはできません。

  1. 作業ディレクトリと、そのディレクトリに main.tf という名前の構成ファイルを作成します。次のコードを main.tf 構成ファイルにコピーします。

    • 必要なリソースを作成します。

      variable "region" {
        default = "cn-shenzhen"
      }
      
      variable "instance_name" {
        default = "alikafkaInstanceName"
      }
      
      variable "zone_id" {
        default = "cn-shenzhen-f"
      }
      
      provider "alicloud" {
        region = var.region
      }
      
      # VPC を作成します。
      resource "alicloud_vpc" "default" {
        vpc_name   = "alicloud"
        cidr_block = "172.16.0.0/16"
      }
      
      # vSwitch を作成します。
      resource "alicloud_vswitch" "default" {
        vpc_id     = alicloud_vpc.default.id
        cidr_block = "172.16.192.0/20"
        zone_id    = var.zone_id
      }
      
      # セキュリティグループを作成します。
      resource "alicloud_security_group" "default" {
        vpc_id = alicloud_vpc.default.id
      }
      
      # インスタンスを作成します。ディスクタイプは Ultra ディスク、ディスク容量は 500 GB、トラフィック仕様は alikafka.hw.2xlarge です。
      # インスタンスをデプロイします。
      resource "alicloud_alikafka_instance" "default" {
        name           = var.instance_name
        partition_num  = 50
        disk_type      = 0
        disk_size      = 500
        deploy_type    = 5
        io_max_spec    = "alikafka.hw.2xlarge"
        vswitch_id     = alicloud_vswitch.default.id
        security_group = alicloud_security_group.default.id
      }
    • main.tf 構成ファイルに、resource "alicloud_alikafka_topic" "default" {} 設定項目を追加します。

      variable "partition_num" {
        default = "12"
      }
      
      variable "remark" {
        default = "kafka_topic_remark"
      }
      
      resource "alicloud_alikafka_topic" "default" {
        instance_id   = alicloud_alikafka_instance.default.id
        topic         = "example-topic"
        local_topic   = "false"
        compact_topic = "false"
        partition_num = var.partition_num
        remark        = var.remark
      }
  2. 次のコマンドを実行して、Terraform の実行環境を初期化します。

    terraform init

    次の情報が返された場合、Terraform は初期化されています。

    Initializing the backend...
    
    Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
  3. 実行計画を作成し、変更をプレビューします。

    terraform plan
  4. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次の情報が表示された場合、操作は成功です。

    alicloud_vpc.default: Refreshing state... [id=vpc-****]
    alicloud_security_group.default: Refreshing state... [id=sg-****]
    alicloud_vswitch.default: Refreshing state... [id=vsw-****]
    alicloud_alikafka_instance.default: Refreshing state... [id=alikafka_post-cn-****]
    
    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
    following symbols:
      + create
    
    Terraform will perform the following actions:
    
      # alicloud_alikafka_topic.default will be created
      + resource "alicloud_alikafka_topic" "default" {
          + compact_topic = false
          + id            = (known after apply)
          + instance_id   = "alikafka_post-cn-****"
          + local_topic   = false
          + partition_num = 12
          + remark        = "kafka_topic_remark"
          + topic         = "example-topic"
        }
    
    Plan: 1 to add, 0 to change, 0 to destroy.
    
    Changes to Outputs:
      + partition_num = (known after apply)
    
    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
    
    alicloud_alikafka_topic.default: Creating...
    alicloud_alikafka_topic.default: Creation complete after 8s [id=alikafka_post-cn-****:example-topic]
    
    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  5. 結果を確認します。

    terraform show コマンドを使用する

    terraform show コマンドを実行して、ApsaraMQ for Kafka トピックに関する情報を表示します。

    terraform show
    # alicloud_alikafka_topic.default:
    resource "alicloud_alikafka_topic" "default" {
        compact_topic = false
        id            = "alikafka_post-cn-****:example-topic"
        instance_id   = "alikafka_post-cn-****"
        local_topic   = false
        partition_num = 12
        remark        = "kafka_topic_remark"
        topic         = "example-topic"
    }

    ApsaraMQ for Kafka コンソールを使用する

    ApsaraMQ for Kafka コンソール にログインして、ApsaraMQ for Kafka トピックに関する情報を表示します。p874255.png

トピックを更新する

次の例では、トピックのパーティション数と説明を変更します。

  1. main.tf 構成ファイルで、default パラメーターの値を variable "partition_num" および variable "remark" 設定項目で変更します。

    variable "region" {
      default = "cn-shenzhen"
    }
    
    variable "instance_name" {
      default = "alikafkaInstanceName"
    }
    
    variable "zone_id" {
      default = "cn-shenzhen-f"
    }
    
    variable "partition_num" {
      default = "24"
    }
    
    variable "remark" {
      default = "updated_kafka_topic_remark"
    }
    
    provider "alicloud" {
      region = var.region
    }
    
    # VPC を作成します。
    resource "alicloud_vpc" "default" {
      vpc_name   = "alicloud"
      cidr_block = "172.16.0.0/16"
    }
    
    # vSwitch を作成します。
    resource "alicloud_vswitch" "default" {
      vpc_id     = alicloud_vpc.default.id
      cidr_block = "172.16.192.0/20"
      zone_id    = var.zone_id
    }
    
    # セキュリティグループを作成します。
    resource "alicloud_security_group" "default" {
      vpc_id = alicloud_vpc.default.id
    }
    
    # インスタンスを作成します。ディスクタイプは Ultra ディスク、ディスク容量は 500 GB、トラフィック仕様は alikafka.hw.2xlarge です。
    # インスタンスをデプロイします。
    resource "alicloud_alikafka_instance" "default" {
      name           = var.instance_name
      partition_num  = 50
      disk_type      = 0
      disk_size      = 500
      deploy_type    = 5
      io_max_spec    = "alikafka.hw.2xlarge"
      vswitch_id     = alicloud_vswitch.default.id
      security_group = alicloud_security_group.default.id
    }
    
    resource "alicloud_alikafka_topic" "default" {
      instance_id   = alicloud_alikafka_instance.default.id
      topic         = "example-topic"
      local_topic   = "false"
      compact_topic = "false"
      partition_num = var.partition_num
      remark        = var.remark
    }
  2. 実行計画を作成し、変更をプレビューします。

    terraform plan
  3. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次の情報が表示された場合、操作は成功です。

    alicloud_vpc.default: Refreshing state... [id=vpc-****]
    alicloud_security_group.default: Refreshing state... [id=sg-****]
    alicloud_vswitch.default: Refreshing state... [id=vsw-****]
    alicloud_alikafka_instance.default: Refreshing state... [id=alikafka_post-cn-****]
    alicloud_alikafka_topic.default: Refreshing state... [id=alikafka_post-cn-****:example-topic]
    
    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
    following symbols:
      ~ update in-place
    
    Terraform will perform the following actions:
    
      # alicloud_alikafka_topic.default will be updated in-place
      ~ resource "alicloud_alikafka_topic" "default" {
            id            = "alikafka_post-cn-****:example-topic"
          ~ partition_num = 12 -> 24
          ~ remark        = "kafka_topic_remark" -> "updated_kafka_topic_remark"
            tags          = {}
            # (4 unchanged attributes hidden)
        }
    
    Plan: 0 to add, 1 to change, 0 to destroy.
    
    Changes to Outputs:
      ~ partition_num = "12" -> "24"
      ~ remark        = "kafka_topic_remark" -> "updated_kafka_topic_remark"
    
    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
    
    alicloud_alikafka_topic.default: Modifying... [id=alikafka_post-cn-****:example-topic]
    alicloud_alikafka_topic.default: Modifications complete after 2s [id=alikafka_post-cn-****:example-topic]
    
    Apply complete!  Resources: 0 added, 1 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを使用する

    terraform show コマンドを実行して、ApsaraMQ for Kafka トピックに関する情報を表示します。

    terraform show
    # alicloud_alikafka_topic.default:
    resource "alicloud_alikafka_topic" "default" {
        compact_topic = false
        id            = "alikafka_post-cn-****:example-topic"
        instance_id   = "alikafka_post-cn-****"
        local_topic   = false
        partition_num = 24
        remark        = "updated_kafka_topic_remark"
        tags          = {}
        topic         = "example-topic"
    }

    ApsaraMQ for Kafka コンソールを使用する

    ApsaraMQ for Kafka コンソール にログインして、ApsaraMQ for Kafka トピックに関する情報を表示します。image

トピックをクエリする

  1. main.tf 構成ファイルに、data "alicloud_alikafka_topics" "topics_ds" 設定項目を追加し、次のコード スニペットに基づいて設定項目を構成します。

    data "alicloud_alikafka_topics" "topics_ds" {
      instance_id = alicloud_alikafka_instance.default.id
    }
  2. 実行計画を作成し、変更をプレビューします。

    terraform plan
  3. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。コマンドが実行されるまで待ちます。次の情報が表示された場合、操作は成功です。

    No changes. Your infrastructure matches the configuration.
    
    Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
    
    Apply complete!  Resources: 0 added, 0 changed, 0 destroyed.
    
    Outputs:
    
    first_topic_name = "testtopic"
  4. 結果を確認します。terraform show コマンドを実行して、ApsaraMQ for Kafka トピックに関する情報を表示します。

    terraform show
    # data.alicloud_alikafka_topics.topics_ds:
    data "alicloud_alikafka_topics" "topics_ds" {
        id          = "29****"
        ids         = [
            "alikafka_post-cn-****:example-topic",
        ]
        instance_id = "alikafka_post-cn-****"
        names       = [
            null,
        ]
        output_file = "topics.txt"
        page_size   = 50
        topics      = [
            {
                compact_topic = false
                create_time   = "1732****"
                id            = "alikafka_post-cn-****:example-topic"
                instance_id   = "alikafka_post-cn-****"
                local_topic   = false
                partition_num = 24
                remark        = "updated_kafka_topic_remark"
                status        = 0
                status_name   = "Running"
                tags          = {}
                topic         = "example-topic"
            },
        ]
        total_count = 1
    }

リソースをクリアする

Terraform を使用して作成または管理された上記の不要なリソースがある場合は、次のコマンドを実行してリソースを解放します。terraform destroy コマンドの詳細については、「共通コマンド」をご参照ください。

terraform destroy

サンプルコード

説明

サンプルコードは、数クリックで実行できます。こちらをクリックしてサンプルコードを実行してください。

サンプルコード

variable "region" {
  default = "cn-shenzhen"
}

variable "instance_name" {
  default = "alikafkaInstanceName"
}

variable "zone_id" {
  default = "cn-shenzhen-f"
}

variable "partition_num" {
  default = "12"
}

variable "remark" {
  default = "kafka_topic_remark"
}

provider "alicloud" {
  region = var.region
}

# VPC を作成します。
resource "alicloud_vpc" "default" {
  vpc_name   = "alicloud"
  cidr_block = "172.16.0.0/16"
}

# vSwitch を作成します。
resource "alicloud_vswitch" "default" {
  vpc_id     = alicloud_vpc.default.id
  cidr_block = "172.16.192.0/20"
  zone_id    = var.zone_id
}

# セキュリティグループを作成します。
resource "alicloud_security_group" "default" {
  vpc_id = alicloud_vpc.default.id
}

# インスタンスを作成します。ディスクタイプは Ultra ディスク、ディスク容量は 500 GB、トラフィック仕様は alikafka.hw.2xlarge です。
# インスタンスをデプロイします。
resource "alicloud_alikafka_instance" "default" {
  name           = var.instance_name
  partition_num  = 50
  disk_type      = 0
  disk_size      = 500
  deploy_type    = 5
  io_max_spec    = "alikafka.hw.2xlarge"
  vswitch_id     = alicloud_vswitch.default.id
  security_group = alicloud_security_group.default.id
}

# ApsaraMQ for Kafka トピックを作成します。
resource "alicloud_alikafka_topic" "default" {
  instance_id   = alicloud_alikafka_instance.default.id
  topic         = "example-topic"
  local_topic   = "false"
  compact_topic = "false"
  partition_num = var.partition_num
  remark        = var.remark
}

# ApsaraMQ for Kafka トピックをクエリします。
data "alicloud_alikafka_topics" "topics_ds" {
  instance_id = alicloud_alikafka_instance.default.id
  depends_on = [alicloud_alikafka_topic.default]
}

関連ドキュメント

  • ApsaraMQ for Kafka コンソールでトピックを管理したり、API オペレーションを呼び出したりすることもできます。詳細については、「手順 3: リソースを作成する」および「CreateTopic」をご参照ください。

  • alicloud_alikafka_topic リソースによって提供される他の引数の詳細については、「alicloud_alikafka_topic」をご参照ください。