全部产品
Search
文档中心

OpenAPI Explorer:Gunakan alat Terraform di OpenAPI MCP Server

更新时间:Jan 28, 2026

Terraform adalah alat Infrastructure as Code (IaC) yang memungkinkan Anda mendefinisikan dan menyediakan sumber daya cloud menggunakan HashiCorp Configuration Language (HCL). OpenAPI Model Context Protocol (MCP) Server terintegrasi dengan Terraform, sehingga Anda dapat membuat alat Terraform yang dapat dieksekusi oleh agen AI. Integrasi ini menggabungkan fleksibilitas agen AI dengan orkestrasi deterministik dari IaC.

lQLPJwKcU7tGQHnNBTrNDOSw-Nwm2-VZSyoIqf0EaSNnAA_3300_1338

Ikhtisar

MCP adalah standar terbuka yang memungkinkan model AI terhubung secara aman dengan alat eksternal, aplikasi, dan sumber data. OpenAPI MCP Server menerapkan protokol ini untuk layanan Alibaba Cloud, menyediakan jembatan antara agen AI dan manajemen infrastruktur cloud.

Cara kerja

Saat Anda membuat alat Terraform di OpenAPI MCP Server, sistem akan:

  1. Menyimpan kode Terraform Anda sebagai alat yang dapat dieksekusi.

  2. Menyediakan alat tersebut kepada agen AI melalui protokol MCP.

  3. Menjalankan kode Terraform saat agen AI memanggil alat tersebut.

  4. Mengembalikan hasil eksekusi atau status tugas kepada agen.

Hal ini memastikan bahwa agen AI menggunakan informasi penyedia Alibaba Cloud terkini dan praktik terbaik, bukan data pelatihan yang berpotensi kedaluwarsa.

Apa yang dapat Anda lakukan

Dengan alat Terraform di OpenAPI MCP Server, Anda dapat:

  • Membuat konfigurasi Terraform yang dapat digunakan kembali dan dieksekusi oleh agen AI.

  • Mengotomatiskan penyediaan infrastruktur melalui perintah bahasa alami.

  • Mengelola sumber daya cloud dengan konfigurasi yang deterministik dan terkontrol versinya.

  • Menggabungkan fleksibilitas AI dengan keandalan IaC.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Akun Alibaba Cloud dengan izin yang sesuai.

  • Akses ke halaman OpenAPI MCP Server.

  • Pemahaman dasar tentang Terraform dan sintaks HCL.

  • (Opsional) Klien IDE (seperti Asisten Pengkodean AI Lingma) yang dikonfigurasi untuk menggunakan OpenAPI MCP Server.

Buat alat Terraform

  1. Buka atau halaman OpenAPI MCP Server, lalu pada tab Create an MCP Server, klik Add Terraform Tools.

  2. Pada panel Add Terraform Tool, konfigurasikan parameter berikut.

    Parameter

    Deskripsi

    Terraform Tool Name

    Nama alat Terraform.

    Terraform Tool Description

    Deskripsi fungsi alat Terraform atau catatan penting apa pun.

    Terraform Tool

    Kode Terraform untuk alat tersebut. Anda dapat menggunakan asisten AI Terraform bawaan untuk menghasilkan kode atau menulisnya sendiri.

    Asynchronous Execution

    Mode eksekusi untuk alat Terraform. Nilai yang valid:

    • No: Agen menunggu hingga tugas selesai sebelum mengembalikan hasil. Gunakan mode ini untuk konfigurasi sederhana yang berjalan cepat (biasanya selesai dalam waktu kurang dari 30 detik).

    • Yes: Panggilan agen langsung mengembalikan TaskId. OpenAPI MCP Server secara otomatis menambahkan alat sistem QueryTerraformTaskStatus, yang kemudian dapat Anda panggil dengan TaskId untuk memeriksa status tugas.

    Catatan

    Kami menyarankan memilih Yes untuk konfigurasi Terraform yang kompleks atau berjalan lama guna mencegah timeout pemanggilan model.

    Deletion Policy

    Perilaku pembersihan sumber daya setelah eksekusi. Nilai yang valid:

    • Never Delete: Sumber daya tidak dihapus setelah tugas dijalankan, baik sukses maupun gagal. Gunakan opsi ini jika Anda ingin menyimpan sumber daya untuk penggunaan lebih lanjut atau pembersihan manual.

    • Always Delete: Semua sumber daya yang dibuat langsung dihapus setelah tugas dijalankan, baik sukses maupun gagal. Gunakan opsi ini untuk lingkungan pengujian sementara.

    • Delete on Failure: Sumber daya yang dibuat hanya dihapus jika tugas gagal. Gunakan opsi ini untuk membersihkan sumber daya saat penerapan gagal, sekaligus mempertahankan penerapan yang berhasil.

    Catatan

    Jika Anda memilih Never Delete atau Delete on Failure, alat ini tidak dapat digunakan untuk melepaskan sumber daya tersebut di kemudian hari. Menjalankan alat lagi akan mencoba membuat serangkaian sumber daya baru.

  3. Tulis kode Terraform. Topik ini menyediakan contoh kode Terraform untuk menerapkan Dify guna pengujian. Untuk contoh Terraform lainnya, lihat tutorial Terraform.

    Contoh: Deploy Dify

    Contoh berikut membuat penerapan Dify lengkap di Alibaba Cloud, termasuk VPC, vSwitch (setara dengan subnet di AWS, Google Cloud, dan Azure), security group, dan instance ECS:

    provider "alicloud" {
      region = var.region
    }
    
    variable "region" {
      description = "Wilayah Alibaba Cloud"
      type        = string
      default     = "cn-hongkong"
    }
    
    variable "instance_type" {
      description = "Tipe instans ECS"
      type        = string
      default     = "ecs.c9i.xlarge"
    
      validation {
        condition     = can(regex("^ecs\\.", var.instance_type))
        error_message = "Tipe instans harus diawali dengan 'ecs.'"
      }
    }
    
    variable "system_disk_category" {
      description = "Jenis disk sistem"
      type        = string
      default     = "cloud_essd"
    
      validation {
        condition     = contains(["cloud_efficiency", "cloud_ssd", "cloud_essd"], var.system_disk_category)
        error_message = "Jenis disk sistem harus salah satu dari cloud_efficiency, cloud_ssd, atau cloud_essd."
      }
    }
    
    variable "system_disk_size" {
      description = "Ukuran disk sistem dalam GB"
      type        = number
      default     = 40
    
      validation {
        condition     = var.system_disk_size >= 20 && var.system_disk_size <= 500
        error_message = "Ukuran disk sistem harus antara 20 GB dan 500 GB."
      }
    }
    
    variable "instance_password" {
      description = "Kata sandi untuk instance ECS. Harus terdiri dari minimal 8 karakter dan mengandung huruf kapital, huruf kecil, serta angka."
      type        = string
      sensitive   = true
    
      validation {
        condition = (
          length(var.instance_password) >= 8 &&
          length(var.instance_password) <= 30 &&
          can(regex("[a-z]", var.instance_password)) &&
          can(regex("[A-Z]", var.instance_password)) &&
          can(regex("[0-9]", var.instance_password))
        )
        error_message = "Kata sandi harus terdiri dari minimal 8 karakter dan mengandung huruf kapital, huruf kecil, serta angka."
      }
    }
    
    variable "vpc_cidr" {
      description = "Blok CIDR untuk VPC"
      type        = string
      default     = "192.168.0.0/16"
    }
    
    variable "vswitch_cidr" {
      description = "Blok CIDR untuk vSwitch"
      type        = string
      default     = "192.168.1.0/24"
    }
    
    variable "project_name" {
      description = "Nama proyek, digunakan untuk penamaan sumber daya"
      type        = string
      default     = "dify-deployment"
    }
    
    variable "internet_max_bandwidth_out" {
      description = "Bandwidth publik maksimum dalam Mbit/s"
      type        = number
      default     = 5
    
      validation {
        condition     = var.internet_max_bandwidth_out >= 1 && var.internet_max_bandwidth_out <= 200
        error_message = "Bandwidth publik harus antara 1 Mbit/s dan 200 Mbit/s."
      }
    }
    
    data "alicloud_zones" "default" {
      available_disk_category     = var.system_disk_category
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    
    # Dapatkan image CentOS 7 terbaru
    data "alicloud_images" "centos" {
      owners        = "system"
      name_regex    = "^centos_7"
      most_recent   = true
      instance_type = var.instance_type
    }
    
    # Buat VPC
    resource "alicloud_vpc" "main" {
      vpc_name   = "${var.project_name}-vpc"
      cidr_block = var.vpc_cidr
    }
    
    # Buat vSwitch
    resource "alicloud_vswitch" "main" {
      vpc_id       = alicloud_vpc.main.id
      cidr_block   = var.vswitch_cidr
      zone_id      = data.alicloud_zones.default.zones.0.id
      vswitch_name = "${var.project_name}-vswitch"
    }
    
    # Buat security group
    resource "alicloud_security_group" "main" {
      security_group_name = "${var.project_name}-sg"
      description         = "Security group untuk penerapan Dify"
      vpc_id              = alicloud_vpc.main.id
    }
    
    # Aturan security group - HTTP
    resource "alicloud_security_group_rule" "http" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "80/80"
      priority          = 1
      security_group_id = alicloud_security_group.main.id
      cidr_ip           = "0.0.0.0/0"
      description       = "Izinkan trafik HTTP"
    }
    
    # Aturan security group - SSH
    resource "alicloud_security_group_rule" "ssh" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.main.id
      cidr_ip           = "0.0.0.0/0"
      description       = "Izinkan trafik SSH"
    }
    
    # Aturan security group - HTTPS
    resource "alicloud_security_group_rule" "https" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.main.id
      cidr_ip           = "0.0.0.0/0"
      description       = "Izinkan trafik HTTPS"
    }
    
    # Buat instance ECS
    resource "alicloud_instance" "dify" {
      instance_name              = "${var.project_name}-instance"
      image_id                   = data.alicloud_images.centos.images[0].id
      instance_type              = var.instance_type
      system_disk_category       = var.system_disk_category
      system_disk_size           = var.system_disk_size
      password                   = var.instance_password
      vswitch_id                 = alicloud_vswitch.main.id
      security_groups            = [alicloud_security_group.main.id]
      internet_max_bandwidth_out = var.internet_max_bandwidth_out
    }
    
    locals {
      # Instal dan konfigurasi Dify
      deploy_dify = base64encode(<<-EOF
    #!/bin/bash
    # Skrip instalasi otomatis Dify
    set -e
    
    # Fungsi pencatatan log
    log() {
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> /var/log/dify-install.log
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    }
    
    # Penanganan kesalahan
    error_exit() {
        log "ERROR: $1"
        exit 1
    }
    
    log "Memperbarui paket sistem..."
    yum update -y | | error_exit "Gagal memperbarui sistem"
    yum install -y git
    
    log "Menginstal Docker..."
    sudo wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
    sudo sed -i 's|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g' /etc/yum.repos.d/docker-ce.repo
    sudo yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    log "Menjalankan layanan Docker..."
    systemctl start docker | | error_exit "Gagal menjalankan Docker"
    systemctl enable docker | | error_exit "Gagal mengaktifkan Docker agar berjalan saat boot"
    
    log "Membuat direktori aplikasi..."
    mkdir -p /opt/dify
    cd /opt/dify
    git clone https://github.com/langgenius/dify.git . | | error_exit "Gagal mengkloning dify"
    
    log "Menyalin file konfigurasi lingkungan..."
    cd docker
    cp .env.example .env | | error_exit "Gagal menyalin file konfigurasi lingkungan"
    
    log "Menjalankan layanan Dify..."
    docker compose up -d | | error_exit "Gagal menjalankan layanan Dify"
    
    log "Instalasi Dify selesai!"
    log "URL: http://$(curl -s ipinfo.io/ip):80"
    log "Akun administrator default harus dibuat saat kunjungan pertama."
    EOF
      )
    }
    
    resource "alicloud_ecs_command" "deploy_dify" {
      name            = "deploy_dify"
      type            = "RunShellScript"
      command_content = local.deploy_dify
      timeout         = 600
      working_dir     = "/root"
    }
    
    resource "alicloud_ecs_invocation" "invocation" {
      instance_id = [alicloud_instance.dify.id]
      command_id  = alicloud_ecs_command.deploy_dify.id
      timeouts {
        create = "10m"
      }
    }
    
    # Dapatkan informasi instance
    data "alicloud_instances" "dify" {
      ids        = [alicloud_instance.dify.id]
      depends_on = [alicloud_instance.dify]
    }
    

    image

Uji alat Terraform pada klien

Bagian ini menjelaskan cara menguji alat Terraform di Asisten Pengkodean AI Lingma.

Langkah 1: Konfigurasikan OpenAPI MCP Server di Lingma

Konfigurasikan OpenAPI MCP Server di Lingma. Setelah konfigurasi diterapkan, informasi tentang alat tersebut akan ditampilkan di Lingma.

image

Langkah 2: Jalankan alat Terraform

  1. Masukkan perintah bahasa alami untuk menjalankan OpenAPI MCP Server. Misalnya, masukkan "Bantu saya menerapkan Dify di Tiongkok (Hong Kong)".

  2. Agen AI memproses permintaan Anda dan memanggil alat Terraform.

Langkah 3: Kueri status tugas (eksekusi asinkron)

Jika Anda mengatur Asynchronous Execution ke Yes:

  1. Agen langsung mengembalikan TaskId setelah memanggil alat Terraform.

  2. Gunakan TaskId ini untuk memanggil alat sistem QueryTerraformTaskStatus guna memeriksa status tugas.

  3. Pantau status tugas hingga selesai atau gagal.

    image

Langkah 4: Verifikasi penerapan

  1. Setelah eksekusi Terraform selesai, dapatkan alamat IP publik dari instance ECS yang dibuat:

    • Masuk ke Konsol Elastic Compute Service (ECS). Di panel navigasi sebelah kiri, pilih Instances & Images > Instances.

    • Temukan instance yang dibuat oleh alat Terraform.

    • Salin alamat IP publik dari halaman detail instance.

    Atau, Anda dapat menambahkan output ke kode Terraform Anda untuk secara otomatis mengembalikan alamat IP publik:

    output "public_ip" {
      value = alicloud_instance.dify.public_ip
    }
    
  2. Pada browser, masukkan http://<Alamat IP publik>.

  3. Jika Anda melihat halaman penyiapan Dify, penerapan berhasil dan alat Terraform berjalan dengan benar.

    image