Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

www.viscosityna.com @ViscosityNA Oracle on Docker Running Oracle Databases in Linux Containers Free sample chapter: https://oraclesean.com

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

@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

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

@ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

www.viscosityna.com @ViscosityNA ¡Una montaña rusa es un tren con pulso!

Slide 15

Slide 15 text

www.viscosityna.com @ViscosityNA ¿Pero es esta la experiencia que quieres a las 2 de la mañana?

Slide 16

Slide 16 text

www.viscosityna.com @ViscosityNA A veces solo quieres un aburrido viaje en tren del punto A al punto B

Slide 17

Slide 17 text

www.viscosityna.com @ViscosityNA Terraform es como trenes de metro, no montañas rusas Sin sorpresas Sin emociones Sin entusiasmo

Slide 18

Slide 18 text

@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

Slide 19

Slide 19 text

@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...

Slide 20

Slide 20 text

@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

Slide 21

Slide 21 text

@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?

Slide 22

Slide 22 text

@ViscosityNA www.viscosityna.com Construye un acuario de 10 litros con lenguaje declarativo "Quiero un acuario de 10 litros" @ViscosityNA www.viscosityna.com

Slide 23

Slide 23 text

@ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com Expertos comprende los differencias como esto

Slide 24

Slide 24 text

@ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com ...y esto:

Slide 25

Slide 25 text

@ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com En Terraform, ese experto se llama proveedor (provider) @ViscosityNA www.viscosityna.com

Slide 26

Slide 26 text

@ViscosityNA www.viscosityna.com Los proveedores son expertos en implementación • Ellos entienden las dependencias • Ellos interpretan configuraciones • Construyen la infraestructura declarada Terraform proveedor

Slide 27

Slide 27 text

@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

Slide 28

Slide 28 text

@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)

Slide 29

Slide 29 text

@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)

Slide 30

Slide 30 text

@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.)

Slide 31

Slide 31 text

@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

Slide 32

Slide 32 text

@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

Slide 33

Slide 33 text

@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í

Slide 34

Slide 34 text

@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í

Slide 35

Slide 35 text

@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.!

Slide 36

Slide 36 text

@ViscosityNA www.viscosityna.com @ViscosityNA www.viscosityna.com variables.tf terraform.tfvars providers.tf etc. Declarar Asignar Heredar Comprender la jerarquía de variables

Slide 37

Slide 37 text

@ViscosityNA www.viscosityna.com Pruebe la configuración • Desde el directorio del proyecto, ejecute: terraform init terraform plan terraform apply @ViscosityNA www.viscosityna.com

Slide 38

Slide 38 text

@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.

Slide 39

Slide 39 text

@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.

Slide 40

Slide 40 text

@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.

Slide 41

Slide 41 text

@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

Slide 42

Slide 42 text

@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

Slide 43

Slide 43 text

@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

Slide 44

Slide 44 text

@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

Slide 45

Slide 45 text

@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" }

Slide 46

Slide 46 text

@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

Slide 47

Slide 47 text

@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

Slide 48

Slide 48 text

@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

Slide 49

Slide 49 text

@ViscosityNA www.viscosityna.com wallet.tf

Slide 50

Slide 50 text

@ViscosityNA www.viscosityna.com wallet.tf

Slide 51

Slide 51 text

@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 ... }

Slide 52

Slide 52 text

@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 }

Slide 53

Slide 53 text

@ViscosityNA www.viscosityna.com ¡Crea la base de datos! • Ejecutar: terraform plan terraform apply @ViscosityNA www.viscosityna.com

Slide 54

Slide 54 text

@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) ...

Slide 55

Slide 55 text

@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.

Slide 56

Slide 56 text

@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

Slide 57

Slide 57 text

@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)

Slide 58

Slide 58 text

@ViscosityNA www.viscosityna.com ... Outputs: adb_wallet_password = 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)

Slide 59

Slide 59 text

@ViscosityNA www.viscosityna.com # terraform output adb_wallet_password [ "VeRyRaNd0MPaSSwd", ] terraform output

Slide 60

Slide 60 text

@ViscosityNA www.viscosityna.com ... Outputs: adb_wallet_password = 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)

Slide 61

Slide 61 text

@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

Slide 62

Slide 62 text

@ViscosityNA www.viscosityna.com Agregar a SQL Developer @ViscosityNA

Slide 63

Slide 63 text

@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

Slide 64

Slide 64 text

www.viscosityna.com @ViscosityNA Preguntas y contactame [email protected] https://linktr.ee/oraclesean

Slide 65

Slide 65 text

No content