Configuraciones de Terraform para usuarios de OCI Cache

Revisar los requisitos y las recomendaciones para las configuraciones de Terraform utilizadas con los usuarios de OCI Cache.

Requisitos y recomendaciones

Terraform gestiona la asociación y desasociación de recursos de usuarios de OCI Cache a un cluster de Redis mediante dos recursos distintos:
  • oci_redis_redis_cluster_attach_oci_cache_user
  • oci_redis_redis_cluster_detach_oci_cache_user
Normalmente, un recurso de Terraform maneja tanto la asociación como la desasociación de recursos de usuarios de OCI Cache a un cluster de Redis. Por ejemplo, al eliminar un usuario de la lista oci_cache_users, se desasocia automáticamente. Sin embargo, la desasociación se modela explícitamente, dadas las limitaciones de la implantación del proveedor de Terraform. Estas limitaciones significan:
  • Para asociar usuarios de OCI Cache, debe utilizar el recurso oci_redis_redis_cluster_attach_oci_cache_user.
  • Para desasociar usuarios de OCI Cache, debe eliminarlos del recurso attach y agregarlos al recurso oci_redis_redis_cluster_detach_oci_cache_user.

Para gestionar usuarios de OCI Cache y clusters de Redis mediante la configuración de Terraform, recomendamos lo siguiente:
  • No especifique el mismo OCID de usuario en los recursos attach y detach al mismo tiempo.
  • Al desasociar un usuario de la lista del recurso attach, elimine el usuario del recurso detach y, a continuación, agréguelo al recurso detach. Del mismo modo, al asociar un usuario mostrado en el recurso detach, elimine el usuario del recurso detach y, a continuación, agréguelo al recurso attach.
  • Destruya los bloques de recursos attach y detach si las listas oci_cache_users están vacías en estos recursos.

Ejemplo de configuración de Terraform para usuarios de OCI Cache

En los siguientes ejemplos se muestra una configuración de Terraform para varios escenarios de usuarios de OCI Cache.

Ejemplo 1: Asociación de dos usuarios de OCI Cache a un cluster de Redis

Para asociar dos OciCacheUsers existentes a un cluster de Redis, defina un recurso oci_redis_redis_cluster_attach_oci_cache_user e incluya ambos OCID de usuario en la lista oci_cache_users.

variable "region" {}

provider "oci" {
auth = "SecurityToken"
config_file_profile = "DEFAULT"
region = "${var.region}"
}
resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
//cluster-id
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
"OCID1.ocicacheuser.oc1.phx..<unique_ID>". // user-2
]
}

Esta configuración de Terraform asocia user-1 y user-2 al cluster de Redis especificado.

Ejemplo 2: Desasociación de un usuario de OCI Cache de un cluster de Redis

Para desasociar un usuario, elimine user-2 de la lista oci_cache_users del recurso attach y, a continuación, agréguelo a un recurso oci_redis_redis_cluster_detach_oci_cache_user nuevo o existente.

variable "region" {}

provider "oci" {
auth = "SecurityToken"
config_file_profile = "DEFAULT"
region = "${var.region}"
}
resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
//cluster-id
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
]
}
resource "oci_redis_redis_cluster_detach_oci_cache_user" "detach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", // user-2
]
}

Esta configuración de Terraform asocia user-1 al cluster de Redis especificado y desasocia user-2 moviéndolo del recurso attach y agregándolo al recurso detach.

Ejemplo 3: Desasociación de todos los usuarios de OCI Cache de un cluster de Redis

Para desasociar todos los recursos OciCacheUser asociados de un cluster de Redis, mueva todos los OCID de usuario del recurso attach al recurso detach. A continuación, el recurso attach tiene una lista vacía de OciCacheUsers y se debe eliminar.

variable "region" {}

provider "oci" {
auth = "SecurityToken"
config_file_profile = "DEFAULT"
region = "${var.region}"
}
// Attach resource is removed since there are no users left to attach.
resource "oci_redis_redis_cluster_detach_oci_cache_user" "detach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID"
//cluster-id
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", // user-2
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
]
}

Esta configuración de Terraform separa todos los OciCacheUsers del cluster de Redis colocándolos en el recurso detach y elimina el recurso attach.

Ejemplo 4: asociación, desasociación y nueva asociación de un usuario a un cluster de Redis

Para asociar un usuario, desasociar el mismo usuario y, a continuación, volver a asociarlo a un cluster de Redis requiere los siguientes pasos:
  1. Asociar user-1: para asociar user-1, defina el recurso oci_redis_redis_cluster_attach_oci_cache_user con el OCID user-1 en la lista.
    ### attach user-1
    variable "region" {}
    
    provider "oci" {
    auth = "SecurityToken"
    config_file_profile = "DEFAULT"
    region = "${var.region}"
    }
    resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_existing_users" {
    redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
    //cluster-id
    oci_cache_users = [
    "OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
    ]
    }

    Esta configuración de Terraform asocia user-1 al cluster de Redis.

  2. Desasociar user-1: para desasociar user-1, mueva su OCID del recurso attach a un nuevo recurso detach. A continuación, elimine el recurso attach porque la lista oci_cache_users ahora está vacía.
    ### detach user-1
    variable "region" {}
    
    provider "oci" {
    auth = "SecurityToken"
    config_file_profile = "DEFAULT"
    region = "${var.region}"
    }
    # attach resource is nolonger needed.
    resource "oci_redis_redis_cluster_detach_oci_cache_user" "detach_existing_users" {
    redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
    //cluster-id
    oci_cache_users = [
    "ocid1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
    ]
    }

    Esta configuración de Terraform desasocia user-1 del cluster de Redis.

  3. Volver a asociar user-1: para volver a asociar user-1, elimine el OCID del recurso detach y vuelva a crear el recurso attach con un OCID. A continuación, elimine el recurso detach porque la lista oci_cache_users ahora está vacía.
    ### attach user-1 again
    variable "region" {}
    
    provider "oci" {
    auth = "SecurityToken"
    config_file_profile = "DEFAULT"
    region = "${var.region}"
    }
    resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_existing_users" {
    redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
    //cluster-id
    oci_cache_users = [
    "OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
    ]
    }

    Esta configuración de Terraform vuelve a conectar user-1 al cluster de Redis.

Ejemplo 5: uso del mismo usuario de OCI Cache en los recursos de asociación y desasociación

Para incluir el mismo OCID oci_cache_user (por ejemplo, user-1) en los recursos attach y detach en el mismo ciclo de aplicación, utilice la siguiente configuración de Terraform:
### attach user-1
variable "region" {}

provider "oci" {
auth = "SecurityToken"
config_file_profile = "DEFAULT"
region = "${var.region}"
}
resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
//cluster-id
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
]
}
resource "oci_redis_redis_cluster_detach_oci_cache_user" "detach_existing_users" {
redis_cluster_id = "OCID1.rediscluster.oc1.phx..<unique_ID>"
oci_cache_users = [
"OCID1.ocicacheuser.oc1.phx..<unique_ID>", //user-1
]
}
Nota

No se recomienda incluir el mismo OCID oci_cache_user en los recursos attach y detach del mismo ciclo porque, aunque Terraform permite esta configuración, se produce una operación no (neutral) en la que las operaciones de conexión y desasociación se cancelan entre sí en el único ciclo de aplicación.

Ejemplo 6: creación de un cluster de Redis, usuario de OCI Cache y asociación del usuario al cluster

Para crear un cluster de Redis, OciCacheUser, y asociar el usuario al cluster, utilice la siguiente configuración de Terraform:

variable "region" {}
variable "compartment_ocid" {}
variable "redis_cluster_display_name" {
default = "test-tf-redis-cluster"
}
variable "redis_cluster_node_count" {
default = 2
}
variable "redis_cluster_node_memory_in_gbs" {
default = 2.0
}
variable "redis_cluster_software_version" {
default = "VALKEY_7_2"
}
variable "redis_cluster_freeform_tags" {
default = { "bar-key" = "value" }
}
variable "oci_cache_user_acl_string" {
default = "~* &* +discard +xsetid +zscore +hdel +bitpos +pttl +rpoplpush +mget +decr +unlink +pubsub
+zrangebylex +auth +rpush +zlexcount +zrangestore +geopos +lset +zremrangebyrank +scard +hexists +hmget +blmpop
+lastsave +fcall_ro +smismember +pexpiretime +llen +function +smembers +zrevrangebyscore +hstrlen +blpop +scan
+lpos +pexpireat +sunsubscribe +zcard +hset +geodist +lrange +flushdb +spop +object +xack +restore +renamenx
+mset +zinterstore +bzmpop +zinter +setnx +pexpire +smove +bitfield +xdel +zrange +lindex +srem +bitcount
+incrbyfloat +incrby +quit +lpushx +spublish +expiretime +zadd +srandmember +getset +monitor +rpop +zrank
+pfcount +geosearch +randomkey +setex +zrangebyscore +bitfield_ro +strlen +xlen +zintercard +xadd +zunionstore
+xread +expireat +zdiffstore +sunionstore +zscan +set +move +rename +time +msetnx +readonly +setbit +sunion
+hlen +brpop +replconf +unwatch +psetex +punsubscribe +watch +publish +zremrangebyscore +get +psubscribe
+sismember +persist +decrby +eval_ro +script +copy +lpop +zunion +zpopmax +hincrby +geoadd +fcall +multi +pfadd
+georadius_ro +hincrbyfloat +sort +dbsize +lolwut +zremrangebylex +hsetnx +xreadgroup +lmpop +swapdb +bitop
+exists +zrevrangebylex +pfdebug +hgetall +xinfo +sdiffstore +zmpop +lrem +keys +lpush +incr +xrevrange
+slowlog +sadd +getdel +getbit +sintercard +cluster +ltrim +hkeys +sscan +xtrim +xrange +evalsha_ro +hello
+sinterstore +substr +zmscore +blmove +zrandmember +subscribe +xclaim +pfselftest +exec +zrem +evalsha
+geosearchstore +hmset +ping +hscan +georadius +hvals +rpushx +unsubscribe +dump +georadiusbymember +touch
+zpopmin +command +zdiff +lcs +geohash +type +del +linsert +role +xgroup +bzpopmax +hrandfield +eval +readwrite
+append +info +client +zrevrange +xpending +wait +bzpopmin +sinter +select +restore-asking +latency +pfmerge
+getex +asking +xautoclaim +sdiff +zrevrank +zincrby +ttl +zcount +setrange +sort_ro +getrange
+georadiusbymember_ro +echo +flushall +ssubscribe +expire +hget +brpoplpush +lmove"
}
variable "oci_cache_user_description" {
default = "Default Cache user"
}
variable "oci_cache_user_status" {
default = "ON"
}

provider "oci" {
auth = "SecurityToken"
config_file_profile = "DEFAULT"
region = "${var.region}"
}

resource "oci_core_vcn" "test_vcn" {
cidr_block = "10.0.0.0/16"
compartment_id = "${var.compartment_ocid}"
}
resource "oci_core_security_list" "test_security_list" {
compartment_id = "${var.compartment_ocid}"
vcn_id = oci_core_vcn.test_vcn.id
display_name = "redis-security-list"
egress_security_rules {
destination = "0.0.0.0/0"
protocol = "17" // UDP
stateless = true
}
ingress_security_rules {
protocol = "6" // TCP
source = "0.0.0.0/0"
stateless = false
}
}
resource "oci_core_subnet" "test_subnet" {
cidr_block = "10.0.0.0/24"
compartment_id = "${var.compartment_ocid}"
vcn_id = oci_core_vcn.test_vcn.id
security_list_ids = [oci_core_security_list.test_security_list.id]
}
resource "oci_redis_redis_cluster" "test_redis_cluster" {
compartment_id = "${var.compartment_ocid}"
display_name = var.redis_cluster_display_name
node_count = var.redis_cluster_node_count
node_memory_in_gbs = var.redis_cluster_node_memory_in_gbs
software_version = var.redis_cluster_software_version
subnet_id = oci_core_subnet.test_subnet.id
freeform_tags = var.redis_cluster_freeform_tags
}
resource "oci_redis_oci_cache_user" "default_oci_cache_user" {
compartment_id = "${var.compartment_ocid}"
name = "default"
description = var.oci_cache_user_description
acl_string = var.oci_cache_user_acl_string
authentication_mode {
authentication_type = "PASSWORD"
hashed_passwords = ["741f67765bef6f01f37bf5cb1724509a83409324efa6ad258***************"]
}
status = var.oci_cache_user_status
depends_on = [oci_redis_redis_cluster.test_redis_cluster]
}
resource "oci_redis_redis_cluster_attach_oci_cache_user" "attach_default_user" {
redis_cluster_id = oci_redis_redis_cluster.test_redis_cluster.id
oci_cache_users = [oci_redis_oci_cache_user.default_oci_cache_user.id]
depends_on = [oci_redis_oci_cache_user.default_oci_cache_user]
}
output "default_cache_user_id" {
value = oci_redis_oci_cache_user.default_oci_cache_user.id
}