Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraform para administradores de bases de dato...

Terraform para administradores de bases de datos: implemente una base de datos autónoma en minutos con OCI Resource Manager

Los servicios en la nube ofrecen recursos económicos e ilimitados, ideales para equipos de bases de datos que practican y validan recuperación, actualizaciones, parches, conmutación por error a sistemas en espera y cambios de rendimiento. Pero empezar a trabajar en la nube puede resultar intimidante y llevar mucho tiempo. Ingrese a Terraform, una herramienta de automatización para agilizar y simplificar la implementación y administración de infraestructura en entornos de nube.

Esta sesión enseña con el ejemplo cómo utilizar Terraform para realizar una implementación en vivo de una base de datos autónoma de Oracle. Durante la demostración, los asistentes descubrirán qué diferencia a Terraform de otras herramientas de infraestructura como código y aprenderán las técnicas y mejores prácticas que les ayudarán a impulsar su viaje a Terraform. ¡No se requiere experiencia previa con Terraform u Oracle Cloud!

Sean Scott

August 07, 2024
Tweet

More Decks by Sean Scott

Other Decks in Technology

Transcript

  1. LAOUC Community Tour 2024 2 a 23 de Agosto 2024

    Terraform para DBAs Implemente una base de datos autónoma en minutos con OCI Resource Manager
  2. Database Reliability Engineering MAA ⁘ RAC ⁘ RMAN Data Guard

    ⁘ Sharding ⁘ Partitioning Information Lifecycle Management Exadata & Engineered Systems Database Modernization Upgrades ⁘ Patching ⁘ Migrations Cloud ⁘ Hybrid Automation DevOps ⁘ IaC ⁘ Containers ⁘ Terraform Vagrant ⁘ Ansible Observability AHF ⁘ TFA ⁘ CHA ⁘ CHM
  3. www.viscosityna.com @ViscosityNA Oracle on Docker Running Oracle Databases in Linux

    Containers Free sample chapter: https://oraclesean.com
  4. km mi Mexico 3,584 2,227 Guatemala 1,056 656 Costa Rica

    854 531 Panama 1,813 1,127 Chile 4,985 3,098 Brazil 2,617 1,626 Uruguay 1,567 974 Argentina 221 137 Paraguay 1,037 644 Home 9,753 6,061 ------ ------ 27,487 17,081 ¡Me gustan los aviones! ¡Me gustas tú! ¡Me gusta viajar! ¡Me gustas tú! ~ Manu Chao
  5. @ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com Latin "terra" (tierra) Ingles "form" (forma)

    ter•ra•form verbo Transformar un entorno para sustentar la vida. www.viscosityna.com @ViscosityNA
  6. Una herramienta de infraestructura como código (IaC) de Hashicorp. Terraform

    define, aprovisiona y gestiona la infraestructura local y en la nube. @ViscosityNA www.viscosityna.com Ter•ra•form noun
  7. @ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com Terraform es un lenguaje declarativo Los

    lenguajes imperativos proporcionan instrucción Los lenguajes declarativos definen una intención
  8. @ViscosityNA www.viscosityna.com Construye un acuario de 10 litros con lenguaje

    imperativo • Obtener el tanque A, la bomba B, el calentador C... • Configurarlos... • Añade un exactamente cantidad de litros de agua... • Añade un exactamente cantidad de gramos de sal... • Ajusta la temperatura a un determinado °C... • Añadir pescado específico...
  9. @ViscosityNA www.viscosityna.com Construye un acuario de 10 litros con lenguaje

    imperativo • Los lenguajes imperativos escalan mal: • Cambiar el tamaño del tanque redefine los activos • Los recursos pueden tener dependencias
  10. @ViscosityNA www.viscosityna.com Construye un acuario de 10 litros con lenguaje

    imperativo • El cambio requiere experiencia en el dominio • ¿La capacidad del calentador debería cambiar lineal o exponencialmente con el volumen de agua? • ¿Un tanque alto y delgado tendrá requisitos diferentes a uno corto y ancho? • ¿El área de superficie afecta los programas de monitoreo y mantenimiento? • ¿Qué valores intermedios deberían redondearse hacia arriba o hacia abajo? • ¿Están fijados los índices de salinidad para todos los volúmenes de agua?
  11. @ViscosityNA www.viscosityna.com Construye un acuario de 10 litros con lenguaje

    declarativo "Quiero un acuario de 10 litros" @ViscosityNA www.viscosityna.com
  12. @ViscosityNA www.viscosityna.com Los proveedores son expertos en implementación • Ellos

    entienden las dependencias • Ellos interpretan configuraciones • Construyen la infraestructura declarada Terraform proveedor
  13. @ViscosityNA www.viscosityna.com Le decimos al proveedor lo que queremos. El

    proveedor implementa recursos para nosotros. Diferentes proveedores para OCI, Azure, AWS, GCP, etc. Terraform proveedor
  14. @ViscosityNA www.viscosityna.com • Objetos de infraestructura disponibles para Terraform •

    Propiedades definidas en la API de Terraform • Creado y administrado asignando valores a propiedades • Configurado a través de archivos de texto simple Recurso Terraform (resource)
  15. @ViscosityNA www.viscosityna.com Los recursos pueden ser: • Físico: computación, almacenamiento,

    red. • Dependiente: consultas contra el medio ambiente • Dinámico: funciones, expresiones, bucles. • Configuración: listas de seguridad, reglas, operaciones • Código: scripts, cargas útiless Recurso Terraform (resource)
  16. @ViscosityNA www.viscosityna.com Proyectos Terraform (projects) @ViscosityNA • Archivos con definiciones

    de infraestructura. • Almacenado en un directorio común • A menudo se gestiona en un repositorio (GitHub, etc.)
  17. @ViscosityNA www.viscosityna.com Iniciar un nuevo proyecto Terraform Cree un directorio

    de proyecto y agregue archivos: • providers.tf • variables.tf • terraform.tfvars • adb.tf • outputs.tf @ViscosityNA Archivos de proyecto: https://github.com/oraclesean/terraform-for-oracle-dbas
  18. @ViscosityNA www.viscosityna.com @ViscosityNA Estilos de proyecto Terraform Todo en un

    solo archivo • main.tf • Puede ser difícil de leer y mantener Archivos separados para cada recurso • Código modular más portátil • compute.tf • storage.tf • variables.tf
  19. @ViscosityNA www.viscosityna.com providers.tf provider "oci" { tenancy_ocid = var.tenancy_ocid region

    = var.region user_ocid = var.user_ocid fingerprint = var.fingerprint private_key_path = var.private_key_path } Variables de recursos Asignaciones de valor Las asignaciones de valor podrían ir aquí
  20. @ViscosityNA www.viscosityna.com variables.tf # Terraform tenancy variables variable "tenancy_ocid" {}

    variable "region" {} variable "user_ocid" {} variable "fingerprint" {} variable "private_key_path" {} Declaraciones de variables Las asignaciones de valor podrían ir aquí
  21. @ViscosityNA www.viscosityna.com terraform.tfvars # Terraform tenancy variable values tenancy_ocid =

    Your tenancy_ocid region = Your region identifier user_ocid = Your user_ocid fingerprint = Your fingerprint private_key_path = Your private_key_path Mismas variables definidas en variables.tf Asignaciones de variables codificadas ¡Limitar las asignaciones codificadas a terraform.tfvars significa que no se necesitan cambios en ningún otro lugar para ejecutar la misma configuración en diferentes arrendamientos, escalas, etc.!
  22. @ViscosityNA www.viscosityna.com Pruebe la configuración • Desde el directorio del

    proyecto, ejecute: terraform init terraform plan terraform apply @ViscosityNA www.viscosityna.com
  23. @ViscosityNA www.viscosityna.com terraform init > terraform init Initializing the backend...

    Initializing provider plugins... - Finding latest version of hashicorp/oci... - Installing hashicorp/oci v4.76.0... - Installed hashicorp/oci v4.76.0 (signed by HashiCorp) Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.
  24. @ViscosityNA www.viscosityna.com terraform plan > terraform plan No changes. Your

    infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
  25. @ViscosityNA www.viscosityna.com terraform apply > terraform apply No changes. Your

    infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed. Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
  26. @ViscosityNA www.viscosityna.com Agregar un recurso de base de datos autónoma

    • Agregue el recurso ADB en adb.tf • Agregue el recurso ADB en wallet.tf • Agregue variables ADB a variables.tf • Agregue valores ADB a terraform.tfvars • Agregar variables de salida a output.tf @ViscosityNA
  27. @ViscosityNA www.viscosityna.com adb.tf # Autonomous database resource resource "oci_database_autonomous_database" "autonomous_db"

    { compartment_id = var.tenancy_ocid db_name = var.db_name display_name = var.display_name db_version = var.db_version db_workload = var.db_workload cpu_core_count = var.cpu_core_count data_storage_size_in_tbs = var.data_storage_size_in_tbs is_free_tier = var.is_free_tier license_model = var.license_model admin_password = var.admin_password } Tipo de recurso Nombre asignado al recurso Propiedades para ADB Valores utilizados para crear el ADB
  28. @ViscosityNA www.viscosityna.com Agregar variables de DB a variables.tf # Autonomous

    DB variables variable "db_name" { type = string } variable "display_name" { type = string } variable "admin_password" { type = string } Variable declarations
  29. @ViscosityNA www.viscosityna.com Agregar variables de DB a variables.tf variable "db_version"

    { type = string default = "19c" # Option is 19c } variable "db_workload" { type = string default = "OLTP" # Options are: OLTP, DW, AJD, APEX } Bloque de declaración de variables Establecer tipo de variable Asignar un valor predeterminado
  30. @ViscosityNA www.viscosityna.com Agregar variables de DB a variables.tf variable "cpu_core_count"

    { type = number default = 1 } variable "data_storage_size_in_tbs" { type = number default = 1 } variable "character_set" { type = string default = "AL32UTF8" }
  31. @ViscosityNA www.viscosityna.com variable "is_free_tier" { type = string default =

    "true" # Must be false for AJD, APEX } variable "license_model" { type = string default = "LICENSE_INCLUDED" } Agregar variables de DB a variables.tf
  32. @ViscosityNA www.viscosityna.com Agregar asignaciones de variables a terraform.tfvars # Autonomous

    database variable values db_name = "ADB19C" display_name = "ADB19C" admin_password = "XXXXXXXXXXXXXXXXXXXXXX" # Default overrides #db_version = #db_workload = #cpu_core_count = #data_storage_size_in_tbs = #is_free_tier = #license_model = # character_set = Es probable que los valores de ADB cambien para cada base de datos Para anular los valores predeterminados, elimine el comentario de la línea y establezca un valor
  33. @ViscosityNA www.viscosityna.com wallet.tf # Wallet resources resource "random_string" "adb_wallet_password" {

    length = 16 special = true override_special = "-.!" } resource "oci_database_autonomous_database_wallet" "adb_wallet" { autonomous_database_id = oci_database_autonomous_database.autonomous_db.id password = random_string.adb_wallet_password.result base64_encode_content = "true" } resource "local_file" "adb_wallet_file" { content_base64 = oci_database_autonomous_database_wallet.adb_wallet.content filename = "${path.module}/adb_wallet.zip" } Create a local file resource for saving the wallet Assign the wallet to a resource Generate a random wallet password
  34. @ViscosityNA www.viscosityna.com outputs.tf output "db_name" { value = oci_database_autonomous_database.autonomous_db.display_name }

    output "db_state" { value = oci_database_autonomous_database.autonomous_db.state } resource "oci_database_autonomous_database" "autonomous_db" { compartment_id = var.tenancy_ocid db_name = var.db_name display_name = var.display_name ... }
  35. @ViscosityNA www.viscosityna.com outputs.tf output "connection_urls" { value = oci_database_autonomous_database.autonomous_db.connection_urls }

    output "adb_wallet_password" { value = [random_string.adb_wallet_password.result] sensitive = true }
  36. @ViscosityNA www.viscosityna.com ¡Crea la base de datos! • Ejecutar: terraform

    plan terraform apply @ViscosityNA www.viscosityna.com
  37. @ViscosityNA www.viscosityna.com terraform plan > terraform plan Terraform used the

    selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # oci_database_autonomous_database.autonomous_db will be created + resource "oci_database_autonomous_database" "autonomous_db" { + actual_used_data_storage_size_in_tbs = (known after apply) + admin_password = (sensitive value) ...
  38. @ViscosityNA www.viscosityna.com terraform plan (continuado) ... Plan: 4 to add,

    0 to change, 0 to destroy. Changes to Outputs: + adb_wallet_password = (sensitive value) + connection_urls = (known after apply) + db_name = "ADB19C" + db_state = (known after apply) ──────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
  39. @ViscosityNA www.viscosityna.com terraform apply > terraform apply ... Plan: 4

    to add, 0 to change, 0 to destroy. Changes to Outputs: + adb_wallet_password = (sensitive value) + connection_urls = (known after apply) + db_name = "ADB19C" + db_state = (known after apply) Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes
  40. @ViscosityNA www.viscosityna.com ... oci_database_autonomous_database.autonomous_db: Still creating... [4m10s elapsed] oci_database_autonomous_database.autonomous_db: Creation

    complete after 4m12s oci_database_autonomous_database_wallet.adb_wallet: Creating... oci_database_autonomous_database_wallet.adb_wallet: Creation complete after 2s local_file.adb_wallet_file: Creating... local_file.adb_wallet_file: Creation complete after 0s Apply complete! Resources: 4 added, 0 changed, 0 destroyed. terraform apply (continuado)
  41. @ViscosityNA www.viscosityna.com ... Outputs: adb_wallet_password = <sensitive> connection_urls = tolist([

    { "apex_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/apex" "database_transforms_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/odi/" "graph_studio_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/graphstudio/" "machine_learning_notebook_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/oml/" "machine_learning_user_management_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/omlusers/" "mongo_db_url" = "" "ords_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/" "sql_dev_web_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/sql-developer" }, ]) db_name = "ADB19C" db_state = "AVAILABLE" terraform apply (continuado)
  42. @ViscosityNA www.viscosityna.com ... Outputs: adb_wallet_password = <sensitive> connection_urls = tolist([

    { "apex_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/apex" "database_transforms_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/odi/" "graph_studio_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/graphstudio/" "machine_learning_notebook_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/oml/" "machine_learning_user_management_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/omlusers/" "mongo_db_url" = "" "ords_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/" "sql_dev_web_url" = "https://ADB19C.adb.us-sanjose-1.oraclecloudapps.com/ords/sql-developer" }, ]) db_name = "ADB19C" db_state = "AVAILABLE" terraform apply (continuado)
  43. @ViscosityNA www.viscosityna.com # ls -l total 296 -rw-r--r-- 1 sean.scott

    staff 593 Aug 23 07:59 README.md -rw-r--r-- 1 sean.scott staff 585 Aug 23 07:59 adb.tf -rwxr-xr-x 1 sean.scott staff 21983 Aug 23 08:42 adb_wallet.zip -rw-r--r-- 1 sean.scott staff 412 Aug 23 07:59 outputs.tf ... terraform apply (continuado) ADB Wallet for SQL Developer
  44. @ViscosityNA www.viscosityna.com ¿Cómo ayuda Terraform a los DBAs? @ViscosityNA •

    Agiliza y simplifica la creación de bases de datos • Codifica y estandariza procesos • Entornos consistentes, desde el desarrollo hasta la producción. • Reduce la carga de trabajo del DBA • Reduce la dependencia/espera de recursos del DBA • Acelera el desarrollo, la innovación