1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Cloudで開発者向けセルフサービス基盤を構築する

Last updated at Posted at 2025-09-19

はじめに

近年、プラットフォームエンジニアリングという考え方が注目を集めています。これは、開発者が自律的かつ効率的にアプリケーションをデリバリーできるよう、共通基盤やツール群を整備し、セルフサービス型の開発体験を提供する取り組みです。AzureではAzure Deployment Environmentsというサービスを利用することで実現できます。
本記事では、Oracle Cloud Infrastructure(OCI)で同様の開発者向けのセルフサービス基盤を構築する方法を紹介します。

類似サービス

Azure Deployment Environmentsはプラットフォームチームが標準化した環境をカタログ化し、開発者がセルフサービスで利用できる仕組みを提供しています。
開発者にざっくり以下の手順で、カタログ化した環境をデプロイすることができます。

  1. カタログ選択
  2. 変数値の入力フォーム
  3. デプロイ

Oracle Cloud Stack

Oracle Cloud Stackを使用することで、さきほどの開発者の手順を満たすことができます。
また、開発者の権限に基づいてデプロイ先を選択可能なので、セキュリティ面で良いです。

カタログ選択

リポジトリは公開できないですが、以下のようなディレクトリ構成でterraformを組んでいます。

|-terraform/VMInfra
|  |-Base # 仮想ネットワーク、NSG、ASG、Key Vault、Bastionなどの共有リソース
|  |-Ubuntu # Base に接続する Ubuntu 仮想マシン
|  |-Proxy # Base に接続する Ubuntu 仮想マシンによるリバースプロキシ

このリポジトリ構成をOracle Cloud Stackの「ソース・コード制御システム」という機能で同期させると、スタック作成の画面で以下のように選択が可能になります。

oracle_cloud_stack_create_select.png

ソース・コード制御システムによるリポジトリ同期にはPATが必須です。
公式ドキュメントにはPersonal access tokens (classic)の方法しか記載がないです。
Fine-grained personal access tokensでは、ContentsDeploymentsに対するRead-onlyで設定してください。また、リポジトリを制限できます。セキュリティ的にもFine-grained personal access tokensを推奨します。

変数値の入力フォーム

Oracle Cloud Stackでは、main.tfと同階層にschema.yamlを配置することで入力フォームを柔軟にカスタマイズ可能です。

以下は、Ubuntuを作成する入力フォームです。
oracle_cloud_stack_vminfra_ubuntu_config.png

以下のフォームがサポートされているので、ほぼ困らないと思います。

  • descriptionにURLを埋め込み
  • コンパートメント
  • VMイメージ
  • VCN
    • VCN指定後に、VCN内に配置されたサブネットを選択可能
  • SSHキーのアップロード
Ubuntuの入力フォームのschema.yaml
title: "Ubuntu Virtual Machine Stack"
description: "Ubuntu VM deployment using VMInfra Base Stack outputs for networking"
stackDescription: "Creates an Ubuntu virtual machine in Oracle Cloud Infrastructure using pre-existing network infrastructure from VMInfra Base Stack."
schemaVersion: 1.1.0
version: "1.0.0"
locale: "ja"

variableGroups:
  - title: "基本設定"
    description: "基本設定"
    variables:
      - parent_compartment_id
  
  - title: "VM設定"
    description: "仮想マシンのハードウェア仕様"
    variables:
      - vm_name
      - vm_image
      - vm_shape
      - vm_ocpus
      - vm_memory_in_gbs
      - vm_boot_volume_size_in_gbs
  
  - title: "ネットワーク設定"
    description: "ネットワーク設定"
    variables:
      - vcn_id
      - subnet_id
      - assign_public_ip
      - admin_public_key

variables:
  parent_compartment_id:
    type: oci:identity:compartment:id
    title: "親コンパートメント"
    description: "親コンパートメント"
    required: true

  vcn_id:
    type: oci:core:vcn:id
    title: "VCN"
    description: "対象VCNを選択"
    required: true
    dependsOn:
      compartmentId: ${parent_compartment_id}

  subnet_id:
    type: oci:core:subnet:id
    title: "サブネット"
    description: "VM を配置するサブネット"
    required: true
    dependsOn:
      compartmentId: ${parent_compartment_id}
      vcnId: ${vcn_id}
    
  vm_name:
    type: string
    title: "仮想マシン名"
    description: "作成する仮想マシンの表示名"
    default: "vm1"
    required: true
    minLength: 1
    maxLength: 50
    pattern: "^[a-zA-Z0-9\\-_]+$"
  
  vm_image:    
    title: Image    
    description: "イメージ名 (<a href='https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/images.htm'>イメージについて</a>)"
    type: oci:core:image:id    
    required: true
    default: "ocid1.image.oc1.ap-tokyo-1.aaaaaaaap4f3vyddg7bznwpbxtbkwzmtcdzqnid2qwclsw2txormdozrixwa"
    dependsOn:      
      compartmentId: ${parent_compartment_id}      
      operatingSystem: "Canonical Ubuntu"
      operatingSystemVersion: "22.04" # 22.04に制限が可能      
  
  vm_shape:
    title: Shape
    description: "シェイプ名 (<a href='https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/computeshapes.htm'>シェイプについて</a>)"
    type: oci:core:instanceshape:name
    required: true
    default: "VM.Standard.E5.Flex"
    dependsOn:
      compartmentId: ${parent_compartment_id}
      imageId: ${vm_image}

  vm_ocpus:
    type: integer
    title: "OCPU数"
    description: "Flex Shape用のOCPU数 (1-64)"
    default: 1
    required: true
    minimum: 1
    maximum: 64

  vm_memory_in_gbs:
    type: integer
    title: "メモリ (GB)"
    description: "Flex Shape用のメモリサイズ (1-1024 GB)"
    default: 2
    required: true
    minimum: 1
    maximum: 1024

  vm_boot_volume_size_in_gbs:
    type: integer
    title: "ブートボリュームサイズ (GB)"
    description: "VMのブートボリュームサイズ (50-32768 GB)"
    default: 50
    required: true
    minimum: 50
    maximum: 32768

  admin_public_key:
    type: oci:core:ssh:publickey
    title: "SSH 公開鍵"
    description: "VM アクセス用のSSH公開鍵"
    required: true
    additionalProps:
      allowMultiple: true

  assign_public_ip:
    type: boolean
    title: "パブリック IP 割り当て"
    description: "VMにパブリックIPアドレスを割り当てるかどうか"
    default: false
    required: false

primaryOutputButton: instance_private_ip

outputs:
  instance_id:
    type: ocid
    title: "インスタンス OCID"
    description: "作成されたVM インスタンスのOCID"

  instance_private_ip:
    type: string
    title: "プライベート IP"
    description: "VMのプライベートIPアドレス"

  instance_public_ip:
    type: string
    title: "パブリック IP"
    description: "VMのパブリックIPアドレス(割り当て時のみ)"
    visible: ${assign_public_ip}

  boot_volume_id:
    type: ocid  
    title: "ブートボリューム OCID"
    description: "VMのブートボリュームOCID"

デプロイ

前述の工程でスタックを作成すると以下の画面になります。

oracle_cloud_stack_apply.png

日本語でOCIコンソールを開けているので単語に違和感がありますが、Terraformのplanやapplyを実行するボタンがあります。

OCIコンソール(日本語) Terraform
計画 terraform plan
適用 terraform apply
破棄 terraform destroy

適用が成功すると、デプロイしたリソースを確認することができます。また、tfstateはスタックが保持してくれるのでObject Storage等での管理は不要です。

oracle_cloud_stack_job_resources.png

まさに、Terraformのコマンドを実行することができる画面です。Terraform同様、デプロイが失敗した時のロールバックはありません。

まとめ

Oracle Cloud Stackを活用することで開発者はOCIの知識に成熟していなくても実現したい構成をカタログから選択し迅速にデプロイできるセルフサービスな基盤を構築できます。
また、schema.yamlによるUIカスタマイズで、入力ミスを防ぎ、ガイド付きのデプロイ体験を提供できる点も大きなメリットです。
プラットフォームチームにとっては、カタログ化による標準化とセキュリティ担保を両立できるため、開発者体験を向上させる有効な手段となります。

Terraformの操作に近いUIなので使ったことない方にとっては少々直感的でない部分はありますが、エンジニアを前提とする画面としては十分です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?