Dopo aver visto come creare un’immagine custom nel caso precedente , dove abbiamo installato il client Oracle, ora proviamo a usare questa immagine custom per connetterci a un database Oracle.

Sfrutteremo al massimo le capacita’ del cloud. In questo esempio useremo la metodologia Infrastructure as Code (IaC) per fornire un’architettura reale, facilmente replicabile da chiunque.

Il progetto toautonomous si trova nello stesso repository GitHub usato finora per parlare di OCI Functions: fn-examples . Il README del progetto descrive la procedura di configurazione dell’infrastruttura.

Se non hai familiarita’ con Terraform, ti consiglio di consultare la documentazione ufficiale , il tutorial e il video .

Nel mio caso il file terraform.tfvars sara’ simile a questo, con valori modificati:

1
2
3
4
5
6
7
8
tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaao4a5a"
region = "eu-frankfurt—l"
compartment_id = "ocid1.compartment.oc1..aaaaaaaawdnpdyjvbala"
root_compartment_id = "ocid1.tenancy.oc1..aaaaaaaa2h4xgua7d4a5a"
registry = "fra.ocir.io/frddomvd8z4q/functions"
application_name = "toautonomous"
vault_ocid = "ocid1.vault.oc1.eu-frankfurt-1.dzsgmkchaafmg.abthe2a"
vault_key_ocid = "ocid1.key.oc1.eu-frankfurt-1.dzsgmkchaafmga2ra"

Il codice IaC e’ stato sviluppato per gestire l’intero deployment: infrastruttura, build del container custom per la funzione e rilascio. Dentro la cartella del progetto e’ quindi sufficiente eseguire il comando indicato nel README.

Verranno create diverse risorse, non facilmente rappresentabili da questo grafo di dipendenze generato con Terraform:

Risorse create

La situazione e’ piu’ semplice di quanto sembri. Le principali risorse OCI usate sono:

  • VCN
  • Autonomous DB
  • Function
  • Vault
  • Logging

Vale la pena notare che prima della build la funzione attende la creazione del database e include il wallet di autenticazione dentro l’immagine della funzione. Allo stesso modo, la password dell’utente amministrativo viene salvata e cifrata nel servizio Vault e recuperata a runtime dalla funzione quando necessario, senza salvare credenziali nel codice.

Queste implementazioni rendono il progetto di esempio molto sicuro.

Qui trovi il file della funzione per comprenderne meglio il funzionamento.