本文へスキップ

TerraformによるEquinix Fabricのクラウド接続

->注: 詳細は[Equinix Fabricのドキュメントをご覧ください。

Equinix Fabric™はソフトウェア定義の相互接続サービスで、グローバルに接続されたネットワークを通じて、自社の分散インフラストラクチャをPlatform Equinix®上の他社のインフラストラクチャやサービスプロバイダーに接続できます。このガイドでは、主にクラウドサービスプロバイダーとの相互接続の確立と、Equinix Fabric接続テラフォームモジュールの活用方法について説明します。詳細やその他のオプションについては、以下のプロバイダセクションを参照してください。

はじめに - 相互接続の有効化

マルチクラウド、ハイブリッドクラウドのどちらのアーキテクチャを構築する場合でも、主なリソースとしてequinix_fabric_connectionを定義する必要があります。 Equinix_fabric_connectionは、お客様に代わってエクイニクスが指定されたクラウドプロバイダーとの相互接続を可能にするものです。 しかし、相互接続を有効にするには、エクイニクスとクラウドプロバイダーの両方で設定する必要があります。以下では、Azure ExpressRouteを例に、これらの一般的な手順を説明します。

1. クラウドプロバイダーで相互接続を可能にする - 通常、これはクラウドルーターと相互接続アセット(Google Cloud RouterとVLANアタッチメント、Oracle FastConnectなど)の作成を意味します。この例では、azurerm_express_route_circuitリソースが必要で、有効なペアリング・キーを生成するために、サービス・プロバイダ(つまりEquinix)を指定する必要があります。

provider "azurerm" {
features {}
}

resource "azurerm_express_route_circuit" "example" {
name = "my-circuit"
resource_group_name = "my-resource-group"
location = "Germany West Central"
service_provider_name = "Equinix"
peering_location = "Frankfurt"
bandwidth_in_mbps = 100
sku {
tier = "Premium"
family = "UnlimitedData"
}
allow_classic_operations = false
}

2. Equinix Fabric接続のリクエスト - [Equinix Fabric Port / [Network Edge Device / [Equinix Service Token / [Equinix Fabric Cloud Router からクラウド仮想相互接続アセットへ。

この例では、クラウド・ルーター・リソース)からの接続を確立します。authorization_keyの値はazurerm_express_route_circuit.example.service_key(つまり前述のペアリング・キー)でなければならないことに注意してください。

provider "equinix" {}

data "equinix_fabric_service_profile" "azure" {
name = "Azure ExpressRoute"
filter {
property = "/name"
operator = "="
values = ["Azure ExpressRoute"]
}
}

resource "equinix_fabric_connection" "fcr2azure"{
name = "ConnectionName"
type = "IP_VC"
notifications{
type = "ALL"
emails = ["example@equinix.com","test1@equinix.com"]
}
bandwidth = azurerm_express_route_circuit.example.bandwidth_in_mbps
order {
purchase_order_number = "1-323292"
}
a_side {
access_point {
type = "CLOUD_ROUTER"
router {
uuid = "<cloud_router_uuid>"
}
}
}
z_side {
access_point {
type = "SP"
authentication_key = azurerm_express_route_circuit.example.service_key
peering_type = "PRIVATE"
profile {
type = "L2_PROFILE"
uuid = data.equinix_fabric_service_profile.azure.data.0.id
}
location {
metro_code = "SV"
}
}
}
}

3. クラウド側でのBGPの設定 - 回線ピアリングまたは仮想インターフェイスとして知られ、すべてのクラウドプロバイダがBGPピアを追加するリソースを提供しています。一般的に必要とされる詳細は以下のとおりです:

  • カスタマールーターIP(クラウドプロバイダーが送信する宛先ルーターピアIP トラフィック)。
  • クラウド・ルーターIP(クラウドにトラフィックを送信するための仮想ルーター・ピアIP)。
  • 顧客のBGP ASN(オンプレミスピアのボーダー・ゲートウェイ・プロトコル自律システム番号 ルーター)。

この例では、プライマリ接続とセカンダリ接続の両方の詳細を定義するazurerm_express_route_circuit_peeringを作成する必要があります。

resource "azurerm_express_route_circuit_peering" "example" {
express_route_circuit_name = azurerm_express_route_circuit.example.name
resource_group_name = "my-resource-group"

peering_type = "AzurePrivatePeering"
peer_asn = 100
primary_peer_address_prefix = "123.0.0.0/30"
secondary_peer_address_prefix = "123.0.0.4/30"
vlan_id = 300
bandwidth_in_mpbs = 50
}

4. エクイニクス側でBGPを設定 - 最後に、カスタマー側でも同じ情報を設定する必要があります。この例では接続元がFabric Cloud Routerであるため、equinix_fabric_routing_protocolリソースを利用してBGPピアリングをCloud Routerに設定できます。

resource "equinix_fabric_routing_protocol" "direct"{
connection_uuid = equinix_fabric_connection.fcr2azure.id
type = "DIRECT"
name = "direct_rp"
direct_ipv4 {
equinix_iface_ip = "190.1.1.1/30"
}
direct_ipv6{
equinix_iface_ip = "190::1:1/126"
}
}

resource "equinix_fabric_routing_protocol" "bgp" {
depends_on = [
equinix_fabric_routing_protocol.direct
]
connection_uuid = equinix_fabric_connection.fcr2azure.id
type = "BGP"
name = "bgp_rp"
bgp_ipv4 {
customer_peer_ip = "190.1.1.2"
enabled = true
}
bgp_ipv6 {
customer_peer_ip = "190::1:2"
enabled = true
}
customer_asn = 4532
}

Terraform モジュール - 最も簡単な方法

エクイニクス側では同じような構成に見えますが、構成に必要なリソースは各クラウドプロバイダーによって異なります。そのため、各プラットフォームでの相互接続の設定方法に関する予備知識が必要となります。また、[Equinix Fabric Terraform Modules を利用することもできます。

terraformモジュールは、構成内で一緒に使用する複数のリソースをコンテナ化します。 Equinix Fabric Terraform Cloud Router 2 Azure接続例モジュールと[Equinix Fabric Terraform Routing Protocolsモジュールを使用すると、3つのリソースを定義するだけで、上記のすべてを構成できます。

以下のコードは、上記の例を完全に置き換えるために必要なものです:

# main.tf
provider "equinix" {}

provider "azurerm" {}

module "equinix-fabric-connection-azure" {
source = "equinix/fabric/equinix//examples/cloud-router-2-azure-connection"


# Connection Details
connection_name = "fcr_2_azure"
connection_type = "IP_VC"
notifications_type = "ALL"
notifications_emails = ["example@equinix.com","test1@equinix.com"]
purchase_order_number = "1-323292"
bandwidth = 50
aside_ap_type = "CLOUD_ROUTER"
aside_fcr_uuid = "<Primary Fabric Cloud router UUID>"
zside_ap_type = "SP"
zside_ap_profile_type = "L2_PROFILE"
zside_location = "SV"
zside_peering_type = "PRIVATE"
zside_fabric_sp_name = "Azure ExpressRoute"

# Azure details
azure_client_id = "<Azure Client Id>"
azure_client_secret = "<Azure Client Secret Value>"
azure_tenant_id = "<Azure Tenant Id>"
azure_subscription_id = "<Azure Subscription Id>"
azure_resource_name = "my-resource-group"
azure_location = "West US 2"
azure_service_key_name = "Test_Azure_Key"
azure_service_provider_name = "<Service Provider Name>"
azure_peering_location = "Silicon Valley Test"
azure_tier = "Standard"
azure_family = "UnlimitedData"
azure_environment = "PROD"
}

resource "azurerm_express_route_circuit_peering" "example" {
express_route_circuit_name = module.equinix-fabric-connection-azure.azurerm_express_route_circuit_name
resource_group_name = "my-resource-group"

peering_type = "AzurePrivatePeering"
peer_asn = 100
primary_peer_address_prefix = "123.0.0.0/30"
secondary_peer_address_prefix = "123.0.0.4/30"
vlan_id = 300
bandwidth_in_mpbs = 50
}

module "routing_protocols" {
source = "equinix/fabric/equinix//modules/routing-protocols"

connection_uuid = module.equinix-fabric-connection-azure.module_output

# Direct RP Details
direct_rp_name = "direct_rp"
direct_equinix_ipv4_ip = "190.1.1.1/30"
direct_equinix_ipv6_ip = "190::1:1/126"

# BGP RP Details
bgp_rp_name = "bgp_rp"
bgp_customer_asn = 4532
bgp_customer_peer_ipv4 = "190.1.1.2"
bgp_enabled_ipv4 = true
bgp_customer_peer_ipv6 = var.bgp_customer_peer_ipv6
bgp_enabled_ipv6 = "190::1:2"
}

お使いのクラウドプロバイダのものが見つからない場合は、github リポジトリ にリクエストのチケットを開くことができます。

参考文献

  • APIハウツーガイドを参照してください。 各クラウドサービスプロバイダの要件に関する詳細は、こちらをご覧ください。
  • 利用可能なプロバイダを確認します。 Platform Equinix®で必要なサービスプロバイダーを検索してください。
このページは役に立ちましたか?