Solución de problemas del proveedor de Terraform
Solucione problemas comunes del proveedor de Terraform de OCI.
Comience con Conceptos básicos de solución de problemas y, a continuación, consulte las siguientes instrucciones:
Solución de problemas básicos
Al solucionar problemas u obtener soporte para el proveedor de Terraform de OCI, suele resultar útil comprobar primero el estado de los servicios de OCI y la versión de Terraform y del proveedor, así como activar y recopilar el log detallado.
La comprobación del estado del servicio y la salida del log detallado pueden ayudarle a determinar si un problema está relacionado con el proveedor de Terraform o el servicio de OCI que utiliza el proveedor.
Consulte la lista de incidencias comunes después de comenzar por las básicas.
Comprobación del estado y las interrupciones del servicio OCI
Para comprobar el estado más reciente y si hay interrupciones en OCI, consulte Estado de OCI.
Comprobación de las versiones de Terraform y del proveedor de Terraform de OCI
Para verificar la versión de Terraform y del proveedor de Terraform de OCI, inicialice Terraform desde un directorio con las configuraciones y, a continuación, ejecute el comando -version. Por ejemplo:
terraform initterraform -versionSe muestran las versiones:
Terraform v0.12.20
+ provider registry.terraform.io/hashicorp/oci v3.95.0
Las versiones más recientes del proveedor de Terraform de OCI incluyen la versión del proveedor en los mensajes de error.
La documentación del proveedor de Terraform de OCI refleja cuál es la última versión. También puede descargar e instalar una versión específica del proveedor.
Log detallado del proveedor de Terraform de OCI
Para obtener una salida de la consola detallada cuando el proveedor se esté ejecutando, preceda al comando de Terraform con los indicadores TF_LOG y OCI_GO_SDK_DEBUG. Por ejemplo:
TF_LOG=DEBUG OCI_GO_SDK_DEBUG=v terraform planLos indicadores TF_LOG y OCI_GO_SDK_DEBUG también se pueden definir como variables de entorno.
Reintentos Automáticos
Al aplicar, refrescar o destruir un plan, Terraform puede encontrarse con algunos fallos de OCI intermitentes (como errores 409, 429 o 500) que podrían solucionándose con el reintento. Por defecto, el proveedor de OCI Terraform reintenta automáticamente dichas operaciones durante un máximo de 2 minutos o 10 minutos, pero con un máximo de 9 reintentos.
- Recomendamos usar la opción
retries_config_filepara un mejor control de reintentos, incluida la configuración del código de error individual y el parámetrofirst_retry_sleep_durationpara un primer reintento retrasado. retries_config_filetiene prioridad sobredisable_auto_retriesoretry_duration_seconds.- Limite el uso de
retry_duration_secondsa los errores que se ejecuten correctamente después de reintentar solamente, como 409, 429 y 500. No useretry_duration_secondspara errores que es poco probable que tengan éxito después de reintentarlos, como 400, 401, 403, 404, 412 y 413.
Reintentar opciones de configuración:
- Uso de retries_config_file (recomendado)
- Uso de retry_duration_seconds
Uso de retries_config_file
Utilice esta opción de configuración de reintento para configurar individualmente los errores que se pueden volver a intentar, como 409, 429 y 500.
Para configurar aún más la conducta de reintento, se puede especificar el siguiente campo en el bloque provider:
retries_config_file: ruta de archivo JSON con una configuración de reintento individual para cada código de error recuperable con el siguiente formato:
{
"<error-code>": {
"retry_max_duration": <duration in seconds>
"first_retry_sleep_duration": <duration in seconds>
},
"<error-code>": {
"retry_max_duration": <duration in seconds>
}
}
Descripciones del parámetro:
retry_max_duration: duración máxima de los reintentos, en segundos. El número máximo de reintentos es 9.Por ejemplo, el valor
120solo permite reintentos hasta que hayan pasado 120 segundos desde el primer intento (suponiendo que no se haya superado el número máximo de reintentos).Si espera que el código de error supere el número máximo de reintentos (9) en la duración especificada, configure también
first_retry_sleep_duration.Para deshabilitar los reintentos de un código de error, establezca el valor en
0(cero).first_retry_sleep_duration: tiempo de espera para el primer reintento, en segundos.El primer intento es el segundo intento. (Se espera que el primer intento en este caso devuelva el código de error especificado).
Por ejemplo, el valor
60espera 60 segundos después del primer intento de reintento.
Ejemplo de configuración:
{
"409": {
"retry_max_duration": 120
"first_retry_sleep_duration": 60
},
"500": {
"retry_max_duration": 240
}
}
En este ejemplo, se espera que el error 409 supere el número máximo de reintentos (9), por lo que su configuración incluye tanto retry_max_duration (duración máxima de 120 segundos) como first_retry_sleep_duration (60 segundos antes del siguiente reintento). Esta configuración retrasa el primer reintento, lo que ayuda a evitar que se supere el máximo dentro de la duración especificada.
Uso de retry_duration_seconds
Utilice esta opción de configuración de reintento solo para errores 429 y 500.
Para configurar aún más el comportamiento de reintento, se pueden especificar los siguientes campos en el bloque provider:
-
disable_auto_retries: para desactivar los reintentos automáticos para los errores recuperables. -
retry_duration_seconds: duración mínima (en segundos) para volver a intentar una operación de recurso en respuesta a errores HTTP 429 y HTTP 500. La duración real del reintento puede ser ligeramente mayor debido a la fluctuación de las operaciones de reintento. Este valor se ignora si el campodisable_auto_retriesestá definido entrue.
Control de concurrencia mediante jitter e inactividad de los intentos
Para aliviar la contención entre las operaciones paralelas en los servicios de OCI, el proveedor de Terraform de OCI planifica los reintentos valiéndose de la inactividad cuadrática y el jitter absoluto. La inactividad cuadrática aumenta el intervalo máximo entre los reintentos posteriores, mientras que el jitter absoluto selecciona al azar un intervalo de reintento dentro del rango de inactividad.
Por ejemplo, el tiempo de espera entre el primer y el segundo reintento se selecciona al azar entre 1 y 8 segundos. A continuación, el tiempo de espera entre el segundo y el tercer reintento se selecciona al azar entre 1 y 18 segundos. Independientemente del número de reintentos, el tiempo del intervalo de reintento se limita después del 12º intento a los 288 segundos.
Problemas Comunes
Consulte Incidencias conocidas de etiquetado para obtener información sobre un problema conocido con las etiquetas relacionadas con Terraform.
Los Recursos Se Destruyen Al Aplicar Cambios
Los recursos de OCI existentes se pueden destruir y volver a crear cuando las configuraciones de Terraform intenten actualizar una propiedad de un recurso que no se pueda actualizar. Terraform le advierte en los casos en los que los cambios destruirán un recurso. Ejecute siempre terraform plan antes de aplicar cambios para ver qué recursos se verán afectados. Consulte Cambios destructivos para obtener más información.
No se puede actualizar el recurso dependiente
A veces, una actualización de un recurso de OCI debe forzar que se destruya y se vuelva a crear el recurso, pero la dependencia de otro recurso en el recurso no permite la operación.
Por ejemplo, puede que desee realizar una actualización de un recurso oci_core_instance_configuration, pero un pool de instancias utiliza esa configuración de instancia. No se puede suprimir la configuración de instancia porque el pool de instancias hace referencia a ella en un argumento necesario.
Para solucionar este tipo de comportamiento, puede utilizar los metaargumentos lifecycle y create_before_destroy en el bloque de recursos.
En este ejemplo, Terraform crea un segundo recurso oci_core_instance_configuration que incluye las actualizaciones y, a continuación, asigna la nueva configuración de instancia al pool relacionado. Por último, Terraform destruye la configuración de instancia original. Por ejemplo:
resource "oci_core_instance_configuration" "test_instance_configuration" {
...
lifecycle {
create_before_destroy = true
}
}
Consulte The lifecycle Meta-Argument y Cambios destructivos para obtener más información.
El recurso no se puede destruir ni actualizar
Puede evitar que se destruya un recurso de OCI incluyendo los metadatos lifecycle y prevent_destroy = true en el bloque de recursos del archivo de configuración de Terraform. La siguiente configuración, por ejemplo, da como resultado un cubo de Object Storage que no se puede destruir:
resource "oci_objectstorage_bucket" "test_bucket" {
#Required
compartment_id = var.tenancy
name = "test"
namespace = "exampleNamespace"
lifecycle {
prevent_destroy = true
}
}
Este metaargumento evita el uso de terraform destroy. Dado que determinadas actualizaciones de configuración requieren que se destruyan recursos para que puedan aplicarse, esta configuración puede hacer que algunas actualizaciones también sean imposibles de aplicar. En este ejemplo, name es una propiedad que no se puede actualizar sin destruir ni volver a crear el recurso. Por lo tanto, no puede actualizar el nombre del cubo sin eliminar o cambiar el metaargumento lifecycle.
Consulte el metaargumento lifecycle para obtener más información.
No se puede anular la definición del argumento de recurso
Muchos recursos de Oracle Cloud Infrastructure gestionados por el proveedor de Terraform de OCI aceptan argumentos de configuración opcionales. Una vez definidos, ya sea durante la creación del recurso o una actualización posterior, no se pueden anular la definición de estos argumentos mediante la transferencia de una cadena vacía o la eliminación del argumento de la configuración. Terraform ignora los intentos de anular la definición de estos argumentos.
La referencia completa de los recursos y orígenes de datos soportados por el proveedor de Terraform de OCI contiene detalles sobre el uso, los argumentos y los atributos. La referencia completa está disponible en docs.oracle.com y en Terraform Registry.
Los recursos y los orígenes de datos se agrupan por servicio en la referencia.
Referencia a disparadores en metaargumentos del ciclo de vida
Es posible que Terraform v0.14 y versiones posteriores requieran que sustituya las variables globales de los archivos de configuración por una combinación de variables locales y disparadores. Para hacer referencia a un disparador en los metaargumentos lifecycle y ignore_changes y evitar ejecutar la configuración en operaciones de aplicación de Terraform posteriores, haga referencia al disparador de la siguiente manera:
resource "null_resource" "exampleB" {
depends_on = [null_resource.exampleA]
triggers = {
os_user = var.os_user
}
lifecycle {
ignore_changes = [
triggers["os_user"]
]
}
No se puede suprimir el compartimento
Por defecto, el proveedor de Terraform no suprime un compartimento al utilizar el comando destroy.
Debe definir el argumento enable_delete en true para que el proveedor intente suprimir el compartimento. Por ejemplo:
resource "oci_identity_compartment" "test_compartment" {
compartment_id = var.compartment_id
description = var.compartment_description
name = var.compartment_name
enable_delete = true
}
Para destruir un compartimento, el compartimento también debe estar vacío. Utilice el argumento
depends_on para asegurarse de que se definen todas las dependencias ocultas. Consulte Recursos para obtener más información.Error "Operation Timeout"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: Operation Timeout
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: timeout while waiting for state to become 'SUCCEEDED, FAILED, CANCELED' (last state: 'IN_PROGRESS', timeout: 15m)
El servicio de OCI especificado está indicando que el recurso aún no ha alcanzado el estado esperado después de realizar un sondeo durante algún tiempo.
Es posible que tenga que aumentar el timeout de la operación para que el recurso pueda continuar con el sondeo durante más tiempo. Consulte la sección sobre los Timeouts de operaciones para obtener más información sobre cómo hacerlo.
Error "Unexpected LifeCycle state"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: Unexpected LifeCycle state
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: During deletion, Terraform expected the resource to reach state: TERMINATED, but the service reported unexpected state: RUNNING.
Resource OCID: exampleuniqueID
Suggestion: Please retry or contact support for help with service: <service>
El servicio de OCI especificado ha detectado un error desconocido. Vuelva a intentarlo o póngase en contacto con los Servicios de Soporte en relación con ese servicio.
Incidencias de la CLI de Terraform
Esta sección contiene información sobre la instalación y la configuración de la CLI de Terraform.
Error "No such file" después de actualizar el proveedor de Terraform de OCI
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error asking for user input: 1 error(s) occurred:
* provider.oci: dial unix /var/folders/6r/8fk5dmbj4_z3sl0mc_y_fhjw0000gn/T/plugin811254328|netrpc: connect: no such file or directory
Es probable que esté utilizando una versión del proveedor de Terraform de OCI que no sea compatible con el binario de Terraform que ha instalado. Para las versiones del proveedor de OCI v3.x.x y posteriores, se necesita como mínimo la versión v.0.10.1 de Terraform.
Mensaje "TCP...i/o timeout" al conectarse mediante proxy
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
* provider.oci: ... dial tcp 134.70.16.0:443: i/o timeout
Es posible que no haya configurado correctamente los ajustes del proxy. El proveedor de Terraform de OCI soporta las variables http_proxy, https_proxy y no_proxy en las que las listas de inclusión o exclusión se pueden definir de la siguiente manera:
export http_proxy=http://www.your-proxy.com:80/
export https_proxy=http://www.your-proxy.com:80/
export no_proxy=localhost,127.0.0.1
Mensaje de error "x509: certificate signed by unknown authority"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: Get https://iaas.<region>.oraclecloud.com/20160918/services: x509: certificate signed by unknown authority
on ../modules/network/modules/main/main.tf line 3...
Asegúrese de que Terraform está utilizando certificados TLS de confianza y de que la cadena de certificados es válida. Consulte el artículo sobre el fallo de las ejecuciones de Terraform con el error "x509: certificate signed by unknown authority" para obtener más información. Si utiliza MacOS Catalina, consulte la sección MacOS del documento para obtener más detalles sobre la resolución de problemas relacionados con certificados.
Mensaje de error "Outdated GPG key...unable to verify new provider releases"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Warning: registry.terraform.io:
This version of Terraform has an outdated GPG key and is unable to verify new provider releases.
Please upgrade Terraform to at least <version> to receive new provider updates.
For details see: https://discuss.hashicorp.com/t/hcsec-2021-12-codecov-security-event-and-hashicorp-gpg-key-exposure/23512
Este mensaje significa que el registro de Terraform omite las versiones del proveedor de Terraform firmadas por una nueva clave de GPG. La CLI de Terraform instalará la última versión más reciente del proveedor de Terraform de OCI que pueda verificar correctamente, que podría no ser la versión más reciente.
Para eliminar este mensaje y asegúrese de que puede utilizar la versión más reciente del proveedor Terraform de OCI, actualice la CLI deTerraform a la última versión de mantenimiento disponible para la versión principal de Terraform que esté utilizando. Por ejemplo, si utiliza Terraform v0.12.21, actualice a la versión más reciente disponible de v0.12.
Incidencias del proveedor de Terraform
Esta sección contiene información relacionada con la instalación y la configuración del proveedor de Terraform de OCI.
Error "NotAuthenticated" al utilizar módulos
Si utiliza módulos y la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: 401-NotAuthenticated, The required information to complete authentication was not provided or was incorrect.
Verifique que cada módulo declare sus propios requisitos de proveedor. Para obtener más información, consulte Providers Within Modules.
Error "NotAuthenticated" al utilizar Terraform
Síntoma: la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: 401-NotAuthenticated
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: The required information to complete authentication was not provided or was incorrect.
OPC request ID: exampleuniqueID
Suggestion: Please retry or contact support for help with service: <service>
Causas posibles: configuración incorrecta.
Resolución: verifique lo siguiente.
- Atributos configurados correctamente:
-
user_ocid -
tenancy_ocid -
fingerprint -
private_key_path: verifique que apunta a una clave privada y no a la clave pública correspondiente.
-
- La clave pública correspondiente a
private_key_pathse ha agregado a la cuenta de usuario especificada comouser_ocid. - Los pares de claves pública y privada utilizan el formato correcto. Para obtener más información y conocer los pasos para generar claves, consulte Claves y OCID necesarios.
- La cuenta de usuario forma parte de un grupo con los permisos adecuados para poder realizar las acciones del plan que está ejecutando.
- El arrendamiento está suscrito a la región a la que se dirige el plan.
- Si utiliza módulos, verifique que cada módulo declare sus propios requisitos de proveedor. Para obtener más información, consulte Providers Within Modules.
Mensaje "Can not create client, bad configuration: did not find a proper configuration for tenancy" al utilizar alias
Si la CLI de Terraform devuelve un mensaje similar a este, podría indicar una incidencia con su entorno:
Error: can not create client, bad configuration: did not find a proper configuration for tenancy
Si la configuración del proveedor incluye un alias, los recursos deben especificar explícitamente el alias del proveedor mediante provider = "oci.alias_name". Si un recurso no utiliza el alias para especificar el proveedor, Terraform crea un proveedor por defecto para utilizarlo con dichos recursos. El proveedor por defecto carga los valores de configuración de las variables de entorno o del archivo ~/.oci/config. Estos valores pueden ser diferentes de los utilizados por el proveedor con alias y provocar el error de configuración.
Elimine el alias de la configuración de proveedor o asegúrese de que cada recurso especifique el proveedor por el alias adecuado. Obtenga más información sobre el uso de alias en la documentación oficial de Terraform y consulte Configuración del proveedor para obtener más información sobre cómo utiliza Terraform las variables de entorno y el archivo de configuración de OCI.
Mensaje de error "Field cannot be set"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
* Error: "field_name": this field cannot be set
Probablemente esté utilizando una versión anterior del proveedor de Terraform de OCI y el campo que está intentando definir se publicara en una versión posterior. Utilice el siguiente comando para comprobar la versión del proveedor de Terraform.
terraform -version
La documentación del proveedor de Terraform de OCI refleja cuál es la última versión.
Mensaje de error "Could not get info about the first DbHome in the dbSystem" al importar db_home
Si a oci_database_db_system que se está importando le falta un db_home principal, se define un marcador de posición vacío para db_home en el archivo de estado de Terraform. Para mantener las configuraciones coherentes con el estado importado, agregue un marcador de posición vacío para db_home a la configuración. Por ejemplo:
# Add this placeholder into your oci_database_db_system configuration to indicate that the primary db home is empty.
db_home {
database {
admin_password = ""
}
}
La referencia completa de los recursos y orígenes de datos soportados por el proveedor de Terraform de OCI contiene detalles sobre el uso, los argumentos y los atributos. La referencia completa está disponible en docs.oracle.com y en Terraform Registry.
Los recursos y los orígenes de datos se agrupan por servicio en la referencia.
Mensaje de error "Failed to query available provider packages" al ejecutar la detección de recursos
Si la CLI de Terraform devuelve un mensaje de error como el siguiente cuando se utiliza la detección de recursos:
Failed to query available provider packages
Could not retrieve the list of available versions for provider hashicorp/oci:
the previously-selected version is no longer available
Puede asegurarse de que Terraform utilice un binario de proveedor local existente especificando su ubicación mediante la variable de entorno provider_bin_path. Por ejemplo:
export provider_bin_path=/Users/user/go/bin/
Terraform intenta descargar la versión más reciente del proveedor de Terraform de OCI cuando se utiliza la detección de recursos.
Etiquetas por defecto suprimidas al aplicar
A veces, el proveedor de Terraform de OCI puede suprimir inesperadamente los por defecto de etiqueta existentes de un recurso al ejecutar terraform apply. Esta incidencia afecta en particular a los valores por defecto de las etiquetas automáticas Oracle-Tags.
Para solucionar esta incidencia, puede agregar el atributo ignore_defined_tags al bloque del proveedor.
El atributo ignore_defined_tags permite mostrar las claves de las etiquetas definidas que Terraform ignorará como parte del plan o de la aplicación. El atributo ignore_defined_tags solo se puede especificar en el nivel de proveedor y tiene un tamaño máximo permitido de 100. Las etiquetas proporcionadas en este atributo se ignoran para todos los recursos de ese archivo de Terraform.
En el siguiente ejemplo, "Oracle-Tags.CreatedOn" y "Oracle-Tags.CreatedBy" son las claves de la asignación defined_tags asociada a un recurso remoto:
provider "oci" {
ignore_defined_tags = ["Oracle-Tags.CreatedBy", "Oracle-Tags.CreatedOn"]
}
Para obtener más información, consulte Definiciones de proveedores y consulte la incidencia relacionada en GitHub.
Errores de API de servicio
Dado que el proveedor de Terraform interactúa con los servicios de OCI en su nombre, muchos mensajes de error que puede mostrar el proveedor de Terraform provienen directamente de los servicios de OCI. La referencia Errores de API muestra los errores comunes devueltos por todos los servicios.
Los mensajes de error de servicio devueltos por el proveedor de Terraform de OCI incluyen la siguiente información:
- Error: el código de estado de HTTP y el código de error (consulte Errores de API)
- Versión del proveedor: versión del proveedor de Terraform de OCI utilizada para realizar la solicitud.
- Servicio: servicio de OCI que responde con el error
- Mensaje de error: detalles relacionados con el error devuelto por el servicio
- ID de solicitud de OCP: ID de solicitud
- Sugerencia: siguientes pasos sugeridos
Por ejemplo:
Error: <http_code>-<api_error_code>
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: <error_message>
OPC request ID: exampleuniqueID
Suggestion: <next_steps>
En esta sección se detallan algunos de los errores de servicio devueltos con más frecuencia.
Error "400-InvalidParameter"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: 400-InvalidParameter
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: <error_message>
OPC request ID: exampleuniqueID
Suggestion: Please update the parameter(s) in the Terraform config as per error message: <error_message>
Actualice el parámetro especificado en el mensaje de error en la configuración de Terraform para el recurso.
La referencia completa de los recursos y orígenes de datos soportados por el proveedor de Terraform de OCI contiene detalles sobre el uso, los argumentos y los atributos. La referencia completa está disponible en docs.oracle.com y en Terraform Registry.
Los recursos y los orígenes de datos se agrupan por servicio en la referencia.
Error "400-LimitExceeded"
Al utilizar Terraform, puede que se encuentre con errores que indiquen que ha alcanzado o superado los límites de servicio de un recurso. Por ejemplo:
Error: 400-LimitExceeded
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: Fulfilling this request exceeds the Oracle-defined limit for this tenancy for this resource type.
OPC request ID: exampleuniqueID
Suggestion: Request a service limit increase for this resource <service>
Para obtener más información sobre los límites de un servicio OCI y cómo solicitar un aumento del límite, consulte Límites por servicio
Error "404-NotAuthorized"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: 404-NotAuthorizedOrNotFound
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: Authorization failed or requested resource not found.
OPC request ID: exampleuniqueID
Suggestion: Either the resource has been deleted or service <service> need policy to access this resource. Policy reference: <link>
Verifique que la cuenta de usuario forma parte de un grupo con los permisos adecuados para poder realizar las acciones del plan que está ejecutando. Consulte la referencia de política del servicio para obtener más información.
Error "500-InternalError"
Si la CLI de Terraform devuelve un mensaje de error como el siguiente:
Error: 500-InternalError
Provider version: <provider_version>, released on <release_date>. This provider is <n> updates behind to current.
Service: <service>
Error Message: Internal error occurred
OPC request ID: exampleuniqueID
Suggestion: The service for this resource encountered an error. Please contact support for help with service <service>
El servicio ha respondido a la solicitud del proveedor de Terraform con un error interno. Si se pone en contacto con los Servicios de Soporte en relación con esta incidencia, haga referencia a la información del mensaje.