Tous les produits
Search
Centre de documentation

Serverless App Engine:Utiliser Terraform pour gérer la mise à l'échelle automatique dans SAE

Dernière mise à jour :Oct 09, 2026

Dans la gestion des applications distribuées, la mise à l'échelle automatique est une fonctionnalité opérationnelle essentielle. Elle ajuste automatiquement le nombre d'instances en effectuant un scale-out ou un scale-in selon leur état, ce qui améliore l'utilisation des ressources et réduit les coûts associés. Cette rubrique explique comment utiliser Terraform pour activer ou désactiver des politiques de mise à l'échelle automatique pour les applications SAE.

Contexte

Les politiques de mise à l'échelle automatique de SAE incluent les politiques planifiées, celles basées sur des métriques et les politiques hybrides. Pour activer une politique de mise à l'échelle automatique pour une application SAE via Terraform, configurez la ressource alicloud_sae_application_scaling_rule lors de la création de l'application. Pour désactiver la politique, supprimez à la fois la politique de mise à l'échelle automatique et l'application. Pour plus d'informations sur la définition d'une période, consultez la section Utiliser une expression crontab.

Scénarios

  • Une politique de mise à l'échelle automatique planifiée convient aux applications dont les modèles d'utilisation des ressources sont prévisibles et cycliques. Ce type de politique est fréquemment utilisé dans les secteurs de la finance, de la santé, du gouvernement et de l'éducation.

  • Une politique de mise à l'échelle automatique basée sur des métriques s'adresse aux applications confrontées à des pics de trafic soudains ou présentant des schémas de trafic périodiques typiques. Elle est couramment employée dans les industries de l'internet, du jeu vidéo et des réseaux sociaux.

  • Une politique de mise à l'échelle automatique hybride est adaptée aux applications qui combinent des cycles d'utilisation des ressources et subissent des pics de trafic ou des variations périodiques. Cette approche est souvent privilégiée dans les domaines de l'internet, de l'éducation et de la restauration.

Pour en savoir plus, consultez la page Configurer une politique de mise à l'échelle automatique.

Remarque

Vous pouvez exécuter l'exemple de code de cette rubrique en un clic dans Terraform Explorer. Exécuter dans Terraform Explorer

Prérequis

  • Un compte Alibaba Cloud dispose de toutes les autorisations sur ses ressources, ce qui présente un risque de sécurité majeur en cas de fuite des identifiants. Nous vous recommandons d'utiliser un utilisateur RAM et de créer une paire AccessKey pour cet utilisateur. Pour plus d'informations, consultez les pages Créer un utilisateur RAM et Créer une AccessKey.

  • Cette stratégie personnalisée permet à un utilisateur ou à un rôle RAM de gérer le cycle de vie complet des applications Serverless Application Engine (SAE). Les autorisations incluent la création, la mise à jour, la suppression, le démarrage, l'arrêt, le déploiement et le retour arrière des applications, ainsi que la gestion des règles de mise à l'échelle automatique.

    Attachez la stratégie suivante à l'utilisateur RAM que vous utilisez pour exécuter les commandes Terraform. Cette stratégie fournit les autorisations minimales requises pour ce tutoriel. Pour plus d'informations, consultez la page Créer une stratégie personnalisée.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "sae:CreateApplication",
            "sae:UpdateApplication",
            "sae:DeleteApplication",
            "sae:GetApplication",
            "sae:ListApplications",
            "sae:CreateScalingRule",
            "sae:UpdateScalingRule",
            "sae:DeleteScalingRule",
            "sae:GetScalingRule",
            "sae:ListScalingRules",
            "sae:StartApplication",
            "sae:StopApplication",
            "sae:DeployApplication",
            "sae:RollbackApplication"
          ],
          "Resource": "*"
        }
      ]
    }
  • Préparez un environnement d'exécution Terraform. Vous pouvez utiliser l'une des méthodes suivantes pour exécuter Terraform :

    • Resource Orchestration Service (ROS) propose un service géré pour Terraform. Vous pouvez déployer des modèles Terraform directement dans la console ROS. Pour plus d'informations, consultez la page Créer une pile Terraform.

    • Terraform Explorer : Alibaba Cloud met à disposition un environnement d'exécution en ligne pour Terraform. Aucune installation n'est nécessaire. Connectez-vous pour utiliser et tester Terraform en ligne. Cette méthode convient aux scénarios où vous souhaitez essayer et déboguer Terraform rapidement et facilement, sans frais.

    • Créer des ressources avec Terraform : Terraform est préinstallé et les identifiants sont configurés dans Cloud Shell, ce qui vous permet d'exécuter directement les commandes Terraform. Cette solution est idéale lorsque vous avez besoin d'utiliser Terraform rapidement, commodément et à faible coût.

    • Installer et configurer Terraform : Cette méthode est adaptée aux situations où la connexion réseau est mauvaise ou lorsque vous avez besoin d'un environnement de développement personnalisé.

Ressources utilisées

Activer une politique de mise à l'échelle automatique planifiée

Cet exemple montre comment créer une application dans la région Chine (Shenzhen), la déployer à partir d'une image et configurer une politique de mise à l'échelle automatique planifiée pour celle-ci.

La politique de mise à l'échelle automatique est définie comme suit : le cycle est quotidien. Le premier point de déclenchement est fixé à 19 h 35 avec une cible de 5 instances, et le second à 20 h 35 avec une cible de 2 instances. Par conséquent, entre 19 h 35 et 20 h 35, SAE maintient 5 instances pour l'application conformément aux règles configurées. Entre 20 h 35 et 19 h 35 le lendemain, le nombre d'instances de l'application reste à 2.

  1. Créez un dossier de projet nommé terraform pour stocker les ressources Terraform.

  2. Accédez au répertoire du projet en exécutant la commande suivante.

    cd terraform
  3. Créez un fichier de configuration nommé main.tf.

    # Configure the provider.
    provider "alicloud" {
      region = var.region_id
    }
    # Define variables.
    variable "region_id" {
      type    = string
      default = "cn-shenzhen"
    }
    variable "app_name" {
      description = "The name of the application."
      type        = string
      default     = "app-scaling"
    }
    variable "image_url" {
      description = "The address of the image."
      type        = string
      default     = "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-slim:0.9"
    }
    variable "namespace_name" {
      description = "The name of the namespace."
      type        = string
      default     = "demo"
    }
    variable "namespace_id" {
      description = "The ID of the namespace."
      type        = string
      default     = "cn-shenzhen:demo"
    }
    # Create a namespace.
    resource "alicloud_sae_namespace" "default" {
      namespace_description = var.namespace_description
      namespace_id          = var.namespace_id
      namespace_name        = var.namespace_name
    }
    # Create a VPC.
    resource "alicloud_vpc" "default" {
      vpc_name   = var.name
      cidr_block = "10.0.0.0/16"
    }
    # Create a VSwitch.
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "10.0.1.0/24"
      vpc_id       = alicloud_vpc.default.id
      zone_id      = var.zone_id
    }
    # Create a security group.
    resource "alicloud_security_group" "sg" {
      name        = var.name
      description = var.description
      vpc_id      = alicloud_vpc.default.id
    }
    resource "alicloud_security_group_rule" "sg_rule" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = var.port_range
      priority          = 1
      security_group_id = alicloud_security_group.sg.id
      cidr_ip           = var.cidr_ip
    }
    # Configure the application.
    resource "alicloud_sae_application" "default" {
      app_name          = var.app_name
      app_description   = var.app_description
      deploy            = true
      image_url         = var.image_url
      namespace_id      = alicloud_sae_namespace.default.id
      vswitch_id        = alicloud_vswitch.default.id
      vpc_id            = alicloud_vpc.default.id
      security_group_id = alicloud_security_group.sg.id
      package_type      = var.package_type
      timezone          = "Asia/Shanghai"
      replicas          = var.replicas
      cpu               = var.cpu
      memory            = var.memory
    }
    # Configure the auto scaling policy.
    resource "alicloud_sae_application_scaling_rule" "default" {
      app_id              = alicloud_sae_application.default.id
      scaling_rule_name   = "timing-rule"
      scaling_rule_enable = true
      scaling_rule_type   = "timing"
      scaling_rule_timer {
        period = "* * *"
        schedules {
          at_time         = "19:35"
          target_replicas = 5
        }
        schedules {
          at_time         = "20:35"
          target_replicas = 2
        }
      }
    }
    # Define other variables.
    variable "namespace_description" {
      description = "The description of the namespace."
      default     = "A sample namespace for Terraform."
    }
    variable "name" {
      default     = "tf-example"
      description = "The name of the resource."
      type        = string
    }
    variable "description" {
      default     = "Created by Terraform for an example."
      description = "The description of the resource."
      type        = string
    }
    variable "port_range" {
      default     = "1/65535"
      description = "The port range of the security group rule."
      type        = string
    }
    variable "cidr_ip" {
      description = "The CIDR block for the security group rule."
      type        = string
      default     = "0.0.0.0/0"
    }
    variable "zone_id" {
      description = "The ID of the availability zone."
      type        = string
      default     = "cn-shenzhen-e"
    }
    variable "app_description" {
      default     = "An application created by Terraform."
      description = "The description of the application."
      type        = string
    }
    variable "package_type" {
      default     = "Image"
      description = "The package type of the application."
      type        = string
    }
    variable "cpu" {
      default     = 500
      description = "The CPU of the application, in millicores."
      type        = number
    }
    variable "memory" {
      default     = 1024
      description = "The memory of the application, in MB."
      type        = number
    }
    variable "replicas" {
      default     = 1
      description = "The number of replicas for the application."
      type        = number
    }
    variable "port" {
      description = "The port of the SLB instance."
      type        = string
      default     = "8000"
    }
    # Define outputs.
    output "namespace_id" {
      value = alicloud_sae_namespace.default.id
      description = "The ID of the namespace."
    }
    output "app_id" {
      description = "The ID of the application."
      value       = alicloud_sae_application.default.id
    }
    output "app_name" {
      description = "The name of the application."
      value       = var.app_name
    }
    
  4. Initialisez la configuration en exécutant la commande suivante :

terraform init

Si la commande s'exécute correctement, la sortie suivante s'affiche :

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
  1. Créez l'application en exécutant les commandes suivantes dans l'ordre.

  2. Déployez l'application en exécutant la commande suivante. Lorsque vous y êtes invité, saisissez yes et appuyez sur la touche Enter. Attendez la fin de l'exécution de la commande. Si le message suivant apparaît, l'autorisation est terminée.

terraform apply

Sortie attendue :

Apply complete! Resources: 7 added, 0 changed, 0 destroyed.

Outputs:

app_id = "3abab264-xxx"
app_name = "app-scaling"
namespace_id = "cn-shenzhen:demo"
  1. Vérifiez le résultat

Terraform show

Consultez les détails des ressources créées par Terraform en exécutant la commande suivante :

terraform show
# alicloud_sae_application_scaling_rule.default:
resource "alicloud_sae_application_scaling_rule" "default" {
    app_id              = "3abab264-72ba-42xxx"
    id                  = "3abab264-72ba-42xxx:timing-rule"
    scaling_rule_enable = true
    scaling_rule_name   = "timing-rule"
    scaling_rule_type   = "timing"
    scaling_rule_timer {
        period = "* * *"
        schedules {
            at_time         = "19:35"
            target_replicas = 5
        }
        schedules {
            at_time         = "20:35"
            target_replicas = 2
        }
    }
}
...

Console SAE

Vous avez créé avec succès l'application app-scaling dotée d'une politique de mise à l'échelle automatique planifiée. Connectez-vous à la console SAE pour afficher l'état de la politique de mise à l'échelle automatique et des instances de l'application dans l'onglet Instance Deployment Information de la page Basic Information de l'application cible.

Dans le volet de navigation de gauche, choisissez Application Management > Application List. Recherchez l'application cible app-scaling. Vérifiez que son statut Auto Scaling Policy Status est défini sur Enabled (Scheduled) et que le champ Current/Target Instances indique 2/2.

Activer une politique de mise à l'échelle automatique basée sur des métriques

Cet exemple s'appuie sur le fichier main.tf, précédemment configuré avec une politique de mise à l'échelle automatique planifiée. Dans ce fichier, seule la configuration de la ressource alicloud_sae_application_scaling_rule est modifiée pour passer d'une politique planifiée à une politique basée sur des métriques. Les autres configurations restent inchangées. Pour plus d'informations, consultez la section Activer une politique de mise à l'échelle automatique planifiée.

# Configure the auto scaling policy.
resource "alicloud_sae_application_scaling_rule" "default" {
  app_id              = alicloud_sae_application.default.id
  scaling_rule_name   = "metric-rule"
  scaling_rule_enable = true
  scaling_rule_type   = "metric"
  scaling_rule_metric {
    max_replicas = 50
    min_replicas = 3
    metrics {
      metric_type                       = "CPU"
      metric_target_average_utilization = 20
    }
    scale_up_rules {
      step                         = 10
      disabled                     = false
      stabilization_window_seconds = 0
    }
    scale_down_rules {
      step                         = 10
      disabled                     = false
      stabilization_window_seconds = 10
    }
  }
}

Cette politique augmente le nombre d'instances jusqu'à un maximum de 50 lorsque l'utilisation moyenne du CPU dépasse 20 %, et le réduit à un minimum de 3 instances lorsque l'utilisation tombe en dessous de ce seuil.

Remarque

L'exemple de code utilise un seuil d'utilisation du CPU faible afin de faciliter l'observation de l'effet de mise à l'échelle. Dans un environnement de production, définissez des paramètres adaptés à votre charge de travail.

  1. Enregistrez les modifications apportées au fichier main.tf.

terraform init
  1. Créez une application en exécutant les commandes suivantes dans l'ordre.

  2. Déployez l'application en exécutant la commande suivante. Lorsque vous y êtes invité, saisissez yes et appuyez sur la touche Enter. Attendez la fin de l'exécution de la commande. Si le message suivant s'affiche, l'autorisation est terminée.

terraform apply

Terraform détecte la modification de la règle de mise à l'échelle et met à jour la ressource.

alicloud_sae_application_scaling_rule.default: Modifying... [id=...]
alicloud_sae_application_scaling_rule.default: Modifications complete after 1s [id=...]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
  1. Vérifiez le résultat

Terraform show

Exécutez à nouveau la commande terraform show. La sortie indique désormais que la ressource alicloud_sae_application_scaling_rule a été mise à jour avec scaling_rule_type = "metric" et contient un bloc scaling_rule_metric.

terraform show

Exemple de sortie :

# alicloud_sae_application_scaling_rule.default:
resource "alicloud_sae_application_scaling_rule" "default" {
    app_id              = "22238343-81c2-4xxx"
    id                  = "22238343-81c2-4xxx:metric-rule"
    scaling_rule_enable = true
    scaling_rule_name   = "metric-rule"
    scaling_rule_type   = "metric"
    scaling_rule_metric {
        max_replicas = 50
        min_replicas = 3
        metrics {
            metric_target_average_utilization = 20
            metric_type                       = "CPU"
        }
        # ...
    }
}
# ...

Console SAE

L'application app-scaling avec une politique planifiée élastique activée a été créée avec succès. Connectez-vous à la console SAE et consultez l'état d'exécution de la politique de mise à l'échelle automatique et des instances de l'application dans l'onglet Instance Deployment Information de la page Basic Information de l'application cible.

Sur la page Application List, la colonne Auto Scaling Policy Status de l'application app-scaling affiche Enabled (Metric-based).

Activer une politique de mise à l'échelle automatique hybride

Cet exemple s'appuie sur le fichier main.tf configuré avec une politique de mise à l'échelle automatique planifiée. Seul le contenu de la ressource alicloud_sae_application_scaling_rule est modifié pour passer d'une politique planifiée à une politique hybride, tandis que le reste demeure inchangé. Pour les opérations spécifiques, consultez la section Activer une politique de mise à l'échelle automatique planifiée.

Exemple de code :

resource "alicloud_sae_application_scaling_rule" "default" {
  app_id              = alicloud_sae_application.default.id
  scaling_rule_name   = "hybrid-rule"
  scaling_rule_enable = true
  scaling_rule_type   = "mix"
  scaling_rule_timer {
    begin_date = "2024-11-26"
    end_date   = "2024-11-30"
    period     = "* * *"
    schedules {
      at_time         = "19:35"
      target_replicas = 10
    }
    schedules {
      at_time         = "20:35"
      target_replicas = 3
    }
  }
  scaling_rule_metric {
    max_replicas = 40
    min_replicas = 3
    metrics {
      metric_type                       = "CPU"
      metric_target_average_utilization = 20
    }
    scale_up_rules {
      step                         = 10
      disabled                     = false
      stabilization_window_seconds = 0
    }
    scale_down_rules {
      step                         = 10
      disabled                     = false
      stabilization_window_seconds = 10
    }
  }
}

La politique de cet exemple est configurée comme suit :

  • Comportement par défaut (basé sur des métriques) : L'application évolue entre 3 et 40 instances en fonction de l'utilisation du CPU, avec un scale-out lorsque l'utilisation moyenne du CPU dépasse 20 %.

  • Comportement planifié : Entre le 26 novembre 2024 et le 30 novembre 2024, une politique planifiée est prioritaire.

    • De 19 h 35 à 20 h 35, l'application est configurée avec une cible de 10 instances.

    • En dehors de cette fenêtre, la cible est de 3 instances.

Remarque

L'exemple de code utilise un seuil d'utilisation du CPU faible afin de faciliter l'observation de l'effet de mise à l'échelle. Dans un environnement de production, définissez des paramètres adaptés à votre charge de travail.

  1. Enregistrez les modifications apportées au fichier main.tf et exécutez à nouveau terraform apply.

terraform apply
  1. Créez une application en exécutant les commandes suivantes.

  2. Déployez l'application en exécutant la commande suivante. Pendant l'exécution, saisissez yes et appuyez sur Enter lorsque vous y êtes invité. Attendez la fin de l'exécution de la commande. Si les informations suivantes s'affichent, l'autorisation est terminée.

terraform apply

Sortie attendue :

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
  1. Vérifiez le résultat

Terraform show

Exécutez terraform show pour afficher la configuration finale. Le paramètre scaling_rule_type est désormais défini sur mix, et la ressource contient à la fois les blocs scaling_rule_timer et scaling_rule_metric.

terraform show

Exemple de sortie :

# alicloud_sae_application_scaling_rule.default:
resource "alicloud_sae_application_scaling_rule" "default" {
    app_id              = "2fadcbf8-fcbf-455d-xxx"
    id                  = "2fadcbf8-fcbf-455d-xxx:hybrid-rule"
    scaling_rule_enable = true
    scaling_rule_name   = "hybrid-rule"
    scaling_rule_type   = "mix"
    scaling_rule_metric {
        max_replicas = 40
        min_replicas = 3
        # ...
    }
    scaling_rule_timer {
        begin_date = "2024-11-26"
        end_date   = "2024-11-30"
        period     = "* * *"
        # ...
    }
}

Console SAE

Vous avez créé avec succès l'application app-scaling avec une politique de mise à l'échelle automatique planifiée activée. Connectez-vous à la console SAE pour afficher l'état d'exécution de la politique de mise à l'échelle automatique et des instances de l'application dans l'onglet Instance Deployment Information de la page Basic Information de l'application cible.

Accédez à l'onglet Auto Scaling de l'application. Vous pouvez consulter les détails des composants planifiés et basés sur des métriques de la politique hybrid-rule activée.

Supprimer la politique de mise à l'échelle automatique et l'application

Cet exemple utilise l'application app-scaling dans la région Chine (Hangzhou) pour expliquer comment désactiver une politique de mise à l'échelle automatique et supprimer l'application.

  1. Appliquez le fichier de configuration en exécutant la commande suivante dans le répertoire du projet :

    terraform destroy
  2. Sortie attendue :Code completRéférences

    ...
    Destroy complete! Resources: 7 destroyed.

    La politique de mise à l'échelle automatique a été désactivée et l'application app-scaling a été supprimée avec succès.

    Remarque

    Vous pouvez exécuter l'exemple de code de cette rubrique en un clic dans Terraform Explorer. Exécuter dans Terraform Explorer

    # Configure the provider.
    provider "alicloud" {
      region = var.region_id
    }
    # Define variables.
    variable "region_id" {
      type    = string
      default = "cn-shenzhen"
    }
    variable "app_name" {
      description = "The name of the application."
      type        = string
      default     = "app-scaling"
    }
    variable "image_url" {
      description = "The address of the image."
      type        = string
      default     = "registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-slim:0.9"
    }
    variable "namespace_name" {
      description = "The name of the namespace."
      type        = string
      default     = "demo"
    }
    variable "namespace_id" {
      description = "The ID of the namespace."
      type        = string
      default     = "cn-shenzhen:demo"
    }
    # Create a namespace.
    resource "alicloud_sae_namespace" "default" {
      namespace_description = var.namespace_description
      namespace_id          = var.namespace_id
      namespace_name        = var.namespace_name
    }
    # Create a VPC.
    resource "alicloud_vpc" "default" {
      vpc_name   = var.name
      cidr_block = "10.0.0.0/16"
    }
    # Create a VSwitch.
    resource "alicloud_vswitch" "default" {
      vswitch_name = var.name
      cidr_block   = "10.0.1.0/24"
      vpc_id       = alicloud_vpc.default.id
      zone_id      = var.zone_id
    }
    # Create a security group.
    resource "alicloud_security_group" "sg" {
      name        = var.name
      description = var.description
      vpc_id      = alicloud_vpc.default.id
    }
    resource "alicloud_security_group_rule" "sg_rule" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = var.port_range
      priority          = 1
      security_group_id = alicloud_security_group.sg.id
      cidr_ip           = var.cidr_ip
    }
    # Configure the application.
    resource "alicloud_sae_application" "default" {
      app_name          = var.app_name
      app_description   = var.app_description
      deploy            = true
      image_url         = var.image_url
      namespace_id      = alicloud_sae_namespace.default.id
      vswitch_id        = alicloud_vswitch.default.id
      vpc_id            = alicloud_vpc.default.id
      security_group_id = alicloud_security_group.sg.id
      package_type      = var.package_type
      timezone          = "Asia/Shanghai"
      replicas          = var.replicas
      cpu               = var.cpu
      memory            = var.memory
    }
    # Configure the auto scaling policy.
    resource "alicloud_sae_application_scaling_rule" "default" {
      app_id              = alicloud_sae_application.default.id
      scaling_rule_name   = "hybrid-rule"
      scaling_rule_enable = true
      scaling_rule_type   = "mix"
      scaling_rule_timer {
        begin_date = "2024-11-26"
        end_date   = "2024-11-30"
        period     = "* * *"
        schedules {
          at_time         = "19:35"
          target_replicas = 10
        }
        schedules {
          at_time         = "20:35"
          target_replicas = 3
        }
      }
      scaling_rule_metric {
        max_replicas = 40
        min_replicas = 3
        metrics {
          metric_type                       = "CPU"
          metric_target_average_utilization = 20
        }
        scale_up_rules {
          step                         = 10
          disabled                     = false
          stabilization_window_seconds = 0
        }
        scale_down_rules {
          step                         = 10
          disabled                     = false
          stabilization_window_seconds = 10
        }
      }
    }
    # Define other variables.
    variable "namespace_description" {
      description = "The description of the namespace."
      default     = "A sample namespace for Terraform."
    }
    variable "name" {
      default     = "tf-example"
      description = "The name of the resource."
      type        = string
    }
    variable "description" {
      default     = "Created by Terraform for an example."
      description = "The description of the resource."
      type        = string
    }
    variable "port_range" {
      default     = "1/65535"
      description = "The port range of the security group rule."
      type        = string
    }
    variable "cidr_ip" {
      description = "The CIDR block for the security group rule."
      type        = string
      default     = "0.0.0.0/0"
    }
    variable "zone_id" {
      description = "The ID of the availability zone."
      type        = string
      default     = "cn-shenzhen-e"
    }
    variable "app_description" {
      default     = "An application created by Terraform."
      description = "The description of the application."
      type        = string
    }
    variable "package_type" {
      default     = "Image"
      description = "The package type of the application."
      type        = string
    }
    variable "cpu" {
      default     = 500
      description = "The CPU of the application, in millicores."
      type        = number
    }
    variable "memory" {
      default     = 1024
      description = "The memory of the application, in MB."
      type        = number
    }
    variable "replicas" {
      default     = 1
      description = "The number of replicas for the application."
      type        = number
    }
    variable "port" {
      description = "The port of the SLB instance."
      type        = string
      default     = "8000"
    }
    # Define outputs.
    output "namespace_id" {
      value = alicloud_sae_namespace.default.id
      description = "The ID of the namespace."
    }
    output "app_id" {
      description = "The ID of the application."
      value       = alicloud_sae_application.default.id
    }
    output "app_name" {
      description = "The name of the application."
      value       = var.app_name
    }