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

EventBridge:Terraform を使用してイベントバスを管理する

最終更新日:Mar 19, 2025

Terraform は、クラウドインフラストラクチャとリソースを安全かつ効率的にプレビュー、構成、管理するために使用できるオープンソースツールです。このトピックでは、イベントバス、イベントソース、接続、API 宛先、およびイベントルールの作成方法など、Terraform を使用してイベントバスを管理する方法について説明します。

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。 ここ をクリックしてサンプルコードを実行します。

始める前に

  • 次のサービスがアクティブになっていることを確認します。

  • このトピックの操作を実行するために必要な最小限の権限を持つ RAM ユーザーを使用することをお勧めします。これにより、Alibaba Cloud アカウントの AccessKey ペアが漏洩するリスクが軽減されます。詳細については、「RAM ユーザーを作成する」および「RAM ユーザーに権限を付与する」をご参照ください。このトピックでは、次のポリシーが RAM ユーザーにアタッチされています。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "mns:*",
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "eventbridge:GetEventBus",
            "eventbridge:ListEventBuses",
            "eventbridge:CreateEventBus",
            "eventbridge:DeleteEventBus",
            "eventbridge:UpdateEventBus",
            "eventbridge:ListApiDestinations",
            "eventbridge:ListUserDefinedEventSources",
            "eventbridge:CreateEventSource",
            "eventbridge:DeleteEventSource",
            "eventbridge:UpdateEventSource",
            "eventbridge:ListPartnerEventSources",
            "eventbridge:GetRule",
            "eventbridge:ListRules",
            "eventbridge:CreateRule",
            "eventbridge:DeleteRule",
            "eventbridge:EnableRule",
            "eventbridge:UpdateRule",
            "eventbridge:ListConnections",
            "eventbridge:CreateConnection",
            "eventbridge:DeleteConnection",
            "eventbridge:UpdateConnection",
            "eventbridge:GetConnection",
            "eventbridge:GetApiDestination",
            "eventbridge:CreateApiDestination",
            "eventbridge:DeleteApiDestination",
            "eventbridge:UpdateApiDestination"
          ],
          "Resource": "*"
        }
      ]
    }
  • Terraform のランタイム環境は、次のいずれかの方法で準備します。

    • Terraform Explorer で Terraform を使用する:Alibaba Cloud は Terraform のオンラインランタイム環境を提供しています。環境にログインして、Terraform をインストールせずに使用できます。低コスト、効率的、かつ便利な方法で Terraform を使用およびデバッグする必要があるシナリオに適しています。

    • Cloud Shell で Terraform を使用する:Cloud Shell には Terraform がプリインストールされており、ID 資格情報が構成されています。Cloud Shell で Terraform コマンドを実行できます。低コスト、効率的、かつ便利な方法で Terraform を使用およびアクセスする必要があるシナリオに適しています。

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

リソース

説明

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

手順 1:イベントバスとイベントソースを作成する

  1. main.tf という名前の構成ファイルを含む作業ディレクトリを作成します。次に、次のコードを main.tf 構成ファイルにコピーします。このコードは、イベントバスと SMQ キューを作成し、SMQ キューをイベントソースとして指定するために使用されます。

    variable "region" {
      default = "cn-shanghai"
    }
    
    provider "alicloud" {
      region = var.region
    }
    
    variable "api_key_name"{
      default = "<認証に使用する API キーのユーザー名>"
    }
    
    
    variable "api_key_value"{
      default = "<認証に使用する API キーの値>"
    }
    
    # API 宛先の URL。
    variable "endpoint"{
      default = "http://xxxx:8080/putEventsByAPiKey"
    }
    
    data "alicloud_account" "default" {
    }
    
    resource "random_integer" "default" {
      min = 10000
      max = 99999
    }
    
    # カスタムイベントバス。
    resource "alicloud_event_bridge_event_bus" "example" {
      event_bus_name = "event_bus_name_${random_integer.default.result}"
    }
    
    # SMQ キュー。キューはイベントソースとして使用されます。
    resource "alicloud_mns_queue" "source" {
      name = "queue-name-source-${random_integer.default.result}"
    }
    
    # カスタムイベントソース。
    resource "alicloud_event_bridge_event_source" "default" {
      event_bus_name         = alicloud_event_bridge_event_bus.example.event_bus_name
      event_source_name      = "event_source_name_${random_integer.default.result}"
      description            = "description_${random_integer.default.result}"
      linked_external_source = true
      external_source_type   = "MNS"
      external_source_config = {
        QueueName = alicloud_mns_queue.source.name
      }
    }
  2. 次のコマンドを実行して、Terraform ランタイム環境を初期化します。

    terraform init

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

    Terraform has been successfully initialized!
    
    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
    commands will detect it and remind you to do so if necessary.
  3. 次のコマンドを実行して、コードの実行を開始します。

    terraform apply

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

    You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.
    
    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
    
    
    Apply complete!  Resources: 4 added, 0 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを使用する

    作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成したリソースの詳細をクエリします。

    terraform show

    image

    EventBridge コンソールを使用する

    1. EventBridge コンソールにログインし、[イベントバス] ページに移動します。上部のナビゲーションバーで、作成したカスタムイベントバスが存在するリージョンを選択します。この例では、[中国 (上海)] が選択されています。次に、イベントバスリストで、作成したカスタムイベントバスを表示します。

      image

    2. [イベントバス] ページで、作成したカスタムイベントバスの名前をクリックします。イベントバスの詳細ページの左側のナビゲーションウィンドウで、 をクリックして、作成したイベントソースを表示します。

      image

手順 2:接続と API 宛先を作成する

  1. main.tf ファイルに次のコンテンツを追加します。

    # 接続。
    resource "alicloud_event_bridge_connection" "defaultConnection" {
      connection_name = "connection_name_${random_integer.default.result}"
      description     = "description_alicloud_event_bridge_connection_${random_integer.default.result}"
      network_parameters {
        network_type      = "PublicNetwork"
      }
      auth_parameters {
        authorization_type = "API_KEY_AUTH"
        api_key_auth_parameters {
          api_key_name  = var.api_key_name
          api_key_value = var.api_key_value
        }
      }
    }
    
    # API 宛先。
    resource "alicloud_event_bridge_api_destination" "default" {
      description = "description_alicloud_event_bridge_api_destinationn_${random_integer.default.result}"
      http_api_parameters {
        endpoint = var.endpoint
        method   = "POST"
      }
      api_destination_name = "api_destination_name_${random_integer.default.result}"
      connection_name = alicloud_event_bridge_connection.defaultConnection.connection_name
    }
  2. 実行計画を作成し、変更をプレビューします。

    terraform plan
  3. 次のコマンドを実行して、コードの実行を開始します。

    terraform apply

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

    Apply complete!  Resources: 2 added, 0 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを使用する

    作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成したリソースの詳細をクエリします。

    terraform show

    image

    EventBridge コンソールを使用する

    1. EventBridge コンソールにログインします。左側のナビゲーションウィンドウで、[統合センター] > [API 宛先] を選択します。上部のナビゲーションバーで、作成した接続が存在するリージョンを選択します。この例では、[中国 (上海)] が選択されています。次に、[接続] タブをクリックして、作成した接続を表示します。

      image

    2. [API 宛先] タブをクリックして、作成した API 宛先を表示します。

      image

手順 3:イベントルールを作成する

  1. main.tf ファイルに次のコンテンツを追加します。

    # イベントルール。
    resource "alicloud_event_bridge_rule" "default" {
      event_bus_name = alicloud_event_bridge_event_bus.example.event_bus_name
      rule_name      = "rule_name_${random_integer.default.result}"
      description    = "description_${random_integer.default.result}"
      filter_pattern = "{\n \"source\": [\n \"tf-test-api-key\"\n ]\n}"
      targets {
        target_id = "tf_example_${random_integer.default.result}"
        endpoint  = "acs:api-destination:${var.region}:${data.alicloud_account.default.id}:name/${alicloud_event_bridge_api_destination.default.api_destination_name}"
        type      = "acs.api.destination"
        param_list {
          resource_key = "Name"
          form         = "CONSTANT"
          value        = "terraform-api_destination-name-api-key"
        }
        param_list {
          resource_key = "QueryStringParameters"
          form         = "TEMPLATE"
          value        = "{\"queryKey1\":\"id\",\"queryValue1\":\"$.data.name\"}"
          # ${} は EventBridge で変数を指定するために使用され、$${} は Terraform ファイルで変数を指定するために使用されます。
          template     = "{\"$${queryKey1}\":\"$${queryValue1}\"}"
        }
      }
    }
  2. 実行計画を作成し、変更をプレビューします。

    terraform plan
  3. 次のコマンドを実行して、コードの実行を開始します。

    terraform apply

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

    Apply complete!  Resources: 1 added, 0 changed, 0 destroyed.
  4. 結果を確認します。

    terraform show コマンドを使用する

    作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成したリソースの詳細をクエリします。

    terraform show

    image

    EventBridge コンソールを使用する

    1. EventBridge コンソールにログインし、[イベントバス] ページに移動します。上部のナビゲーションバーで、作成したイベントルールが存在するリージョンを選択します。この例では、[中国 (上海)] が選択されています。次に、イベントバスリストで、作成したカスタムイベントバスを見つけ、[操作] 列の [イベントルール] をクリックして、作成したイベントルールを表示します。

      image

リソースを解放する

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

terraform destroy

サンプルコード全体

説明

このトピックのサンプルコードは、数回クリックするだけで実行できます。 ここ をクリックしてサンプルコードを実行します。

サンプルコード

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

provider "alicloud" {
  region = var.region
}

variable "api_key_name"{
  default = "<認証に使用する API キーのユーザー名>"
}


variable "api_key_value"{
  default = "<認証に使用する API キーの値>"
}

# API 宛先の URL。
variable "endpoint"{
  default = "http://xxxx:8080/putEventsByAPiKey"
}

data "alicloud_account" "default" {
}

resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# カスタムイベントバス。
resource "alicloud_event_bridge_event_bus" "example" {
  event_bus_name = "event_bus_name_${random_integer.default.result}"
}


# SMQ キュー。キューはイベントソースとして使用されます。
resource "alicloud_mns_queue" "source" {
  name = "queue-name-source-${random_integer.default.result}"
}

# カスタムイベントソース。
resource "alicloud_event_bridge_event_source" "default" {
  event_bus_name         = alicloud_event_bridge_event_bus.example.event_bus_name
  event_source_name      = "event_source_name_${random_integer.default.result}"
  description            = "description_${random_integer.default.result}"
  linked_external_source = true
  external_source_type   = "MNS"
  external_source_config = {
    QueueName = alicloud_mns_queue.source.name
  }
}

# 接続。
resource "alicloud_event_bridge_connection" "defaultConnection" {
  connection_name = "connection_name_${random_integer.default.result}"
  description     = "description_alicloud_event_bridge_connection_${random_integer.default.result}"
  network_parameters {
    network_type      = "PublicNetwork"
  }
  auth_parameters {
    authorization_type = "API_KEY_AUTH"
    api_key_auth_parameters {
      api_key_name  = var.api_key_name
      api_key_value = var.api_key_value
    }
  }
}

# API 宛先。
resource "alicloud_event_bridge_api_destination" "default" {
  description = "description_alicloud_event_bridge_api_destinationn_${random_integer.default.result}"
  http_api_parameters {
    endpoint = var.endpoint
    method   = "POST"
  }
  api_destination_name = "api_destination_name_${random_integer.default.result}"
  connection_name = alicloud_event_bridge_connection.defaultConnection.connection_name
}

# イベントルール。
resource "alicloud_event_bridge_rule" "default" {
  event_bus_name = alicloud_event_bridge_event_bus.example.event_bus_name
  rule_name      = "rule_name_${random_integer.default.result}"
  description    = "description_${random_integer.default.result}"
  filter_pattern = "{\n \"source\": [\n \"tf-test-api-key\"\n ]\n}"
  targets {
    target_id = "tf_example_${random_integer.default.result}"
    endpoint  = "acs:api-destination:${var.region}:${data.alicloud_account.default.id}:name/${alicloud_event_bridge_api_destination.default.api_destination_name}"
    type      = "acs.api.destination"
    param_list {
      resource_key = "Name"
      form         = "CONSTANT"
      value        = "terraform-api_destination-name-api-key"
    }
    param_list {
      resource_key = "QueryStringParameters"
      form         = "TEMPLATE"
      value        = "{\"queryKey1\":\"id\",\"queryValue1\":\"$.data.name\"}"
      # ${} は EventBridge で変数を指定するために使用され、$${} は Terraform ファイルで変数を指定するために使用されます。
      template     = "{\"$${queryKey1}\":\"$${queryValue1}\"}"
    }
  }
}

その他の例については、GitHub の Event_Bridge フォルダをご覧ください。