Fabric v3(ECX)からFabric v4(Fabric)への移行
2023年12月、Fabric v3 APIは非推奨となり、2024年6月にEOL(End of Life)を迎えます。ecxのTerraformリソースはこれらのAPIをベースに作られており、同じく2024年6月にEOLに達します。もしそれらを使用しているのであれば、このガイドはfabricに移行する手助けになるでしょう。Fabric v4 APIで構築されたTerraform Resourcesへの移行を支援します。
Fabric v3リソースは、以下のデータソースとリソースです:
データソース
data "equinix_ecx_l2_sellerprofile"data "equinix_ecx_l2_sellerprofiles"data "equinix_ecx_port"
リソース
resource "equinix_ecx_l2_connection"resource "equinix_ecx_l2_connection_accepter"resource "equinix_ecx_l2_service_profile"
これらのリソースはequinix_fabric_接頭辞を持つリソースファミリーに置き換えられます。
ECXとFabricのマッピング
ECXのリソースはすべてレイヤ2接続に限定されています。これは、Fabric v3の時点では可能性が限られていたためです。Fabric v4のAPIでは、レイヤ2とレイヤ3の接続が可能です。
これが意味するのは、Fabricリソースがより堅牢になり、1対1の正確なマッピングではなく、ECX接続タイプがFabricリソースのサブセットになったということです。
データソースマッピング
data "equinix_ecx_sellerprofile"の代わりにdata "equinix_fabric_service_profile"を使用data "equinix_ecx_sellerprofiles"の代わりにdata "equinix_fabric_service_profiles"を使用data "equinix_ecx_port"の代わりにdata "equinix_fabric_port"を使用
テンプレートの変更
売り手のプロフィール
data "equinix_ecx_l2_sellerprofile" "aws" {
name = "AWS Direct Connect"
}
output "id" {
value = data.equinix_ecx_l2_sellerprofile.aws.id
}
へのリンク
data "equinix_fabric_service_profile" "aws" {
uuid = "<uuid_of_aws_service_profile>"
}
output "id" {
value = data.equinix_fabric_service_profile.aws.id
}
名前で検索する場合は、equinix_fabric_service_profiles データソースを使用します。
data "equinix_fabric_service_profiles" "aws" {
filter {
property = "/name"
operator = "="
values = ["AWS Direct Connect"]
}
}
output "id" {
value = data.equinix_fabric_service_profile.aws.data.0.id
}
売り手のプロフィール
data "equinix_ecx_l2_sellerprofiles" "aws" {
organization_global_name = "AWS"
}
へのリンク
data "equinix_fabric_service_profiles" "aws" {
filter {
property = "/name"
operator = "="
values = ["AWS"]
}
}
ポート
data "equinix_ecx_port" "tf-pri-dot1q" {
name = "sit-001-CX-NY5-NL-Dot1q-BO-10G-PRI-JP-157"
}
output "id" {
value = data.equinix_ecx_port.tf-pri-dot1q.id
}
へのリンク
data "equinix_fabric_ports" "tf-pri-dot1q" {
filters {
name = "sit-001-CX-NY5-NL-Dot1q-BO-10G-PRI-JP-157"
}
}
output "id" {
value = data.equinix_fabric_ports.tf-pri-dot1q.0.id
}
リソースマッピング
resource "equinix_ecx_l2_connection"の代わりにresource "equinix_fabric_connection"を使用resource "equinix_ecx_l2_connection_acceptorは非推奨です。- AWSの
resource "equinix_fabric_connection"のadditional_infoプロパティにAWSシークレットキーとAWSアクセスキーを追加します。 - または、'AWS' プロバイダの同等のリソース
aws_dx_connection_confirmationを代わりに使用してください。"
- AWSの
resource "equinix_ecx_l2_service_profile"の代わりにresource "equinix_fabric_service_profile"を使用
テンプレートの変更
L2接続:
resource "equinix_ecx_l2_connection" "port-2-aws" {
name = "tf-aws"
profile_uuid = "<aws_service_profile_uuid>"
speed = 200
speed_unit = "MB"
notifications = ["marry@equinix.com", "john@equinix.com"]
port_uuid = "<port_uuid>"
vlan_stag = 777
vlan_ctag = 1000
seller_region = "us-west-1"
seller_metro_code = "SV"
authorization_key = "<aws_account_id>"
}
へのリンク
resource "equinix_fabric_connection" "port2aws" {
name = "tf-aws"
type = "EVPL_VC" # L2 Connection
notifications {
type = "ALL"
emails = ["marry@equinix.com", "john@equinix.com"]
}
bandwidth = 200 # Speed unit is defaulted to MB
redundancy { priority= "PRIMARY" }
order {
purchase_order_number= "1-323929"
}
a_side {
access_point {
type= "COLO"
port {
uuid = "<port_uuid>"
}
link_protocol {
type = "QINQ"
vlan_s_tag = "777"
vlan_c_tag = "1000"
}
}
}
z_side {
access_point {
type = "SP"
authentication_key = "<aws_account_id>"
seller_region = "us-west-1"
profile {
type = "L2_PROFILE"
uuid = "<aws_service_profile_uuid>"
}
location {
metro_code = "SV"
}
}
}
additional_info = [
{ key = "accessKey", value = "<aws_access_key>" },
{ key = "secretKey", value = "<aws_secret_key>" }
]
}
サービス概要
resource "equinix_ecx_l2_serviceprofile" "private-profile" {
name = "private-profile"
description = "my private profile"
connection_name_label = "Connection"
bandwidth_threshold_notifications = ["John.Doe@example.com", "Marry.Doe@example.com"]
profile_statuschange_notifications = ["John.Doe@example.com", "Marry.Doe@example.com"]
vc_statuschange_notifications = ["John.Doe@example.com", "Marry.Doe@example.com"]
private = true
private_user_emails = ["John.Doe@example.com", "Marry.Doe@example.com"]
features {
allow_remote_connections = true
test_profile = false
}
port {
uuid = "a867f685-422f-22f7-6de0-320a5c00abdd"
metro_code = "NY"
}
port {
uuid = "a867f685-4231-2317-6de0-320a5c00abdd"
metro_code = "NY"
}
speed_band {
speed = 1000
speed_unit = "MB"
}
speed_band {
speed = 500
speed_unit = "MB"
}
speed_band {
speed = 100
speed_unit = "MB"
}
}
へのリンク
resource "equinix_fabric_service_profile" "private-profile" {
name = "private-profile"
description = "my private profile"
type = "L2_PROFILE" # Need to specify to make it an Layer 2 Profile
visibility = "PRIVATE"
notifications = [
{
emails = ["John.Doe@example.com", "Marry.Doe@example.com"]
type = "BANDWIDTH_ALERT"
},
{
emails = ["John.Doe@example.com", "Marry.Doe@example.com"]
type = "PROFILE_LIFECYCLE"
},
{
emails = ["John.Doe@example.com", "Marry.Doe@example.com"]
type = "CONNECTION_APPROVAL"
}
]
allowed_emails = ["John.Doe@example.com", "Marry.Doe@example.com"]
ports = [
{
uuid = "c791f8cb-5cc9-cc90-8ce0-306a5c00a4ee"
type = "XF_PORT"
},
{
uuid = "a867f685-4231-2317-6de0-320a5c00abdd"
type = "XF_PORT"
}
]
access_point_type_configs {
type = "COLO"
allow_remote_connections = true
connection_label = "Connection"
supported_bandwidths = [ 100, 500, 1000 ]
}
}
Terraformの状態の移行
テンプレートを適宜変更したら、Terraformの状態から古いequinix_ecx_リソースを削除し、新しいリソースをequinix_fabric_リソースとしてUUIDでインポートします。
terraform stateとimportコマンドでは、リソースのタイプと名前をドットで区切って使用します:
terraform state rm equinix_ecx_l2_connection.example
terraform import equinix_fabric_connection.example <resource_uuid>
その後、テンプレートはTerraformの状態やEquinix Fabricの上流リソースと整合しているはずです。terraform planを実行して移行を確認すると、インフラストラクチャが最新であることがわかります。