All Products
Search
Document Center

OpenAPI Explorer:Menggunakan tool Terraform di OpenAPI MCP Server

Last Updated:Jun 22, 2026

Terraform adalah alat Infrastructure as Code yang menggunakan bahasa konfigurasi deklaratif—HashiCorp Configuration Language (HCL)—untuk mendefinisikan sumber daya cloud serta mengotomatisasi pembuatan dan pengelolaan infrastruktur melalui perintah Terraform. Dengan mengintegrasikan kemampuan otomatisasi Terraform, OpenAPI MCP Server memungkinkan Anda mengonfigurasi kode Terraform sebagai tool dalam sistem MCP, menggabungkan otonomi agen AI dengan orkestrasi deterministik Terraform.

lQLPJwKcU7tGQHnNBTrNDOSw-Nwm2-VZSyoIqf0EaSNnAA_3300_1338

Buat tool Terraform

  1. Buka halaman layanan Alibaba Cloud OpenAPI MCP untuk membuat layanan MCP, lalu klik Add Terraform Tools.

  2. Pada halaman Add Terraform Tool, masukkan informasi tool Anda.

    Parameter

    Deskripsi

    Terraform tool name

    Nama tool tersebut.

    Terraform tool description

    Menjelaskan fungsi tool dan catatan khusus apa pun.

    Terraform tool

    Bidang untuk kode Terraform Anda. Anda dapat menggunakan asisten AI Terraform yang disediakan untuk menghasilkan kode atau menulisnya secara manual sesuai kebutuhan.

    Asynchronous execution

    • No: Agen AI menunggu hingga tugas selesai, lalu mengembalikan hasil eksekusi.

    • Yes: OpenAPI MCP Server secara otomatis menambahkan tool sistem QueryTerraformTaskStatus. Setelah agen AI memanggil tool Terraform, server segera mengembalikan TaskId. Gunakan TaskId ini untuk memanggil tool sistem dan mengecek status eksekusi tugas.

    Catatan

    Jika kode Terraform Anda kompleks atau memerlukan waktu lama untuk dijalankan, pilih Yes untuk menghindari timeout pemanggilan model bahasa besar (LLM).

    Deletion policy

    • Never Delete: Sumber daya yang dibuat tidak akan dilepas, baik tugas berhasil maupun gagal.

    • Always Delete: Semua sumber daya yang dibuat segera dilepas, baik tugas berhasil maupun gagal.

    • Delete on Failure: Sumber daya yang dibuat hanya dilepas jika tugas gagal.

    Catatan

    Dengan opsi lainnya, Anda tidak dapat menggunakan tool Terraform untuk menghapus sumber daya setelah dibuat. Menjalankan ulang tool Terraform akan membuat ulang sumber daya tersebut.

    Dokumen ini menyediakan contoh kode Terraform untuk menerapkan Dify. Untuk contoh Terraform lainnya, lihat tutorial.

    Deploy Dify

    provider "alicloud" {
      region = var.region
    }
    variable "region" {
      description = "The Alibaba Cloud region"
      type        = string
      default     = "cn-hongkong"
    }
    variable "instance_type" {
      description = "The ECS instance type"
      type        = string
      default     = "ecs.c9i.xlarge"
      validation {
        condition     = can(regex("^ecs\\.", var.instance_type))
        error_message = "The instance type must start with 'ecs.'"
      }
    }
    variable "system_disk_category" {
      description = "The system disk type"
      type        = string
      default     = "cloud_essd"
      validation {
        condition     = contains(["cloud_efficiency", "cloud_ssd", "cloud_essd"], var.system_disk_category)
        error_message = "The system disk type must be one of cloud_efficiency, cloud_ssd, or cloud_essd."
      }
    }
    variable "system_disk_size" {
      description = "The system disk size in GB"
      type        = number
      default     = 40
      validation {
        condition     = var.system_disk_size >= 20 && var.system_disk_size <= 500
        error_message = "The system disk size must be between 20 GB and 500 GB."
      }
    }
    variable "instance_password" {
      description = "The password for the ECS instance. It must be 8 to 30 characters long and contain an uppercase letter, a lowercase letter, and a number."
      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 = "The password must be 8 to 30 characters long and contain an uppercase letter, a lowercase letter, and a number."
      }
    }
    variable "vpc_cidr" {
      description = "The CIDR block for the VPC"
      type        = string
      default     = "192.168.0.0/16"
    }
    variable "vswitch_cidr" {
      description = "The CIDR block for the vSwitch"
      type        = string
      default     = "192.168.1.0/24"
    }
    variable "project_name" {
      description = "The project name, used for naming resources"
      type        = string
      default     = "dify-deployment"
    }
    variable "internet_max_bandwidth_out" {
      description = "The maximum public bandwidth in Mbps"
      type        = number
      default     = 5
      validation {
        condition     = var.internet_max_bandwidth_out >= 1 && var.internet_max_bandwidth_out <= 200
        error_message = "The public bandwidth must be between 1 Mbps and 200 Mbps."
      }
    }
    data "alicloud_zones" "default" {
      available_disk_category     = var.system_disk_category
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Get the latest CentOS 7 image
    data "alicloud_images" "centos" {
      owners        = "system"
      name_regex    = "^centos_7"
      most_recent   = true
      instance_type = var.instance_type
    }
    # Create a VPC
    resource "alicloud_vpc" "main" {
      vpc_name   = "${var.project_name}-vpc"
      cidr_block = var.vpc_cidr
    }
    # Create a 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"
    }
    # Create a security group
    resource "alicloud_security_group" "main" {
      security_group_name = "${var.project_name}-sg"
      description         = "Security group for Dify deployment"
      vpc_id              = alicloud_vpc.main.id
    }
    # Security group rule - 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       = "Allow HTTP traffic"
    }
    # Security group rule - 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       = "Allow SSH traffic"
    }
    # Security group rule - 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       = "Allow HTTPS traffic"
    }
    # Create an ECS instance
    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 {
      # Install and configure Dify
      deploy_dify = base64encode(<<-EOF
    #!/bin/bash
    # Dify auto-installation script
    set -e
    # Logging function
    log() {
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> /var/log/dify-install.log
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    }
    # Error handling
    error_exit() {
        log "ERROR: $1"
        exit 1
    }
    log "Updating system packages..."
    yum update -y || error_exit "Failed to update the system"
    yum install -y git
    log "Installing 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 "Starting Docker service..."
    systemctl start docker || error_exit "Failed to start Docker"
    systemctl enable docker || error_exit "Failed to enable Docker at boot"
    log "Creating application directory..."
    mkdir -p /opt/dify
    cd /opt/dify
    git clone https://github.com/langgenius/dify.git . || error_exit "Failed to clone dify"
    log "Copying environment configuration file..."
    cd docker
    cp .env.example .env || error_exit "Failed to copy environment configuration file"
    log "Starting Dify service..."
    docker compose up -d || error_exit "Failed to start Dify service"
    log "Dify installation complete!"
    log "Access URL: http://$(curl -s ipinfo.io/ip):80"
    log "The administrator account must be created on the first visit."
    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"
      }
    }
    # Get instance information
    data "alicloud_instances" "dify" {
      ids        = [alicloud_instance.dify.id]
      depends_on = [alicloud_instance.dify]
    }
    

    Pada panel Add Terraform Tool, atur Terraform Tool Name menjadi deploydify dan Terraform Tool Description menjadi Deploy Dify in a CentOS ECS instance. Tempel kode Terraform di atas ke editor kode. Untuk Asynchronous Execution, pilih Yes. Untuk Deletion Policy, pilih Delete on Failure.

Uji tool Terraform di client

Bagian ini menjelaskan cara menguji tool Terraform di Tongyi Lingma.

  1. Ikuti petunjuk dalam Configure MCP in Tongyi Lingma untuk menyiapkan OpenAPI MCP Server. Setelah dikonfigurasi, tool yang termasuk dalam MCP akan ditampilkan.

    Layanan terraform-dify telah diaktifkan. Daftar tool mencakup tiga tool: Ecs-20140526-DescribeInstances (mengeksekusi kueri instans ECS), terraform/deploydify (menerapkan Dify di instans ECS CentOS), dan system-QueryTerraformTaskStatus (mengeksekusi kueri status tugas Terraform).

  2. Masukkan perintah dalam bahasa alami untuk menjalankan MCP. Misalnya, "Bantu saya menerapkan Dify di Tiongkok (Hong Kong)."

    Klik tab AI agent di pojok kiri bawah kotak input untuk beralih ke mode agen, lalu masukkan perintah dalam bahasa alami dan kirim.

  3. Karena Anda memilih eksekusi asinkron, agen AI mengembalikan TaskId. Anda dapat menggunakan TaskId ini untuk berulang kali memanggil tool sistem (QueryTerraformTaskStatus) guna memeriksa status eksekusi tugas.

    Agen AI pertama-tama menjalankan tool terraform-dify/terraform/deploydify untuk memulai tugas penerapan. Setelah menerima TaskId, agen tersebut berulang kali memanggil QueryTerraformTaskStatus untuk melakukan polling status, yang bernilai Applying selama proses berlangsung. Setelah penerapan berhasil, informasi penerapan dikembalikan: wilayah adalah Tiongkok (Hong Kong) (cn-hongkong), zona ketersediaan adalah cn-hongkong-b, nama instans adalah dify-deployment-instance, tipe instans adalah ecs.c9i.xlarge (4 vCPU dan memori 8 GB), serta Alamat IP publik telah ditetapkan.

  4. Anda dapat memverifikasi keberhasilan penerapan Dify dengan memasukkan http://<Public IP address> di browser Anda. Jika penerapan berhasil, halaman berikut akan muncul, yang menandakan bahwa tool Terraform telah dieksekusi dengan sukses.

    Halaman tersebut menampilkan antarmuka Set up your Admin account untuk Edisi Komunitas Dify. Antarmuka ini mencakup bidang Email, Username, dan Password. Password harus berisi huruf dan angka serta minimal terdiri dari 8 karakter. Setelah Anda memasukkan informasi tersebut, klik Set untuk menyelesaikan penyiapan.