Directives pour les piles

Oracle recommande d'adopter les meilleures pratiques Terraform générales pour créer votre modèle Terraform. Toutefois, il existe des normes de pile Marketplace spécifiques à suivre pour publier une pile.

Directives obligatoires

Les directives obligatoires suivantes s'appliquent aux piles répertoriées dans Oracle Cloud Infrastructure Marketplace. Chaque ligne directrice doit être respectée. Avant d'être publié, chaque artefact de pile est validé en fonction de chacune de ces directives.

  1. L'artefact de pile doit être un fichier zip, y compris les fichiers de configuration Terraform et un fichier de schéma.
    • Le fichier zip doit inclure au moins un fichier de configuration (.tf) dans le dossier racine.
    • Le fichier zip doit inclure le fichier de schéma (.yaml) dans le dossier racine.
    • Le fichier zip ne doit pas inclure de fichier d'état Terraform dans le fichier zip. Les fichiers d'état sont gérés par Oracle Resource Manager (ORM). Lorsque les clients lancent une pile, ORM crée et gère les ressources, et le fichier d'état n'est disponible que pour téléchargement.
    • Le fichier zip ne doit pas inclure le dossier de configuration de l'exécution Terraform (.terraform).
  2. La configuration Terraform ne doit utiliser que des images d'instance approuvées ou publiées (publiques ou privées) sur le marché des applications. Il doit avoir un abonnement Marketplace à chacune de ces images. Il doit comporter des références codées en dur à ces images du marché des applications. Pour plus de détails, voir Exemple de configuration Terraform pour un abonnement et une utilisation à des images du marché des applications.
  3. Les fichiers binaires ne doivent pas être téléchargés à partir de référentiels externes. Tous les binaires et dépendances doivent être intégrés dans l'image du marché des applications publiée.
  4. Le provisionneur d'exécution distant Terraform ne doit être exécuté que dans le domaine Oracle Cloud Infrastructure. Il ne doit pas télécharger de fichiers sur un serveur distant.
  5. Le code ou les fichiers binaires de tierce partie ne doivent pas être téléchargés à l'aide de cloud-init.
    1. cloud-init est un utilitaire de configuration de démarrage couramment utilisé pour les instances de calcul en nuage. Il accepte la configuration au moyen de mécanismes de données d'utilisateur spécifiés dans la définition des métadonnées sur la ressource oci_core_instance.
    2. Plusieurs formats de données d'utilisateur sont pris en charge par cloud-init. Voir https://cloudinit.readthedocs.io/en/latest/topics/format.html.
    3. Quel que soit le format de données utilisateur, cloud-init NE DOIT PAS être utilisé pour télécharger du code ou du binaire de tierce partie. Tous les fichiers binaires requis lors du processus de lancement de l'instance (amorçage), s'ils ne sont pas disponibles dans l'image, doivent être téléchargés par un processus (script) au four dans le cadre de la distribution de l'image, non injectés au moyen de cloud-init (par exemple, en tirant parti de wget).
    4. Toutefois, un modèle cloud-init peut être configuré pour que les clients puissent l'utiliser dans certains scénarios particuliers, par exemple pour importer un fichier de clé de licence ou un fichier de configuration. Dans ce cas, vous devez fournir une variable dans le code de modèle Terraform pour permettre aux clients d'entrer des données dans le bloc de construction cloud-init, par exemple en tirant parti de la source de données Terraform template_file.
  6. Le fournisseur Terraform doit être Oracle Cloud Infrastructure. Les autres fournisseurs de services en nuage ou les fournisseurs d'applications de tierce partie ne sont pas pris en charge.
  7. Si un module Terraform est utilisé, il doit être chargé à partir de chemins relatifs locaux. Il ne peut pas être chargé à partir d'un référentiel distant.
  8. La configuration Terraform doit utiliser l'authentification du principal d'instance.
  9. Vous devez spécifier les versions Terraform minimale et maximale prises en charge sur lesquelles vous avez testé votre pile.

    • Spécifiez la version Terraform minimale requise dans le format : ~> <major_version>.<minor_version>.<patch_version>.

      Où, patch_version est toujours réglé à 0. Lorsqu'une pile est lancée, le gestionnaire de ressources vérifie le fichier <major_version>.<minor_version> que vous avez défini dans votre code et utilise la version de correctif la plus récente disponible. C'est pourquoi vous devez utiliser le signe ~> au lieu du signe => tout en spécifiant la version minimale requise de Terraform.

      Par exemple, ~> 0.14.0 indique que les versions Terraform prises en charge sont 0.14.0 ou ultérieures.

    • Spécifiez la version Terraform maximale requise dans le format : < <major_version>.<minor_version>.

      Par exemple, < 0.15 indique que les versions Terraform prises en charge sont antérieures à 0,15.

    L'exemple suivant montre comment spécifier les versions Terraform minimale et maximale prises en charge lorsque vous avez testé votre pile uniquement sur Terraform 0.14.

    terraform 
    { required_version = "~> 0.14.0, < 0.15" }

Pour plus d'informations sur Terraform, notamment le fournisseur Oracle Cloud Infrastructure, l'authentification du principal d'instance et le provisionneur d'exécution distant, voir la documentation Terraform sur la configuration du fournisseur. Pour plus d'informations sur les versions prises en charge de Terraform, voir Introduction au fournisseur Terraform dans la documentation sur Oracle Cloud Infrastructure.

Directives de codage pour les configurations Terraform

Les directives suivantes sont recommandées pour les piles répertoriées dans Oracle Cloud Infrastructure Marketplace. Chaque ligne directrice est considérée comme une bonne pratique à suivre si possible.

  • L'artefact de pile doit permettre aux clients de créer toutes les ressources d'infrastructure ou de pointer vers des ressources existantes (réseau, stockage, etc.).
  • Les conventions de dénomination et la mise en forme doivent être respectées :
    • Casier - Utilisez lower_snake_case pour tous les noms. Cela s'applique aux noms de variable, aux noms de ressource, aux noms de module, aux noms de fichier, aux noms d'affichage, etc.
    • Spécification du type de ressource - N'incluez pas le type de ressource ou de source de données dans le nom. Dans Terraform, les ressources et les sources de données sont toujours référencées par <type>.<name>. En tant que tel, il n'est pas nécessaire d'inclure le type dans le nom lui-même.
    • ID vs OCID - Dans Oracle Cloud Infrastructure, id fait généralement référence à un champ qui prend un OCID. Ainsi, les variables doivent utiliser id lors de la référence aux valeurs d'OCID, au lieu d'utiliser ocid.
    • Noms de variable - Les noms de variable des ressources Oracle Cloud Infrastructure doivent généralement utiliser le même nom que celui utilisé pour la ressource Terraform.
    • Noms d'affichage - Les noms d'affichage des ressources Oracle Cloud Infrastructure doivent généralement utiliser le même nom que celui utilisé pour la ressource Terraform.
    • Nommer les variables et les sorties du module - Lors de l'utilisation d'un module, le nom de l'entrée (variables) et des sorties doit être exposé à l'appelant.
    • terraform fmt doit être appliqué à tous les éléments Terraform avant de l'archiver.