본문 바로가기
클라우드

[Oracle Cloud] Terraform 으로 Rocky Linux VM 생성하기

[data.tf]

data "oci_core_app_catalog_listings" "image_catalog" {
  filter {
    name   = "display_name"
    values = ["^Rocky Linux 9 aarch64.*"]
    regex  = true
  }
}

data "oci_core_app_catalog_listing_resource_versions" "image_catalog_resource" {
  listing_id = lookup(data.oci_core_app_catalog_listings.image_catalog.app_catalog_listings[0], "listing_id")
}

data "oci_core_app_catalog_subscriptions" "image_catalog_ocid" {
  #Required
  compartment_id = var.compartment_id

  #Optional
  listing_id = oci_core_app_catalog_subscription.image_catalog_subscription.listing_id

  filter {
    name   = "listing_resource_version"
    values = ["${oci_core_app_catalog_subscription.image_catalog_subscription.listing_resource_version}"]
  }
}

x86 이미지가 필요하면 values = ["^Rocky Linux 9 aarch64.*"] 부분을 values = ["^Rocky Linux 9 x86.*"] 으로 변경

이 글을 찾으신 분이 모를거 같지는 않지만 compartment_id는 tanancy_id가 들어갑니다.

 

[main.tf]

resource "oci_core_app_catalog_listing_resource_version_agreement" "image_catalog_agreement" {
  #Required
  listing_id               = lookup(data.oci_core_app_catalog_listing_resource_versions.image_catalog_resource.app_catalog_listing_resource_versions[0], "listing_id")
  listing_resource_version = lookup(data.oci_core_app_catalog_listing_resource_versions.image_catalog_resource.app_catalog_listing_resource_versions[0], "listing_resource_version")
}

resource "oci_core_app_catalog_subscription" "image_catalog_subscription" {
  compartment_id           = var.compartment_id
  eula_link                = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.eula_link
  listing_id               = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_id
  listing_resource_version = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_resource_version
  oracle_terms_of_use_link = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.oracle_terms_of_use_link
  signature                = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.signature
  time_retrieved           = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.time_retrieved

  timeouts {
    create = "15m"
  }
}

resource "oci_core_instance" "server" {
  ...
  source_details {
    source_id               = "${lookup(data.oci_core_app_catalog_subscriptions.image_catalog_ocid.app_catalog_subscriptions[0], "listing_resource_id")}"
    source_type             = "image"
    ...
  }
  ...
  depends_on = [oci_core_app_catalog_subscription.image_catalog_subscription]
}

구독이 완료 된 후에 이미지 리소스 아이디를 알 수 있기 때문에 해당 리소스에 의존성을 지정했습니다.

 

[output.tf]

output "image_catalog" {
  value = [
    for img in data.oci_core_app_catalog_listings.image_catalog.app_catalog_listings : {
      id   = img.listing_id
      name = img.display_name
    }
  ]
}

output "image_catalog_resource_ver" {
  value = {
    id  = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_id
    ver = oci_core_app_catalog_listing_resource_version_agreement.image_catalog_agreement.listing_resource_version
  }
}

필요할 경우 디버그 용으로 사용 가능

 

[참고사항]

Changes to Outputs:
  + images              = [
      + {
          + id   = "ocid1.appcataloglisting.oc1..aaaaaaaazht7vduko4ld3vd36b4kcud2d23pbupi3f5oq2ukl22aod643buq"
          + name = "Rocky Linux 9 aarch64 Supported by CIQ"
        },
      + {
          + id   = "ocid1.appcataloglisting.oc1..aaaaaaaa6e5d6lkdocl6bxnxamgfjh6d6ur6x3surr6ve2gp6fglxxchtzlq"
          + name = "Rocky Linux 9 from CIQ"
        },
      + {
          + id   = "ocid1.appcataloglisting.oc1..aaaaaaaalj22oi67z27g27kuopuua7az6b6cznamavtxqz6qxohbik3yz63a"
          + name = "Rocky Linux 9 from CIQ - Optimized for NVIDIA GPUs"
        },
      + {
          + id   = "ocid1.appcataloglisting.oc1..aaaaaaaalloook6cglb7j557jiadml7nlwu4poptazeinnzlsnjyvnlf3rwa"
          + name = "Rocky Linux 9 x86 Supported by CIQ"
        },
    ]

from CIQ는 Enterprise Edition, Supported by CIQ는 Community Edition 입니다.

OCI에서 Rocky Linux는 다른 OS(Ubuntu, Oracle Linux 등) 와는 다르게

마켓 플레이스에서 제공하는 이미지를 사용해야 하네요

 

마켓 플레이스 카탈로그 조회 > 제품에 대한 사용 동의 > 제품 구독 의 절차를 진행해야

Terraform에서 이미지 ID를 구할 수 있습니다.

 

Cloud Shell에서 그때 그때 버전이 바뀔때마다 조회하는건 비효율적인것 같아 정보를 찾아 보았습니다.

 

[Link]

[Reddit] How do you find an image OCID ?

 

Reddit의 oraclecloud 커뮤니티

oraclecloud 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요

www.reddit.com

[OCI] Terraform でOCI Marketplace imageの利用 (2019/12/10)