Blogs

OCI instance opstarten met een Marketplace-image met behulp van Terraform

24-02-2026
Wanneer je een compute-instance in OCI opstart met Terraform, is het relatief eenvoudig om de nieuwste OS-image op te halen en deze in je Terraform-script aan je compute-resource te koppelen. Maar als je een vooraf gedefinieerde partnerimage wilt gebruiken, wordt het ingewikkelder. Je moet de overeenkomsten accepteren en ervoor zorgen dat je de nieuwste versie hebt. In dit blog legt Mark Kempers, Infrastructuur Specialist bij MCX, uit hoe je de image-ID ophaalt, de overeenkomst accepteert en de instance opstart.

In dit voorbeeld gebruiken we de EBS Cloud Manager-image die door het Oracle EBS-team beschikbaar wordt gesteld in de OCI Marketplace.
Ervan uitgaande dat je alle basisconfiguraties voor Terraform hebt, kunnen we verder. Laten we beginnen.

Eerst halen we alles op wat we nodig hebben om de overeenkomst voor de specifieke image te accepteren en ons er vervolgens op te abonneren.

# Get the listing id out of the data source
data "oci_core_app_catalog_listings" "ebs_cloud_manager" {
    display_name = "Oracle E-Business Suite Cloud Manager"
}

# Get the versions available for the listing
data "oci_core_app_catalog_listing_resource_versions" "ebs_versions" {
  listing_id = data.oci_core_app_catalog_listing.ebs_cloud_manager.listing_id
}

# Safe the latest version to a local
locals {
  # Get the latest version - it's the FIRST one in the list (index 0)
  latest_version = data.oci_core_app_catalog_listing_resource_versions.ebs_versions.app_catalog_listing_resource_versions[0].listing_resource_version
}

data "oci_core_app_catalog_listing_resource_version" "ebs_version" {
  listing_id       = data.oci_core_app_catalog_listing.ebs_cloud_manager.listing_id
  resource_version = local.latest_version
}        

Nu we alle details over de image of applicatielijst die we gaan gebruiken uit de gegevensbronnen hebben opgehaald, kunnen we verdergaan met de overeenkomsten.
Om alle overeenkomsten te accepteren, gebruiken we resourceblokken. Dit komt omdat we onder water alleen API-aanvragen doen. Dus dat is wat we gaan doen: resourceblokken indienen in Terraform.

# Accept the license agreement
resource "oci_core_app_catalog_listing_resource_version_agreement" "ebs_agreement" {
  listing_id               = data.oci_core_app_catalog_listing_resource_version.ebs_version.listing_id
  listing_resource_version = data.oci_core_app_catalog_listing_resource_version.ebs_version.listing_resource_version
}

# When accept this, you receive attributes we will use in the next resource block. Now we will subscribe to the image.

resource "oci_core_app_catalog_subscription" "ebs_subscription" {
  compartment_id           = var.tenancy_ocid
  listing_id               = oci_core_app_catalog_listing_resource_version_agreement.ebs_agreement.listing_id
  listing_resource_version = oci_core_app_catalog_listing_resource_version_agreement.ebs_agreement.listing_resource_version
  oracle_terms_of_use_link = oci_core_app_catalog_listing_resource_version_agreement.ebs_agreement.oracle_terms_of_use_link
  signature                = oci_core_app_catalog_listing_resource_version_agreement.ebs_agreement.signature
  time_retrieved           = oci_core_app_catalog_listing_resource_version_agreement.ebs_agreement.time_retrieved
}        

Je hebt je nu geabonneerd op de marketplace-image. Na het indienen ontvang je attributen van Terraform. Je kunt een van die attributen gebruiken als image voor je compute. Je geeft deze door aan de `source_details` in de compute-resource.

# Snippet of the compute resource
resource "oci_core_instance" "compute" {
  display_name   = var.name
  availability_domain = var.availability_domain
  compartment_id = var.compartment
  shape          = var.shape
  shape_config {
    ocpus = var.ocpu
    memory_in_gbs = var.memory
  }
  source_details {
    source_type = "image"
    source_id   = oci_core_app_catalog_subscription.ebs_subscription.listing_resource_id
    boot_volume_size_in_gbs = var.bootvolsize
  }        

Zorg ervoor dat je dit doet voor elke marketplace-image die je wilt gebruiken, want elke image heeft een licentieovereenkomst en vereist een abonnement.
Dit is alles wat je nodig hebt om een ​​marketplace-image in Terraform te gebruiken. Tot de volgende keer!

Mark Kempers, Infrastructuur Specialist bij MCX