Migration de Fabric v3 (ecx) vers Fabric v4 (fabric)
En décembre 2023, les API de la Fabric v3 ont été dépréciées et elles atteindront leur fin de vie en juin 2024. Les ressources Terraform ecx sont construites sur ces API et atteindront également la fin de vie en juin 2024. Si vous les utilisez, ce guide vous aidera à migrer vers les fabric Terraform qui sont construites avec les API de la Fabric v4.
Les ressources de la Fabric v3 sont les sources de données et les ressources suivantes :
Sources des données :
data "equinix_ecx_l2_sellerprofile"data "equinix_ecx_l2_sellerprofiles"data "equinix_ecx_port"
Ressources :
resource "equinix_ecx_l2_connection"resource "equinix_ecx_l2_connection_accepter"resource "equinix_ecx_l2_service_profile"
Ils sont remplacés par la famille de ressources avec le préfixe equinix_fabric_.
Mappage de l'ECX à la Fabric
Toutes les ressources ECX sont limitées aux connexions de niveau 2. Cela est dû au nombre limité de possibilités qui existaient à l'époque de la Fabric v3. Les API de la Fabric v4 permettent d'établir des connexions de couche 2 et de couche 3.
Cela signifie que les ressources Fabric sont plus robustes et qu'il n'y a donc pas de correspondance exacte, mais plutôt que les types de connexion ECX sont désormais un sous-ensemble d'une ressource Fabric.
Mappages de sources de données :
- Utilisez
data "equinix_fabric_service_profile"au lieu dedata "equinix_ecx_sellerprofile" - Utilisez
data "equinix_fabric_service_profiles"au lieu dedata "equinix_ecx_sellerprofiles" - Utilisez
data "equinix_fabric_port"au lieu dedata "equinix_ecx_port"
Les changements de modèle seraient :
Profil du vendeur :
data "equinix_ecx_l2_sellerprofile" "aws" {
name = "AWS Direct Connect"
}
output "id" {
value = data.equinix_ecx_l2_sellerprofile.aws.id
}
pour
data "equinix_fabric_service_profile" "aws" {
uuid = "<uuid_of_aws_service_profile>"
}
output "id" {
value = data.equinix_fabric_service_profile.aws.id
}
ou si vous souhaitez toujours effectuer une recherche par nom, vous devez utiliser la source de données 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
}
Profils des vendeurs :
data "equinix_ecx_l2_sellerprofiles" "aws" {
organization_global_name = "AWS"
}
pour
data "equinix_fabric_service_profiles" "aws" {
filter {
property = "/name"
operator = "="
values = ["AWS"]
}
}
Port :
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
}
pour
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
}
Mappages de ressources
- Utilisez
resource "equinix_fabric_connection"au lieu deresource "equinix_ecx_l2_connection" resource "equinix_ecx_l2_connection_acceptorest obsolète.- Ajoutez votre clé secrète AWS et votre clé d'accès AWS à la propriété
additional_infodansresource "equinix_fabric_connection"pour AWS - Ou utilisez plutôt la ressource équivalente
aws_dx_connection_confirmationdans le fournisseur 'AWS'."
- Ajoutez votre clé secrète AWS et votre clé d'accès AWS à la propriété
- Utilisez
resource "equinix_fabric_service_profile"au lieu deresource "equinix_ecx_l2_service_profile"
Modifications du modèle
L2 Connection :
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>"
}
pour
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>" }
]
}
Profil du service :
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"
}
}
pour
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 ]
}
}
Migration de l'état de Terraform
Une fois que nous avons modifié le modèle en conséquence, nous pouvons supprimer les anciennes ressources equinix_ecx_ de l'état Terraform et importer les nouvelles en tant que ressources equinix_fabric_ par leurs UUID.
Dans les commandes terraform state et import, nous utilisons le type et le nom de la ressource, séparés par un point :
terraform state rm equinix_ecx_l2_connection.example
terraform import equinix_fabric_connection.example <resource_uuid>
Après cela, nos modèles devraient être en vérification avec l'état de Terraform et avec les ressources en amont dans Equinix Fabric. Nous pouvons vérifier la migration en exécutant terraform plan, qui devrait montrer que l'infrastructure est à jour.