O Resource Orchestration Service (ROS) oferece execução gerenciada do Terraform. Este tópico aborda métodos de desenvolvimento e melhores práticas para escrever código Terraform no ROS, destinado a usuários que já conhecem os conceitos do Terraform no ROS.
Métodos de desenvolvimento
Escolha o método de desenvolvimento mais adequado ao seu fluxo de trabalho:
Use um ambiente local.
Use a ferramenta de depuração online do Terraform. Esta opção suporta apenas recursos da Alibaba Cloud.
Crie uma stack do Terraform no console do ROS e, em seguida, crie ou atualize a stack conforme necessário. Para mais informações, consulte Create a Terraform stack, Continue to create a stack e Update a stack.
Sugestões de desenvolvimento
-
Não declare o provider alicloud no arquivo .tf.
O ROS fornece um provider alicloud padrão que utiliza um par de AccessKey temporário ou uma credencial do Security Token Service (STS), além da região da stack da conta atual da Alibaba Cloud. O uso do provider padrão:
Simplifica o desenvolvimento, aumenta a segurança e reduz o risco de vazamento de pares de AccessKey.
Mantém recursos e stacks na mesma conta e região, facilitando o gerenciamento centralizado e a integração.
-
Aprimora funcionalidades que exigem que recursos e stacks compartilhem a mesma conta e região, como consultas de preço, tags de sistema, propagação de tags personalizadas da stack, propagação de grupos de recursos da stack e detecção de riscos.
NotaSe as stacks e os grupos de stacks pertencerem a contas e regiões diferentes, consultas de preço, tags de sistema, propagação de tags personalizadas da stack e detecção de riscos são suportados em cenários específicos.
Caso as stacks e os grupos de stacks estejam em regiões distintas, a propagação de grupos de recursos da stack é suportada em cenários específicos.
-
Salve o código local em arquivos cujos nomes terminem com .debug.tf.
Quando o código Terraform é executado no ROS, o service ignora arquivos .debug.tf e os exclui da orquestração. Já em ambiente local, o Terraform processa esses arquivos normalmente. Por exemplo, crie um arquivo provider.debug.tf para configure o provider alicloud. Ao usar esse arquivo para desenvolver código localmente, a configuração entra em vigor e cria recursos na região china (Hong Kong). Ao criar uma stack no ROS, o arquivo é ignorado e os recursos são criados na região da stack. Conteúdo de exemplo para provider.debug.tf:
variable "region" { type = string default = "cn-hongkong" } provider "alicloud" { region ="${var.region}" } -
Fixe a versão do provider.
O Terraform gerenciado pelo ROS suporta múltiplas versões de provider após o lançamento do Aliyun::Terraform-v1.0. Fixe a versão do provider para evitar alterações disruptivas causadas por atualizações upstream e manter a estabilidade. Código de exemplo:
terraform { required_providers { alicloud = { source = "aliyun/alicloud" version = "1.140.0" } } }Para verificar as versões disponíveis do provider, consulte a coluna Provider version em ROS version support.
-
Use Aliyun::Terraform-v1.0 ou superior.
As versões Aliyun::Terraform-v0.12 e Aliyun::Terraform-v0.15 são mantidas apenas para fins de compatibilidade. As versões de provider e os recursos dessas releases não recebem mais atualizações.
-
Prefira parâmetros do ROS a arquivos .tfvars para passar valores de variáveis.
Os parâmetros do ROS oferecem as seguintes vantagens em relação aos arquivos .tfvars:
Menos modificações no modelo — na maioria dos casos, basta atualize os valores dos parâmetros.
Mapeamento direto com as variáveis, visível no console do ROS. Com arquivos .tfvars, os valores das variáveis podem ser sobrescritos silenciosamente, gerando discrepâncias entre os valores reais e o que o console exibe.
Para mais informações, consulte (Optional) Parameters.
-
Utilize pseudoparâmetros para obter informações da stack.
Para mais detalhes, consulte (Optional) Parameters. Por exemplo, defina a variável ALIYUN__Region no seu arquivo .tf e referencie-a com var.ALIYUN__Region para obter a região da stack. Código de exemplo:
variable "ALIYUN__Region" { type = string default = "cn-hongkong" } -
Defina as variáveis com precisão.
O ROS converte automaticamente variáveis do Terraform em parâmetros do ROS. Variáveis bem definidas geram resultados de conversão precisos. Para mais informações, consulte (Optional) Parameters.
Sempre especifique o parâmetro type para cada variável. Sem um tipo definido, o ROS pode tratar a variável como string e passá-la assim ao Terraform, o que pode causar erro de tipo durante a orquestração.
-
Para variáveis que contenham dados sensíveis, como senhas, defina
sensitive = true.variable "password" { type = string sensitive = true }
-
Use Metadata para controlar a exibição dos parâmetros no console.
Agrupe parâmetros: Para mais informações, consulte Metadata e Use Metadata to group parameters.
-
Oculte parâmetros: Utilize Metadata.ALIYUN::ROS::Interface.Hidden para especificar quais parâmetros devem ficar ocultos no console.
ROSTemplateFormatVersion: '2015-09-01' Description: Creates a simple oss bucket Parameters: BucketName: Type: String Label: Bucket Name Description: en: Bucket name Default: bucketName1 Metadata: ALIYUN::ROS::Interface: Hidden: - BucketName Workspace: ... Consulte restrições de parâmetros: Use ResourcesForParameterConstraints de ALIYUN::ROS::Interface no arquivo .metadata para configure restrições para os parâmetros. Para mais informações, consulte Manually configure parameter constraint query for a Terraform template.
-
Controle o modo de entrada de parâmetros no console.
Parâmetros do ROS: Utilize AssociationProperty e AssociationPropertyMetadata para validar valores automaticamente e especificar opções válidas. Para mais informações, consulte AssociationProperty and AssociationPropertyMetadata e Dynamically select parameter settings in the Resource Orchestration Service console.
-
Variáveis do Terraform: Use o parâmetro description para defina AssociationProperty e AssociationPropertyMetadata para variáveis do Terraform. Para mais informações, consulte (Optional) Parameters. Código de exemplo:
variable "vpc_id" { type = string description = <<EOT { "AssociationProperty": "ALIYUN::ECS::VPC::VPCId", "Description": { "en": "Please search the ID starts with (vpc-xxx)from console-Virtual Private Cloud", }, "Label": { "en": "Existing VPC ID", } } EOT }