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"
}
- ファブリックモジュールページのEquinix接続例をご覧ください。 Fabric Terraform Modulesでサポートされるその他のFabricユースケースについては
お使いのクラウドプロバイダのものが見つからない場合は、github リポジトリ にリクエストのチケットを開くことができます。
参考文献
- APIハウツーガイドを参照してください。 各クラウドサービスプロバイダの要件に関する詳細は、こちらをご覧ください。
- 利用可能なプロバイダを確認します。 Platform Equinix®で必要なサービスプロバイダーを検索してください。