Instructions relatives aux piles
Oracle vous recommande d'adopter les meilleures pratiques générales de Terraform pour la création de votre modèle Terraform. Cependant, il existe des normes de pile Marketplace spécifiques à suivre afin de publier une pile.
Lignes directrices obligatoires
Voici des directives obligatoires pour les piles répertoriées dans Oracle Cloud Infrastructure Marketplace. Chaque ligne directrice doit être suivie. Avant la publication, chaque artefact de pile est validé en fonction de chacune de ces directives.
- L'artefact de pile doit être un fichier ZIP contenant 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 devient disponible pour téléchargement uniquement.
- Le fichier ZIP ne doit pas inclure le dossier de configuration d'exécution Terraform
(.terraform).
- Le fichier ZIP doit inclure au moins un fichier de configuration
- La configuration Terraform doit uniquement utiliser des images d'instance approuvées ou publiées (publiques ou privées) sur le Marketplace. Il doit avoir un abonnement Marketplace à chacune de ces images. Il doit comporter une ou plusieurs références codées en dur à ces images Marketplace. Pour plus d'informations, reportez-vous à Exemple de configuration Terraform pour une utilisation et un abonnement d'image Marketplace.
- 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 cuits dans l'image Marketplace publiée.
- Le programme de provisionnement d'exécution distante Terraform doit uniquement être exécuté dans le domaine Oracle Cloud Infrastructure. Il ne doit pas télécharger de fichiers sur un serveur distant.
- Le code tiers ou les fichiers binaires ne doivent pas être téléchargés à l'aide de
cloud-init.
cloud-init
est un utilitaire de configuration de démarrage couramment utilisé pour les instances de calcul cloud. Il accepte la configuration via des mécanismes de données utilisateur spécifiés dans le cadre de la définition des métadonnées sur la ressourceoci_core_instance
.- Plusieurs formats de données utilisateur sont pris en charge par
cloud-init.
Reportez-vous à https://cloudinit.readthedocs.io/en/latest/topics/format.html. - Quel que soit le format des données utilisateur,
cloud-init
NE DOIT PAS être utilisé pour télécharger un code ou un binaire tiers. Tous les fichiers binaires requis pendant le processus de lancement de l'instance (bootstrap), s'ils ne sont pas disponibles dans l'image, doivent être téléchargés par un processus (script) cuit dans le cadre de la distribution d'image, non injecté viacloud-init
(par exemple, en utilisantwget).
) - 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és de licence ou un fichier de configuration. Dans ce cas, vous devez fournir une variable dans le code de modèle Terraform afin de permettre aux clients d'entrer certaines données dans le bloc de constructioncloud-init
, par exemple, en tirant parti de la source de donnéestemplate_file
Terraform.
- Le fournisseur Terraform doit être Oracle Cloud Infrastructure. Les autres fournisseurs cloud ou les fournisseurs d'applications tiers ne sont pas pris en charge.
- 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.
- La configuration Terraform doit utiliser l'authentification de principal d'instance.
-
Vous devez indiquer les versions minimale et maximale prises en charge de Terraform sur lesquelles vous avez testé la pile.
- Indiquez la version minimale requise de Terraform au format suivant :
~> <major_version>.<minor_version>.<patch_version>
.Où,
patch_version
est toujours défini sur 0. Lorsqu'une pile est lancée, Resource Manager vérifie le fichier<major_version>.<minor_version>
que vous avez défini dans votre code et utilise la version de patch la plus récente disponible. C'est pourquoi vous devez utiliser le signe~>
à la place du signe=>
tout en indiquant la version minimale requise de Terraform.Par exemple,
~> 0.14.0
indique que les versions de Terraform prises en charge sont 0.14.0 ou ultérieures. - Indiquez la version maximale requise de Terraform au format suivant :
< <major_version>.<minor_version>
.Par exemple,
< 0.15
indique que les versions de Terraform prises en charge sont antérieures à 0.15.
L'exemple suivant montre comment indiquer les versions minimale et maximale prises en charge de Terraform lorsque vous avez testé la pile uniquement sur Terraform 0.14.
terraform { required_version = "~> 0.14.0, < 0.15" }
- Indiquez la version minimale requise de Terraform au format suivant :
Pour plus d'informations sur Terraform, notamment le fournisseur Oracle Cloud Infrastructure, l'authentification de principal d'instance et le provisionneur d'exécution distante, reportez-vous à la documentation Terraform relative à la configuration de fournisseur. Pour plus d'informations sur les versions prises en charge de Terraform, reportez-vous à Introduction au fournisseur Terraform dans la documentation Oracle Cloud Infrastructure.
Instructions de codage pour les configurations Terraform
Les directives suivantes sont recommandées pour les piles répertoriées dans Oracle Cloud Infrastructure Marketplace. Chaque directive est considérée comme une meilleure pratique qui devrait être suivie 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 le formatage doivent être respectés :
- Boîtier : utilisez
lower_snake_case
pour tous les noms. Cela s'applique aux noms de variable, de ressource, de module, de fichier, 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>.
Ainsi, il n'est pas nécessaire d'inclure le type dans le nom lui-même. - ID et OCID : dans Oracle Cloud Infrastructure,
id
fait généralement référence à un champ qui prend un OCID. En tant que telles, les variables doivent utiliserid
lorsqu'elles font référence à des valeurs d'OCID, au lieu d'utiliserocid
. - 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.
- Variables et sorties de module de dénomination - Lors de l'utilisation d'un module, la dénomination de l'entrée (variables) et des sorties doit être exposée à l'appelant.
terraform fmt
doit être appliqué à tous les Terraform avant d'être réinséré.
- Boîtier : utilisez