腾讯云国际版计算服务自动化运维实战:基于 Terraform 的 CVM、TKE、弹性伸缩 AS、Lighthouse 与 GPU 云服务器资源编排指南(2026 最新版)

📅 · AWS 国际版实战教程 - ChengziCloud

一句话结论

Meta Description: 腾讯云国际版五大计算产品 IaC 自动化运维全攻略:Terraform Provider 配置、CVM 实例声明式创建、TKE 集群与节点池编排、弹性伸缩 AS 策略代码化、Lighthouse 资源管理、GPU 云服务器自动化部署,附带生产级模块化代码模板与 C…

本文要点
  • 引言:告别"控制台点击式"运维
  • Terraform 环境准备与腾讯云 Provider 配置
  • CVM 云服务器:从手动创建到声明式部署
  • TKE 容器服务:声明式集群与节点池管理
  • 弹性伸缩 AS:代码化定义扩缩容策略
  • Lighthouse 轻量应用服务器:开箱即用的声明式管理
  • GPU 云服务器:AI 训练与推理的自动化部署
  • 核心服务 IaC 对比:声明式能力一览

Meta Description: 腾讯云国际版五大计算产品 IaC 自动化运维全攻略:Terraform Provider 配置、CVM 实例声明式创建、TKE 集群与节点池编排、弹性伸缩 AS 策略代码化、Lighthouse 资源管理、GPU 云服务器自动化部署,附带生产级模块化代码模板与 CI/CD 集成方案。

关键词:腾讯云 Terraform、CVM 自动化部署、TKE 基础设施即代码、弹性伸缩 IaC、GPU 云服务器 Terraform、Lighthouse 声明式管理、腾讯云国际版 Provider、云计算自动化运维

引言:告别"控制台点击式"运维

在云计算早期,创建一台云服务器只需要在控制台点几下鼠标。但当你的基础设施增长到数十台 CVM 实例、多个 TKE 集群、数条弹性伸缩策略和若干 GPU 训练节点时,"控制台运维"就变成了一场噩梦——操作不可复现、配置无法审计、环境一致性无从保证。

基础设施即代码(Infrastructure as Code,IaC) 正是为了解决这一问题而生。通过将云资源定义为版本化的代码文件,你可以像管理应用代码一样管理基础设施:提交到 Git、走 Code Review、通过 CI/CD 自动部署、回滚就像 git revert 一样简单。

本文将带你从零掌握使用 HashiCorp Terraform 管理腾讯云国际版五大核心计算服务——CVM 云服务器、TKE 容器服务、弹性伸缩 AS、轻量应用服务器 Lighthouse 和 GPU 云服务器——的完整实践。

Terraform 环境准备与腾讯云 Provider 配置

安装 Terraform


# macOS
brew tap hashicorp/tap && brew install hashicorp/tap/terraform

# Linux (amd64)
wget https://releases.hashicorp.com/terraform/1.9.0/terraform_1.9.0_linux_amd64.zip
unzip terraform_1.9.0_linux_amd64.zip && sudo mv terraform /usr/local/bin/

# 验证安装
terraform version

获取腾讯云 API 密钥

登录 腾讯云控制台 → 访问管理 → API 密钥管理 → 创建密钥。记下 SecretId 和 SecretKey。

安全提示:切勿将密钥硬编码到 .tf 文件中。推荐使用环境变量:


export TENCENTCLOUD_SECRET_ID="AKIDxxxxxxxxxxxxxxxx"
export TENCENTCLOUD_SECRET_KEY="xxxxxxxxxxxxxxxxxxxxxxxx"
export TENCENTCLOUD_REGION="ap-singapore"  # 国际版常用区域

Provider 配置

创建 provider.tf:


terraform {
  required_version = ">= 1.9.0"
  required_providers {
    tencentcloud = {
      source  = "tencentcloudstack/tencentcloud"
      version = "~> 1.81"
    }
  }
}

provider "tencentcloud" {
  # SecretId、SecretKey 和 Region 从环境变量读取
  # 无需在此硬编码
}

初始化项目:


terraform init

CVM 云服务器:从手动创建到声明式部署

基础 CVM 实例

以下代码创建一个标准型 CVM 实例,绑定公网 IP 和安全组:


# variables.tf
variable "availability_zone" {
  default = "ap-singapore-1"
}

# cvm.tf
data "tencentcloud_images" "default" {
  image_type       = ["PUBLIC_IMAGE"]
  os_name          = "CentOS 7.9 64bit"
}

data "tencentcloud_instance_types" "default" {
  cpu_core_count   = 4
  memory_size      = 8
}

resource "tencentcloud_instance" "web_server" {
  instance_name     = "web-server-prod"
  availability_zone = var.availability_zone
  image_id          = data.tencentcloud_images.default.images.0.image_id
  instance_type     = data.tencentcloud_instance_types.default.instance_types.0.instance_type
  system_disk_type  = "CLOUD_PREMIUM"
  system_disk_size  = 50
  allocate_public_ip = true
  internet_max_bandwidth_out = 10

  vpc_id    = tencentcloud_vpc.main.id
  subnet_id = tencentcloud_subnet.main.id

  security_groups = [tencentcloud_security_group.web.id]

  user_data = base64encode(<<-EOF
    #!/bin/bash
    yum install -y nginx
    systemctl enable nginx --now
    echo "<h1>Deployed by Terraform</h1>" > /usr/share/nginx/html/index.html
  EOF
  )

  tags = {
    Environment = "production"
    ManagedBy   = "Terraform"
    Service     = "web"
  }
}

批量创建 CVM 实例(使用 count 和 for_each)


# 使用 count 创建多台相同配置的实例
resource "tencentcloud_instance" "web_cluster" {
  count = 3

  instance_name     = "web-node-${count.index + 1}"
  availability_zone = var.availability_zone
  # ... 其余配置同上
}

# 使用 for_each 创建不同配置的实例
resource "tencentcloud_instance" "app_servers" {
  for_each = {
    api    = { cpu = 8, mem = 16, zone = "ap-singapore-1" }
    worker = { cpu = 4, mem = 8,  zone = "ap-singapore-2" }
    cache  = { cpu = 2, mem = 4,  zone = "ap-singapore-3" }
  }

  instance_name     = each.key
  availability_zone = each.value.zone
  # 根据 each.value 选择实例规格...
}

TKE 容器服务:声明式集群与节点池管理

创建托管版 TKE 集群


resource "tencentcloud_kubernetes_cluster" "production" {
  cluster_name            = "prod-cluster"
  cluster_version         = "1.28.3"
  cluster_desc            = "生产环境 Kubernetes 集群"
  vpc_id                  = tencentcloud_vpc.main.id
  cluster_cidr            = "172.16.0.0/16"
  cluster_max_pod_num     = 256
  cluster_max_service_num = 256

  # 集群网络配置
  cluster_internet                = true
  cluster_internet_security_group = tencentcloud_security_group.tke.id
  cluster_intranet                = false

  # 增强特性
  cluster_deploy_type = "MANAGED_CLUSTER"  # 托管集群

  tags = {
    ManagedBy = "Terraform"
    Cluster   = "prod"
  }
}

节点池管理——弹性扩缩容的 IaC 实现


resource "tencentcloud_kubernetes_node_pool" "general" {
  name                 = "general-pool"
  cluster_id           = tencentcloud_kubernetes_cluster.production.id
  max_size             = 20
  min_size             = 3
  desired_capacity     = 5
  vpc_id               = tencentcloud_vpc.main.id
  subnet_ids           = [tencentcloud_subnet.main.id]
  retry_policy         = "INCREMENTAL_INTERVALS"
  enable_auto_scale    = true
  multi_zone_subnet_policy = "PRIORITY"

  # 节点配置
  auto_scaling_config {
    instance_type    = "S5.LARGE8"
    system_disk_type = "CLOUD_PREMIUM"
    system_disk_size = 100

    security_group_ids = [tencentcloud_security_group.tke.id]

    internet_charge_type       = "TRAFFIC_POSTPAID_BY_HOUR"
    internet_max_bandwidth_out = 10
    public_ip_assigned         = true

    password = var.node_password  # 或使用 key_ids 指定 SSH 密钥

    # 节点初始化脚本
    user_data = base64encode(<<-EOF
      #!/bin/bash
      sysctl -w net.core.somaxconn=32768
      sysctl -w vm.swappiness=0
      echo "* soft nofile 65536" >> /etc/security/limits.conf
      echo "* hard nofile 65536" >> /etc/security/limits.conf
    EOF
    )
  }

  labels = {
    "node.kubernetes.io/pool" = "general"
    "workload.type"           = "mixed"
  }

  taints {
    key    = "workload.type"
    value  = "mixed"
    effect = "NoSchedule"
  }

  tags = {
    ManagedBy = "Terraform"
  }
}

# GPU 节点池:专用于 AI/ML 工作负载
resource "tencentcloud_kubernetes_node_pool" "gpu" {
  name             = "gpu-pool"
  cluster_id       = tencentcloud_kubernetes_cluster.production.id
  max_size         = 10
  min_size         = 0
  desired_capacity = 1
  vpc_id           = tencentcloud_vpc.main.id
  subnet_ids       = [tencentcloud_subnet.main.id]
  enable_auto_scale = true

  auto_scaling_config {
    instance_type    = "GN7.2XLARGE32"  # Tesla T4 × 1
    system_disk_type = "CLOUD_PREMIUM"
    system_disk_size = 100

    security_group_ids = [tencentcloud_security_group.tke.id]
    public_ip_assigned = true
    internet_max_bandwidth_out = 100

    # GPU 驱动安装
    user_data = base64encode(<<-EOF
      #!/bin/bash
      nvidia-smi || (
        curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
        curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | tee /etc/yum.repos.d/nvidia-docker.repo
        yum install -y nvidia-container-toolkit
        systemctl restart docker
      )
    EOF
    )
  }

  labels = {
    "node.kubernetes.io/pool" = "gpu"
    "accelerator"             = "nvidia-tesla-t4"
  }

  taints {
    key    = "nvidia.com/gpu"
    value  = "true"
    effect = "NoSchedule"
  }
}

弹性伸缩 AS:代码化定义扩缩容策略

Terraform 不仅可以管理 TKE 的节点池伸缩,还可以独立管理 CVM 的弹性伸缩组:


# 启动配置
resource "tencentcloud_as_scaling_config" "web" {
  configuration_name = "web-as-config"
  image_id           = data.tencentcloud_images.default.images.0.image_id
  instance_types     = ["S5.MEDIUM4", "S5.MEDIUM8"]  # 多规格容错
  system_disk_type   = "CLOUD_PREMIUM"
  system_disk_size   = 50
  security_group_ids = [tencentcloud_security_group.web.id]

  internet_charge_type       = "TRAFFIC_POSTPAID_BY_HOUR"
  internet_max_bandwidth_out = 10

  user_data = base64encode(data.template_file.web_init.rendered)
}

# 弹性伸缩组
resource "tencentcloud_as_scaling_group" "web" {
  scaling_group_name = "web-asg"
  configuration_id   = tencentcloud_as_scaling_config.web.id
  max_size           = 20
  min_size           = 2
  desired_capacity   = 3
  vpc_id             = tencentcloud_vpc.main.id
  subnet_ids         = [tencentcloud_subnet.main.id]
  project_id         = 0

  # 负载均衡器关联
  load_balancer_ids = [tencentcloud_clb_instance.web.id]

  # 缩容保护
  termination_policies = ["NEWEST_INSTANCE"]

  tags = {
    ManagedBy = "Terraform"
  }
}

# 定时伸缩策略:每日 08:00 扩容至 10 台,22:00 缩回 3 台
resource "tencentcloud_as_schedule" "scale_up_morning" {
  scaling_group_id     = tencentcloud_as_scaling_group.web.id
  schedule_action_name = "morning-scale-up"
  max_size             = 10
  min_size             = 3
  desired_capacity     = 10
  start_time           = "0 8 * * *"  # 每日 08:00
}

resource "tencentcloud_as_schedule" "scale_down_night" {
  scaling_group_id     = tencentcloud_as_scaling_group.web.id
  schedule_action_name = "night-scale-down"
  max_size             = 10
  min_size             = 2
  desired_capacity     = 3
  start_time           = "0 22 * * *"  # 每日 22:00
}

# 基于告警的弹性伸缩策略
resource "tencentcloud_as_scaling_policy" "cpu_high" {
  scaling_group_id    = tencentcloud_as_scaling_group.web.id
  policy_name         = "cpu-high-scale-out"
  adjustment_type     = "CHANGE_IN_CAPACITY"
  adjustment_value    = 2
  cooldown            = 300

  metric_name         = "cpu_usage"
  comparison_operator = "GREATER_THAN"
  threshold           = 70
  period              = 60
  continuous_time     = 3
}

Lighthouse 轻量应用服务器:开箱即用的声明式管理

Lighthouse 是腾讯云面向轻量级场景的一站式云服务器产品,Terraform 对其有完整支持:


resource "tencentcloud_lighthouse_instance" "blog" {
  bundle_id    = "bundle_gen_03"     # 2C4G 80GB SSD 6Mbps
  blueprint_id = "lhbp-f1lkcd41"     # WordPress 社区镜像

  instance_name = "company-blog"
  period        = 12                  # 12 个月
  renew_flag    = "NOTIFY_AND_AUTO_RENEW"

  # 防火墙规则
  # 注:防火墙规则需要单独的资源定义
}

resource "tencentcloud_lighthouse_firewall_rule" "blog_rules" {
  instance_id = tencentcloud_lighthouse_instance.blog.id

  firewall_rules {
    protocol  = "TCP"
    port      = "80"
    cidr_block = "0.0.0.0/0"
    action    = "ACCEPT"
  }
  firewall_rules {
    protocol  = "TCP"
    port      = "443"
    cidr_block = "0.0.0.0/0"
    action    = "ACCEPT"
  }
  firewall_rules {
    protocol  = "TCP"
    port      = "22"
    cidr_block = "YOUR_OFFICE_IP/32"  # 仅允许办公 IP 访问 SSH
    action    = "ACCEPT"
  }
}

GPU 云服务器:AI 训练与推理的自动化部署

GPU 实例通过 Terraform 部署时需要额外处理驱动安装、CUDA 环境配置等:


resource "tencentcloud_instance" "gpu_training" {
  instance_name     = "gpu-training-node"
  availability_zone = "ap-singapore-3"
  image_id          = "img-eb30mz89"  # Ubuntu 22.04 LTS
  instance_type     = "GN10Xp.2XLARGE40"  # Tesla V100 × 1, 8 vCPU, 40GB

  system_disk_type  = "CLOUD_SSD"
  system_disk_size  = 100

  # 数据盘
  data_disks {
    data_disk_type = "CLOUD_SSD"
    data_disk_size = 500
  }

  vpc_id    = tencentcloud_vpc.main.id
  subnet_id = tencentcloud_subnet.main.id

  allocate_public_ip         = true
  internet_max_bandwidth_out = 100

  security_groups = [tencentcloud_security_group.gpu.id]

  user_data = base64encode(templatefile("${path.module}/scripts/gpu-init.sh", {
    cuda_version = "12.2"
    cudnn_version = "8.9"
  }))

  tags = {
    Workload   = "deep-learning"
    GPU_Model  = "V100"
    ManagedBy  = "Terraform"
  }
}

配套的 scripts/gpu-init.sh 初始化脚本:


#!/bin/bash
set -e

CUDA_VERSION="${cuda_version}"
CUDNN_VERSION="${cudnn_version}"

# 安装 NVIDIA 驱动
apt-get update && apt-get install -y build-essential
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt-get update
apt-get install -y cuda-toolkit-$${CUDA_VERSION//./-}

# 安装 Docker + NVIDIA Container Toolkit
curl -fsSL https://get.docker.com | bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#' | \
  tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update && apt-get install -y nvidia-container-toolkit
systemctl restart docker

# 验证
nvidia-smi
docker run --rm --gpus all nvidia/cuda:$${CUDA_VERSION}-base-ubuntu22.04 nvidia-smi

echo "GPU node initialization complete."

核心服务 IaC 对比:声明式能力一览

计算服务Terraform 资源类型声明式能力推荐场景复杂度
CVMtencentcloud_instance实例创建、系统盘、数据盘、VPC、安全组、User Data传统应用、单体服务⭐⭐
TKEtencentcloud_kubernetes_cluster + _node_pool集群创建、节点池、自动伸缩、标签/污点微服务、容器化应用⭐⭐⭐⭐
弹性伸缩 AStencentcloud_as_scaling_group + _config启动配置、伸缩策略、定时任务、告警触发流量波动型 Web 应用⭐⭐⭐
Lighthousetencentcloud_lighthouse_instance实例创建、镜像选择、防火墙规则、自动续费个人博客、企业官网⭐
GPU 云服务器tencentcloud_instance(GPU 规格)实例创建、驱动安装、CUDA 环境、数据盘AI 训练、推理、渲染⭐⭐⭐

Terraform 模块化:复用你的基础设施代码

随着项目增长,推荐将基础设施拆分为可复用的模块:


terraform/
├── modules/
│   ├── cvm-web-server/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── tke-cluster/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   └── gpu-node/
│       ├── main.tf
│       ├── variables.tf
│       └── outputs.tf
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   └── terraform.tfvars
│   ├── staging/
│   │   ├── main.tf
│   │   └── terraform.tfvars
│   └── prod/
│       ├── main.tf
│       └── terraform.tfvars
└── provider.tf

模块调用示例(environments/prod/main.tf):


module "web_servers" {
  source = "../../modules/cvm-web-server"

  instance_count     = 5
  instance_type      = "S5.LARGE8"
  availability_zones = ["ap-singapore-1", "ap-singapore-2"]

  vpc_id    = module.networking.vpc_id
  subnet_ids = module.networking.subnet_ids
}

module "k8s_cluster" {
  source = "../../modules/tke-cluster"

  cluster_name    = "prod-k8s"
  cluster_version = "1.28.3"
  node_pools = {
    general = { min = 3, max = 20, type = "S5.LARGE8" }
    gpu     = { min = 0, max = 5,  type = "GN7.2XLARGE32" }
  }

  vpc_id    = module.networking.vpc_id
  subnet_ids = module.networking.subnet_ids
}

CI/CD 集成:将 IaC 嵌入自动化流水线

将 Terraform 集成到 GitHub Actions 中,实现基础设施的 GitOps 工作流:


# .github/workflows/terraform.yml
name: "Terraform Apply"

on:
  push:
    branches: [main]
    paths:
      - "terraform/**"
  pull_request:
    paths:
      - "terraform/**"

env:
  TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }}
  TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }}

jobs:
  terraform:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        environment: [dev, staging, prod]
    steps:
      - uses: actions/checkout@v4

      - uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: "1.9.0"

      - name: Terraform Format Check
        run: terraform fmt -check -recursive

      - name: Terraform Init
        working-directory: terraform/environments/${{ matrix.environment }}
        run: terraform init

      - name: Terraform Validate
        working-directory: terraform/environments/${{ matrix.environment }}
        run: terraform validate

      - name: Terraform Plan
        working-directory: terraform/environments/${{ matrix.environment }}
        run: terraform plan -out=tfplan

      # 仅 main 分支执行 apply
      - name: Terraform Apply
        if: github.ref == 'refs/heads/main' && matrix.environment == 'prod'
        working-directory: terraform/environments/${{ matrix.environment }}
        run: terraform apply -auto-approve tfplan

最佳实践与避坑指南

1. State 文件远程存储

Terraform 的状态文件(terraform.tfstate)包含敏感信息,绝不应提交到 Git。使用腾讯云 COS 作为远程后端:


terraform {
  backend "cos" {
    region = "ap-singapore"
    bucket = "terraform-state-20260721-1234567890"
    prefix = "prod/compute"
    encrypt = true
  }
}

2. 敏感变量管理


# variables.tf
variable "node_password" {
  description = "TKE 节点 SSH 密码"
  type        = string
  sensitive   = true
}

# 从外部文件或 CI/CD Secret 注入
# terraform apply -var="node_password=$(cat /secure/node-password)"

3. 变更审批流程

对于生产环境,使用 terraform plan 的输出作为 Pull Request 的评论,在 apply 前进行人工审批。推荐使用 Atlantis 或 Terraform Cloud。

4. 资源导入——将存量资源纳入管理

如果已有手动创建的资源,使用 terraform import 将其纳入代码管理:


# 导入已有 CVM 实例
terraform import tencentcloud_instance.existing_web ins-xxxxxxxx

# 导入已有 TKE 集群
terraform import tencentcloud_kubernetes_cluster.legacy cls-xxxxxxxx

5. 销毁保护

生产环境的数据库、核心集群应启用销毁保护,避免误删:


resource "tencentcloud_instance" "critical" {
  # ... 其他配置
  disable_api_termination = true  # 防止 API 误删除
}

各服务 Terraform 自动化能力雷达图

能力维度CVMTKEASLighthouseGPU
声明式创建✅✅✅✅✅
原地更新⚠️✅✅⚠️⚠️
批量管理✅✅✅❌✅
User Data✅✅✅❌✅
标签管理✅✅✅✅✅
多规格容错✅✅✅❌❌
自动伸缩❌✅✅❌❌
完整生命周期✅✅✅✅✅

图例:✅ 原生支持 | ⚠️ 有限支持(部分属性变更会触发重建)| ❌ 不支持

总结

腾讯云国际版的计算服务家族——CVM、TKE、弹性伸缩 AS、Lighthouse 和 GPU 云服务器——在 Terraform 的加持下,能够实现完全的声明式管理和自动化运维。这不仅提升了部署效率,更将基础设施的可靠性提升到了一个新的高度:每一次变更都有迹可循,每一个环境都能精确复制。

从单台 CVM 的自动化创建,到完整的 TKE 集群与 GPU 节点池的声明式编排,再到 CI/CD 流水线中的 GitOps 工作流——IaC 不是"锦上添花",而是现代云运维的基础设施。

如果你正在管理腾讯云国际版上的计算资源,现在就是拥抱 Terraform 的最佳时机。


本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多

常见问题(FAQ)

Terraform 和腾讯云控制台可以混用吗?

不建议。Terraform 管理资源后,直接通过控制台修改会导致状态漂移(State Drift)。下次 terraform apply 时会尝试覆盖手动修改。如果必须临时手动修改,运行 terraform refresh 同步状态后再继续。

Terraform 变更会导致服务中断吗?

取决于具体变更。修改 CVM 的 user_data 或标签不会导致重启;但修改 image_id 或 instance_type 会触发实例重建。TKE 节点池的扩容是无中断的,缩容则会排空节点。

GPU 实例的 userdata 初始化失败怎么排查?

登录实例后查看 /var/log/cloud-init-output.log,或在控制台查看实例的"最近操作"日志。常见原因是网络问题导致驱动下载失败——可在脚本中增加重试逻辑。

多环境(dev/staging/prod)如何隔离?

使用 Terraform Workspace 或目录分割。推荐后者——每个环境一个独立目录,共享模块但使用不同的 terraform.tfvars。

一个 Terraform 项目管理所有服务,还是拆分成多个?

初期可以在一起,但规模增长后建议拆分——网络层一个项目,计算层一个项目,应用层一个项目。使用 terraform_remote_state 或 data 源来跨项目引用资源。