Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, obtendrá información sobre cómo usar HashiCorp Terraform a fin de aprovisionar y administrar recursos para Oracle Database@Azure mediante la herramienta Terraform que le permite aprovisionar y administrar la infraestructura en Oracle Cloud Infrastructure (OCI).
Para más información sobre las implementaciones de referencia para los módulos Terraform u OpenTofu, vea los vínculos siguientes:
- Inicio rápido de Oracle Database@Azure con módulos de Terraform u OpenTofu
- Zonas de aterrizaje de OCI
- Módulos comprobados de Azure
Nota:
En este documento se describen ejemplos de aprovisionamiento y administración de recursos de Oracle Database@Azure mediante el proveedor AzAPI
de Terraform. Para obtener información detallada sobre los recursos del proveedor AzAPI y la documentación de orígenes de datos, vea https://registry.terraform.io/providers/Azure/azapi/latest/docs
En los ejemplos se usan valores de ejemplo con fines ilustrativos. Debe reemplazarlos por valores propios.
En los ejemplos se usan propiedades dinámicas de AzAPI en lugar de JSONEncode
para obtener un comportamiento de Terraform más nativo.
Servicios de Oracle Exadata
En esta sección, encontrará ejemplos de cómo usar el proveedor AzAPI
para administrar los servicios de Oracle Exadata en Azure.
Infraestructura de Exadata
En esta sección, encontrará ejemplos de cómo usar el proveedor AzAPI
para administrar las infraestructura Oracle Exadata en Azure.
Creación de una infraestructura de Oracle Exadata
type = "Microsoft.Resources/resourceGroups@2023-07-01"
name = "ExampleRG"
location = "eastus"
}
// OperationId: CloudExadataInfrastructures_CreateOrUpdate, CloudExadataInfrastructures_Get, CloudExadataInfrastructures_Delete
// PUT /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}
resource "azapi_resource" "cloudExadataInfrastructure" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
parent_id = azapi_resource.resource_group.id
name = "ExampleName"
body = {
"location" : "eastus",
"zones" : [
"2"
],
"tags" : {
"createdby" : "ExampleName"
},
"properties" : {
"computeCount" : 2,
"displayName" : "ExampleName",
"maintenanceWindow" : {
"leadTimeInWeeks" : 0,
"preference" : "NoPreference",
"patchingMode" : "Rolling"
},
"shape" : "Exadata.X9M",
"storageCount" : 3
}
}
schema_validation_enabled = false
}
Enumeración de infraestructuras de Oracle Exadata por suscripción
type = "Microsoft.Resources/subscriptions@2020-06-01"
response_export_values = ["*"]
}
// OperationId: CloudExadataInfrastructures_ListBySubscription
// GET /subscriptions/{subscriptionId}/providers/Oracle.Database/cloudExadataInfrastructures
data "azapi_resource_list" "listCloudExadataInfrastructuresBySubscription" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
parent_id = data.azapi_resource.subscription.id
}
Enumeración de infraestructuras de Oracle Exadata por grupo de recursos
name = "existing"
}
// OperationId: CloudExadataInfrastructures_ListByResourceGroup
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures
data "azapi_resource_list" "listCloudExadataInfrastructuresByResourceGroup" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
parent_id = azurerm_resource_group.example.id
}
Revisión de una infraestructura de Oracle Exadata
Nota:
Solo las etiquetas de Microsoft Azure del recurso se pueden actualizar a través del proveedor AzAPI.
type = "Microsoft.Resources/subscriptions@2020-06-01"
response_export_values = ["*"]
}
// OperationId: CloudExadataInfrastructures_Update
// PATCH /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}
resource "azapi_resource_action" "patch_cloudExadataInfrastructure" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
resource_id = azapi_resource.cloudExadataInfrastructure.id
action = ""
method = "PATCH"
body = {
"tags" : {
"updatedby" : "ExampleName"
}
}
}
Enumeración de servidores de bases de datos en una infraestructura de Oracle Exadata
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}/dbServers/{dbserverocid}
data "azapi_resource" "dbServer" {
type = "Oracle.Database/cloudExadataInfrastructures/dbServers@2023-09-01"
parent_id = azapi_resource.cloudExadataInfrastructure.id
name = var.resource_name
}
Clúster de VM de Exadata
Creación de un clúster de VM de Oracle Exadata
type = "Microsoft.Resources/resourceGroups@2023-07-01"
name = "ExampleRG" location = "eastus"
}
// OperationId: CloudExadataInfrastructures_CreateOrUpdate, CloudExadataInfrastructures_Get, CloudExadataInfrastructures_Delete
// PUT /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}
resource "azapi_resource" "cloudExadataInfrastructure" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
parent_id = azapi_resource.resource_group.id
name = "ExampleName"
body = {
"location" : "eastus",
"zones" : [
"2"
],
"tags" : {
"createdby" : "ExampleName"
},
"properties" : {
"computeCount" : 2,
"displayName" : "ExampleName",
"maintenanceWindow" : {
"leadTimeInWeeks" : 0,
"preference" : "NoPreference",
"patchingMode" : "Rolling"
},
"shape" : "Exadata.X9M",
"storageCount" : 3
}
}
schema_validation_enabled = false
}
//-------------VMCluster resources ------------
// OperationId: CloudVmClusters_CreateOrUpdate, CloudVmClusters_Get, CloudVmClusters_Delete
// PUT GET DELETE /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudVmClusters/{cloudvmclustername}
resource "azapi_resource" "cloudVmCluster" {
type = "Oracle.Database/cloudVmClusters@2023-09-01"
parent_id = azapi_resource.resourceGroup.id
name = local.exa_cluster_name
schema_validation_enabled = false
depends_on = [azapi_resource.cloudExadataInfrastructure]
body = {
"properties": {
"dataStorageSizeInTbs": 1000,
"dbNodeStorageSizeInGbs": 1000,
"memorySizeInGbs": 1000,
"timeZone": "UTC",
"hostname": "hostname1",
"domain": "domain1",
"cpuCoreCount": 2,
"ocpuCount": 3,
"clusterName": "cluster1",
"dataStoragePercentage": 100,
"isLocalBackupEnabled": false,
"cloudExadataInfrastructureId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg000/providers/Oracle.Database/cloudExadataInfrastructures/infra1",
"isSparseDiskgroupEnabled": false,
"sshPublicKeys": [
"ssh-key 1"
],
"nsgCidrs": [
{
"source": "10.0.0.0/16",
"destinationPortRange": {
"min": 1520,
"max": 1522
}
},
{
"source": "10.10.0.0/24"
}
],
"licenseModel": "LicenseIncluded",
"scanListenerPortTcp": 1050,
"scanListenerPortTcpSsl": 1025,
"vnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg000/providers/Microsoft.Network/virtualNetworks/vnet1",
"giVersion": "19.0.0.0",
"subnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg000/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1",
"backupSubnetCidr": "172.17.5.0/24",
"dataCollectionOptions": {
"isDiagnosticsEventsEnabled": false,
"isHealthMonitoringEnabled": false,
"isIncidentLogsEnabled": false
},
"displayName": "cluster 1",
"dbServers": [
"ocid1..aaaa"
]
},
"location": "eastus"
}
response_export_values = ["properties.ocid"]
}
Enumeración de clústeres de máquinas virtuales de Oracle Exadata por suscripción
type = "Microsoft.Resources/subscriptions@2020-06-01"
response_export_values = ["*"]
}
// OperationId: CloudExadataInfrastructures_ListBySubscription
// GET /subscriptions/{subscriptionId}/providers/Oracle.Database/cloudExadataInfrastructures
data "azapi_resource_list" "listCloudExadataInfrastructuresBySubscription" {
type = "Oracle.Database/cloudVmClusters@2023-09-01"
parent_id = data.azapi_resource.subscription.id
}
Enumeración de clústeres de máquinas virtuales de Oracle Exadata por grupo de recursos
name = "existing"
}
// OperationId: CloudExadataInfrastructures_ListByResourceGroup
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures
data "azapi_resource_list" "listCloudExadataInfrastructuresByResourceGroup" {
type = "Oracle.Database/cloudVmClusters@2023-09-01"
parent_id = azurerm_resource_group.example.id
}
Enumeración de nodos de base de datos en un clúster de VM de Oracle Exadata
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudVmClusters/{cloudvmclustername}/dbNodes/{dbnodeocid}
data "azapi_resource" "dbNode" {
type = "Oracle.Database/cloudVmClusters/dbNodes@2023-09-01"
parent_id = azapi_resource.cloudVmCluster.id. // VM Cluster Id
name = var.resource_name
}
Adición de una dirección de red virtual a un clúster de VM de Exadata
// PUT GET DELETE /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudVmClusters/{cloudvmclustername}/virtualNetworkAddresses/{virtualnetworkaddressname}
resource "azapi_resource" "virtualNetworkAddress" {
type = "Oracle.Database/cloudVmClusters/virtualNetworkAddresses@2023-09-01"
parent_id = azapi_resource.cloudVmCluster.id
name = var.resource_name
body = {
"properties": {
"ipAddress": "192.168.0.1",
"vmOcid": "ocid1..aaaa"
}
}
schema_validation_enabled = false
}
Enumeración de direcciones de red virtual en un clúster de VM de Oracle Exadata
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudVmClusters/{cloudvmclustername}/virtualNetworkAddresses
data "azapi_resource_list" "listVirtualNetworkAddressesByCloudVmCluster" {
type = "Oracle.Database/cloudVmClusters/virtualNetworkAddresses@2023-09-01"
parent_id = azapi_resource.cloudVmCluster.id
}
Forma de base de datos de Exadata
En esta sección, encontrará ejemplos de cómo usar el proveedor AzAPI
para administrar las formas de base de datos de Oracle Exadata en Azure.
Enumeración de una forma de base de datos de Oracle Exadata
type = "Oracle.Database/locations@2023-12-12"
parent_id = data.azapi_resource.subscription.id
name = "eastus"
}
// OperationId: DbSystemShapes_Get
// GET /subscriptions/{subscriptionId}/providers/Oracle.Database/locations/{location}/dbSystemShapes/{dbsystemshapename}
data "azapi_resource" "dbSystemShape" {
type = "Oracle.Database/locations/dbSystemShapes@2023-09-01"
parent_id = data.azapi_resource_id.location.id
name = var.resource_name
}
Enumeración de bases de datos de Oracle Exadata por ubicación
// GET /subscriptions/{subscriptionId}/providers/Oracle.Database/locations/{location}/dbSystemShapes
data "azapi_resource_list" "listDbSystemShapesByLocation" {
type = "Oracle.Database/locations/dbSystemShapes@2023-09-01"
parent_id = data.azapi_resource_id.location.id
}
Servicios de Exadata combinados
En esta sección, encontrará ejemplos de cómo usar el proveedor AzAPI
para administrar los servicios de Oracle Exadata en Azure.
Creación de una base de datos de Oracle de inicio en un clúster de máquinas virtuales de Exadata en una infraestructura de Exadata con una subred delegada en Microsoft Azure
Nota:
El script siguiente crea una infraestructura de Oracle Exadata y un clúster de máquinas virtuales de Oracle Exadata mediante el proveedor AzAPI
de Terraform, seguido de la creación de una implementación de base de datos de Exadata mediante el proveedor OCI de Terraform.
required_providers {
azapi = {
source = "Azure/azapi"
}
oci = {
source = "oracle/oci"
}
}
}
provider "azapi" {
skip_provider_registration = false
}
provider "oci" {
user_ocid = <user_ocid>
fingerprint = <user_fingerprint>
tenancy_ocid = <oci_tenancy_ocid>
region = "us-ashburn-1"
private_key_path = <Path to API Key>
}
locals {
resource_group_name = "TestResourceGroup"
user = "Username"
location = "eastus"
}
resource "azapi_resource" "resource_group" {
type = "Microsoft.Resources/resourceGroups@2023-07-01"
name = local.resource_group_name
location = local.location
}
resource "azapi_resource" "virtual_network" {
type = "Microsoft.Network/virtualNetworks@2023-04-01"
name = "${local.resource_group_name}_vnet"
location = local.location
parent_id = azapi_resource.resource_group.id
body = {
properties = {
addressSpace = {
addressPrefixes = [
"10.0.0.0/16"
]
}
subnets = [
{
name = "delegated"
properties = {
addressPrefix = "10.0.1.0/24"
delegations = [
{
name = "Oracle.Database.networkAttachments"
properties = {
serviceName = "Oracle.Database/networkAttachments"
}
}
]
}
}
]
}
}
}
data "azapi_resource_list" "listVirtualNetwork" {
type = "Microsoft.Network/virtualNetworks/subnets@2023-09-01"
parent_id = azapi_resource.virtual_network.id
depends_on = [azapi_resource.virtual_network]
response_export_values = ["*"]
}
resource "tls_private_key" "generated_ssh_key" {
algorithm = "RSA"
rsa_bits = 4096
}
resource "azapi_resource" "ssh_public_key" {
type = "Microsoft.Compute/sshPublicKeys@2023-09-01"
name = "${local.resource_group_name}_key"
location = local.location
parent_id = azapi_resource.resource_group.id
body = {
properties = {
publicKey = "${tls_private_key.generated_ssh_key.public_key_openssh}"
}
}
}
// OperationId: CloudExadataInfrastructures_CreateOrUpdate, CloudExadataInfrastructures_Get, CloudExadataInfrastructures_Delete
// PUT /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}
resource "azapi_resource" "cloudExadataInfrastructure" {
type = "Oracle.Database/cloudExadataInfrastructures@2023-09-01"
parent_id = azapi_resource.resource_group.id
name = "OFake_terraform_deploy_infra_${local.resource_group_name}"
timeouts {
create = "1h30m"
delete = "20m"
}
body = {
"location" : "${local.location}",
"zones" : [
"2"
],
"tags" : {
"createdby" : "${local.user}"
},
"properties" : {
"computeCount" : 2,
"displayName" : "OFake_terraform_deploy_infra_${local.resource_group_name}",
"maintenanceWindow" : {
"leadTimeInWeeks" : 0,
"preference" : "NoPreference",
"patchingMode" : "Rolling"
},
"shape" : "Exadata.X9M",
"storageCount" : 3
}
}
schema_validation_enabled = false
}
// OperationId: DbServers_ListByCloudExadataInfrastructure
// GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudExadataInfrastructures/{cloudexadatainfrastructurename}/dbServers
data "azapi_resource_list" "listDbServersByCloudExadataInfrastructure" {
type = "Oracle.Database/cloudExadataInfrastructures/dbServers@2023-09-01"
parent_id = azapi_resource.cloudExadataInfrastructure.id
depends_on = [azapi_resource.cloudExadataInfrastructure]
response_export_values = ["*"]
}
// OperationId: CloudVmClusters_CreateOrUpdate, CloudVmClusters_Get, CloudVmClusters_Delete
// PUT /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Oracle.Database/cloudVmClusters/{cloudvmclustername}
resource "azapi_resource" "cloudVmCluster" {
type = "Oracle.Database/cloudVmClusters@2023-09-01"
parent_id = azapi_resource.resource_group.id
name = "OFake_terraform_deploy_cluster_${local.resource_group_name}"
schema_validation_enabled = false
depends_on = [azapi_resource.cloudExadataInfrastructure]
timeouts {
create = "1h30m"
delete = "20m"
}
body = {
"location" : "${local.location}",
"tags" : {
"createdby" : "${local.user}"
},
"properties" : {
"subnetId" : "${data.azapi_resource_list.listVirtualNetwork.output.value[0].id}"
"cloudExadataInfrastructureId" : "${azapi_resource.cloudExadataInfrastructure.id}"
"cpuCoreCount" : 4
"dataCollectionOptions" : {
"isDiagnosticsEventsEnabled" : true,
"isHealthMonitoringEnabled" : true,
"isIncidentLogsEnabled" : true
},
"dataStoragePercentage" : 80,
"dataStorageSizeInTbs" : 2,
"dbNodeStorageSizeInGbs" : 120,
"dbServers" : [
"${data.azapi_resource_list.listDbServersByCloudExadataInfrastructure.output.value[0].properties.ocid}",
"${data.azapi_resource_list.listDbServersByCloudExadataInfrastructure.output.value[1].properties.ocid}"
]
"displayName" : "OFake_terraform_deploy_cluster_${local.resource_group_name}",
"giVersion" : "19.0.0.0",
"hostname" : "${local.user}",
"isLocalBackupEnabled" : false,
"isSparseDiskgroupEnabled" : false,
"licenseModel" : "LicenseIncluded",
"memorySizeInGbs" : 60,
"sshPublicKeys" : ["${tls_private_key.generated_ssh_key.public_key_openssh}"],
"timeZone" : "UTC",
"vnetId" : "${azapi_resource.virtual_network.id}",
"provisioningState" : "Succeeded"
}
}
response_export_values = ["properties.ocid"]
}
resource "oci_database_db_home" "exa_db_home" {
source = "VM_CLUSTER_NEW"
vm_cluster_id = azapi_resource.cloudVmCluster.output.properties.ocid
db_version = "19.20.0.0"
display_name = "TFDBHOME"
database {
db_name = "TFCDB"
pdb_name = "TFPDB"
admin_password = "TestPass#2024#"
db_workload = "OLTP"
}
depends_on = [azapi_resource.cloudVmCluster]
}