Migración de Fabric v3 (ecx) a Fabric v4 (fabric)
En diciembre de 2023, las API Fabric v3 quedaron obsoletas y llegarán al final de su vida útil (EOL) en junio de 2024. Los ecx Terraform Resources están construidos sobre esas APIs y también alcanzarán el EOL en junio de 2024. Si los está utilizando esta guía le ayudará a migrar a los fabric Terraform Resources que están construidos con las APIs Fabric v4.
Los recursos de Fabric v3 son las siguientes fuentes y recursos de datos:
Fuentes de datos:
data "equinix_ecx_l2_sellerprofile"data "equinix_ecx_l2_sellerprofiles"data "equinix_ecx_port"
Recursos:
resource "equinix_ecx_l2_connection"resource "equinix_ecx_l2_connection_accepter"resource "equinix_ecx_l2_service_profile"
Están siendo sustituidos por la familia de recursos con el prefijo equinix_fabric_.
Asignación de ECX a Fabric
Todos los recursos ECX están limitados a conexiones de capa 2. Esto se debe a las limitadas posibilidades que existían en la época de Fabric v3. Las API de Fabric v4 permiten Conexiones de Capa 2 y Capa 3.
Lo que esto significa es que los recursos Fabric son más robustos, por lo que no existe un mapeo exacto uno a uno, sino que los tipos de conexión ECX son ahora un subconjunto de un recurso Fabric.
Asignaciones de fuentes de datos:
- Utilice
data "equinix_fabric_service_profile"en lugar dedata "equinix_ecx_sellerprofile" - Utilice
data "equinix_fabric_service_profiles"en lugar dedata "equinix_ecx_sellerprofiles" - Utilice
data "equinix_fabric_port"en lugar dedata "equinix_ecx_port"
Los cambios en la plantilla serían:
Perfil del vendedor:
data "equinix_ecx_l2_sellerprofile" "aws" {
name = "AWS Direct Connect"
}
output "id" {
value = data.equinix_ecx_l2_sellerprofile.aws.id
}
a
data "equinix_fabric_service_profile" "aws" {
uuid = "<uuid_of_aws_service_profile>"
}
output "id" {
value = data.equinix_fabric_service_profile.aws.id
}
o si aún desea buscar por nombre utilizaría la fuente de datos 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
}
Perfiles de vendedores:
data "equinix_ecx_l2_sellerprofiles" "aws" {
organization_global_name = "AWS"
}
a
data "equinix_fabric_service_profiles" "aws" {
filter {
property = "/name"
operator = "="
values = ["AWS"]
}
}
Puerto:
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
}
a
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
}
Asignación de recursos
- Utilice
resource "equinix_fabric_connection"en lugar deresource "equinix_ecx_l2_connection" resource "equinix_ecx_l2_connection_acceptorestá obsoleto.- Añada su clave secreta de AWS y su clave de acceso de AWS a la propiedad
additional_infoenresource "equinix_fabric_connection"para AWS - O utilice en su lugar el recurso equivalente
aws_dx_connection_confirmationen el proveedor 'AWS'".
- Añada su clave secreta de AWS y su clave de acceso de AWS a la propiedad
- Utilice
resource "equinix_fabric_service_profile"en lugar deresource "equinix_ecx_l2_service_profile"
Cambios en la plantilla
Conexión 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>"
}
a
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>" }
]
}
Perfil del servicio:
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"
}
}
a
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 ]
}
}
Migrar el estado de Terraform
Una vez que hemos cambiado la plantilla en consecuencia, podemos eliminar los antiguos recursos equinix_ecx_ del estado de Terraform e importar los nuevos como recursos equinix_fabric_ por sus UUID.
En los comandos terraformar estado e importar, utilizamos el tipo de recurso y el nombre, separados por puntos:
terraform state rm equinix_ecx_l2_connection.example
terraform import equinix_fabric_connection.example <resource_uuid>
Después de esto, nuestras plantillas deberían estar en concordancia con el estado de Terraform y con los recursos ascendentes en Equinix Fabric. Podemos verificar la migración ejecutando terraform plan, debería mostrar que la infraestructura está actualizada.