View a markdown version of this page

Ajoutez CloudFormation des modèles à votre produit - AWS Marketplace

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Ajoutez CloudFormation des modèles à votre produit

AWS Marketplace les vendeurs peuvent répertorier les AMI-based produits livrés aux AWS Marketplace acheteurs à l'aide AWS CloudFormation de modèles. L'ajout d'un CloudFormation modèle à votre AMI-based produit permet à vos acheteurs de déployer votre solution sans avoir à configurer manuellement les ressources et les dépendances. Vous pouvez utiliser les modèles afin de définir un cluster ou une architecture distribuée pour les produits ou de sélectionner différentes combinaisons d'AMI ou configurations de produits. Les solutions AMI uniques peuvent contenir au maximum trois CloudFormation modèles.

Les CloudFormation modèles peuvent être configurés pour fournir une seule Amazon Machine Image (AMI) avec les fichiers de configuration et les fonctions Lambda associés. En outre, vous devez inclure un schéma architectural pour chaque modèle.

Préparation de votre CloudFormation modèle

Pour créer vos CloudFormation modèles, vous devez remplir les conditions requises et fournir les paramètres d'entrée et de sécurité requis. Lorsque vous soumettez votre CloudFormation modèle, suivez les instructions des sections suivantes.

Conditions préalables relatives au modèle

  • Vérifiez que le modèle est lancé correctement via la CloudFormation console si toutes les options sont Régions AWS activées pour votre produit. Vous pouvez utiliser TaskCat cet outil pour tester vos modèles.

  • Les AMI incluses dans votre CloudFormation modèle doivent être soit l'AMI du produit que vous publiez, soit une AWS-managed AMI telle que la dernière version d'Amazon Linux 2. N'incluez aucune AMI communautaire ou AMI détenue et partagée par vous ou un tiers. Pour utiliser une AWS-managed AMI, utilisez les paramètres publics du magasin de paramètres de AWS Systems Manager au lieu de coder en dur les ID d'AMI. Par exemple, dans votre CloudFormation modèle dans lequel vous spécifiez l'ID AMI, vous utilisez une référence dynamiqueImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}'.

  • Créez des modèles de telle façon qu'ils ne dépendent pas de l'utilisation d'une zone de disponibilité spécifique. Les clients n'ont pas tous accès à toutes les zones de disponibilité, et les zones de disponibilité sont mappées différemment pour les différents comptes.

  • Si vous créez une solution en cluster à l'aide d'un groupe Auto Scaling, nous vous recommandons de prendre en compte un événement de dimensionnement. Le nouveau nœud doit rejoindre automatiquement le cluster en cours d'exécution.

  • Même pour les produits à nœud unique, nous vous conseillons d'utiliser un groupe Auto Scaling.

  • Si votre solution nécessite un cluster composé de plusieurs instances, pensez à utiliser des groupes de placement pour obtenir une latence réseau faible, un débit réseau élevé ou ces deux conditions entre les instances.

  • Pour faciliter l'examen par l' AWS Marketplace équipe et faire preuve de transparence pour le client, nous vous recommandons d'ajouter des commentaires dans votre UserData section.

Exigences relatives aux informations relatives à l'AMI

Note

Si vous créez une Amazon Machine Image (AMI) ou une AMI CloudFormation sur la page des produits du serveur du portail vendeur et que vous êtes invité à télécharger le formulaire de chargement du produit, consultez Exigences relatives aux informations relatives à l'AMI à l'aide du formulaire de chargement du produit plutôt.

Lorsque vous spécifiez la ImageId propriété des ressources qui déploient votre AMI sur des instances EC2 telles que AWS : :EC2 : :Instance, : : et AWS AWS::AutoScaling : :EC2 : : LaunchTemplate resources LaunchConfiguration, vous devez faire référence à un paramètre de modèle. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html Le type de paramètre doit être a AWS::EC2::Image::IdAWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, ouString.

Vous pouvez donner à ce paramètre de modèle un nom de paramètre valide. AWS Marketplace copie votre modèle dans ses propres compartiments Amazon S3 et remplace le paramètre spécifié par un AWS Systems Manager paramètre Parameter Store. AWS Marketplace met également à jour la description et le texte des contraintes afin que la valeur correcte soit clairement indiquée aux acheteurs qui déploient le modèle. Lorsque les acheteurs déploient votre modèle, ce paramètre est résolu en fonction de l'ID AMI Région AWS spécifique à votre produit publié.

Les exemples de modèles suivants illustrent la ImageId propriété référençant les paramètres du modèle à l'aide de la fonction intrinsèque Ref.

Exemple YAML :

Parameters: ImageId: Type: AWS::EC2::Image::Id Default: ami-example1234567890 Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: !Ref ImageId

Exemple JSON :

{ "Parameters": { "ImageId": { "Type": "AWS::EC2::Image::Id", "Default": "ami-example1234567890" } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" } } } } }

Si vous déployez des instances EC2 dans une pile imbriquée au lieu de la pile racine, l'ID AMI doit hériter dynamiquement de sa valeur de la pile racine. Modifiez votre pile racine et vos piles imbriquées de telle sorte que, dans la pile racine, la définition de la valeur de votre paramètre de modèle remplace l'ID AMI utilisé dans cette pile imbriquée.

Exigences relatives aux informations relatives à l'AMI à l'aide du formulaire de chargement du produit

Note

Lorsque vous créez une Amazon Machine Image (AMI) ou une AMI CloudFormation sur la page des produits du serveur du portail vendeur et que vous n'êtes pas immédiatement invité à télécharger le formulaire de chargement du produit, consultez Exigences relatives aux informations relatives à l'AMI plutôt.

Les AMI doivent figurer dans une table de mappage pour chaque région. L' AWS Marketplace équipe met à jour les ID AMI après leur clonage. Votre AMI source doit se trouver dans la us-east-1 région. Les autres régions peuvent utiliser des espaces réservés.

Exemple YAML :

Mappings: RegionMap: us-east-1: ImageId: ami-0123456789abcdef0 us-west-1: ImageId: ami-xxxxxxxxxxxxxxxxx eu-west-1: ImageId: ami-xxxxxxxxxxxxxxxxx ap-southeast-1: ImageId: ami-xxxxxxxxxxxxxxxxx Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap - RegionMap - !Ref AWS::Region - ImageId

Exigences relatives aux modèles de pile imbriqués

Note

Cette section s'applique uniquement aux modèles de tarification qui n'utilisent pas le formulaire de chargement du produit. Pour les modèles de tarification qui utilisent le formulaire de chargement du produit, seule une chaîne fixe est autorisée pour la TemplateURL propriété de pile imbriquée.

Si votre modèle inclut des piles imbriquées, la TemplateURL propriété des ressources des piles imbriquées doit faire référence aux paramètres du modèle pour le nom du compartiment Amazon S3, la région du compartiment et le préfixe de la clé d'objet Amazon S3. Les noms des paramètres pour le nom du compartiment doivent êtreMPS3BucketName, la région du compartiment doit êtreMPS3BucketRegion, et pour l'objet, le préfixe de clé doit êtreMPS3KeyPrefix.

Définissez les valeurs par défaut pour ces paramètres afin qu'elles correspondent à votre compartiment Amazon S3 dans lequel vos modèles imbriqués sont stockés. Tous les modèles imbriqués doivent être accessibles au public. Lorsque vous soumettez votre modèle pour publication, vous AWS Marketplace copiez vos modèles dans ses propres compartiments Amazon S3 et modifiez les propriétés de ces trois paramètres pour que la valeur par défaut et la valeur autorisée soient définies de manière à correspondre à l'endroit où les copies sont stockées. AWS Marketplace met également à jour la description et le texte des contraintes pour indiquer clairement les valeurs correctes aux acheteurs qui déploient le modèle.

Si vous avez plusieurs niveaux de piles imbriquées, toutes les piles imbriquées qui créent des piles imbriquées supplémentaires doivent être configurées de manière à ce que la TemplateURL propriété hérite dynamiquement des valeurs du nom du compartiment Amazon S3, de la région du compartiment Amazon S3 et de la clé d'objet Amazon S3 de la pile racine. Modifiez vos piles racine et imbriquées de manière à les placer dans la pile racine, en définissant la valeur du paramètre du modèle MPS3BucketNameMPS3BucketRegion, et MPS3KeyPrefix remplacez leurs valeurs respectives dans l'URL utilisée dans cette pile imbriquée pour créer des piles imbriquées supplémentaires.

Les exemples de modèles suivants illustrent la TemplateURL propriété référençant les paramètres du modèle à l'aide de la fonction intrinsèque Fn : :Sub.

Exemple YAML :

AWSTemplateFormatVersion: '2010-09-09' Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: AWS Marketplace Parameters Parameters: - ImageId - MPS3BucketName - MPS3BucketRegion - MPS3KeyPrefix Parameters: ImageId: Type: AWS::EC2::Image::Id Default: ami-example1234567890 Description: The AMI that will be used to launch EC2 resources. MPS3BucketName: Type: String Default: sellerbucket Description: Name of the S3 bucket for your copy of the nested templates. MPS3BucketRegion: Type: String Default: us-east-1 Description: AWS Region where the S3 bucket for your copy of the nested templates is hosted. MPS3KeyPrefix: Type: String Default: sellerproductfolder/ Description: S3 key prefix that is used to simulate a folder for your copy of the nested templates. Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !Ref ImageId NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Sub https://${MPS3BucketName}.s3.${MPS3BucketRegion}.${AWS::URLSuffix}/${MPS3KeyPrefix}nested-template.yaml

Exemple JSON :

{ "AWSTemplateFormatVersion": "2010-09-09", "Metadata": { "AWS::CloudFormation::Interface": { "ParameterGroups": [ { "Label": { "default": "AWS Marketplace Parameters" }, "Parameters": [ "ImageId", "MPS3BucketName", "MPS3BucketRegion", "MPS3KeyPrefix" ] } ] } }, "Parameters": { "ImageId": { "Type": "AWS::EC2::Image::Id", "Default": "ami-example1234567890", "Description": "The AMI that will be used to launch EC2 resources." }, "MPS3BucketName": { "Type": "String", "Default": "sellerbucket", "Description": "Name of the S3 bucket for your copy of the nested templates." }, "MPS3BucketRegion": { "Type": "String", "Default": "us-east-1", "Description": "AWS Region where the S3 bucket for your copy of the nested templates is hosted." }, "MPS3KeyPrefix": { "Type": "String", "Default": "sellerproductfolder/", "Description": "S3 key prefix that is used to simulate a folder for your copy of the nested templates." } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" } } }, "NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": { "Fn::Sub": "https://${MPS3BucketName}.s3.${MPS3BucketRegion}.${AWS::URLSuffix}/${MPS3KeyPrefix}nested-template.yaml" } } } } }
Note

AWS::CloudFormation: :Interface est utilisée pour définir la façon dont les paramètres sont regroupés et triés dans la AWS CloudFormation console lorsque les acheteurs déploient votre modèle.

Paramètres d'entrée du modèle

  • Les paramètres d'entrée du modèle ne doivent pas inclure les AWS informations d'identification du AWS Marketplace client (telles que les mots de passe, les clés publiques, les clés privées ou les certificats).

  • Pour les paramètres d'entrée sensibles tels que les mots de passe, choisissez la NoEcho propriété et activez une expression régulière plus forte. Pour les autres paramètres de saisie, définissez les entrées les plus courantes ainsi que le texte d'aide approprié.

  • Utilisez des types de CloudFormation paramètres pour les entrées, le cas échéant.

  • Utilisez AWS::CloudFormation::Interface pour regrouper et trier les paramètres d'entrée.

  • Ne définissez aucune valeur par défaut pour les paramètres d'entrée suivants :

    Note

    Les clients doivent les fournir en tant que paramètres d'entrée.

    • Plages CIDR par défaut qui autorisent l'entrée dans les ports d'accès à distance depuis l'Internet public

    • Plages CIDR par défaut qui autorisent l'entrée dans les ports de connexion de base de données depuis l'Internet public

    • Mots de passe par défaut pour les utilisateurs ou les bases de données

Paramètres réseau et de sécurité

  • Assurez-vous que le port SSH par défaut (22) ou le port RDP (3389) ne sont pas ouverts à 0.0.0.0.

  • Au lieu d'utiliser le VPC par défaut, nous vous conseillons de créer un virtual private cloud (VPC) avec les listes de contrôle d'accès (ACL) et groupes de sécurité appropriés.

  • Votre modèle ne peut pas demander des clés d'accès à long terme aux utilisateurs ni les créer pour accéder à AWS des ressources. Si votre application AMI nécessite l'accès aux AWS services du compte de l'acheteur, elle doit utiliser les rôles IAM pour Amazon EC2.

  • Définissez des rôles et des politiques IAM pour accorder le moins de privilèges possible et n'activez l'accès en écriture qu'en cas d'absolue nécessité. Par exemple, si votre application n'a besoin que des actions S3:GET, PUT et DELETE, ne spécifiez que ces actions. Nous déconseillons l'utilisation de S3:* dans ce cas.

Une fois votre modèle reçu, il AWS Marketplace valide la configuration et les informations du produit et fournit des commentaires pour toute révision requise.

Schéma architectural

Vous devez fournir un schéma architectural pour chaque modèle. Pour en savoir plus sur la création de diagrammes, voir Qu'est-ce que la création de diagrammes d'architecture ?

Le schéma doit répondre aux critères suivants :

  • Illustrez un déploiement standard sur AWS.

  • Décrivez logiquement où les ressources sont déployées. Par exemple, les ressources telles que les instances Amazon EC2 se trouvent dans le sous-réseau approprié.

  • Utilisez les icônes de AWS produit les plus récentes pour chacun des produits Service AWS déployés via le CloudFormation modèle. Pour télécharger l'ensemble actuel d'icônes d'architecture, voir Icônes AWS d'architecture.

  • Incluez des métadonnées pour tous les services déployés par le CloudFormation modèle.

  • Incluez tous les réseaux, VPC et sous-réseaux déployés par le CloudFormation modèle.

  • Afficher les points d'intégration, notamment les actifs tiers, les API et les actifs hybrides sur site.

  • Les diagrammes doivent avoir une taille de 1 100 x 700 pixels. Conservez les proportions d'origine du diagramme sans étirer ni recadrer.

Convertir CloudFormation les modèles de produits existants

Note

Cette section est destinée aux vendeurs disposant d'une AMI existante avec un CloudFormation produit qui a utilisé le formulaire de chargement du produit pour publier leurs modèles et qui souhaitent désormais mettre à jour ce modèle sans utiliser le formulaire de chargement du produit. Si vous publiez un nouveau produit, consultez la section Préparation de vos CloudFormation modèles.

Si vous créez une Amazon Machine Image (AMI) ou une AMI CloudFormation sur la page des produits du serveur du portail vendeur et que vous êtes invité à télécharger le formulaire de chargement du produit, consultezExigences relatives aux informations relatives à l'AMI à l'aide du formulaire de chargement du produit.

Si vous souhaitez utiliser l'expérience en libre-service pour mettre à jour un produit existant qui utilisait auparavant le formulaire de chargement du produit pour publier, vous devez apporter des modifications à votre CloudFormation modèle existant.

Le tableau suivant décrit la différence entre l'utilisation du formulaire de chargement du produit et l'expérience en libre-service :

Formulaire de chargement du produit Self-service expérience
Valeur de la ImageId propriété pour les ressources EC2 Fait référence à une table de mappage pour votre ID AMI. Pour de plus amples informations, veuillez consulter Exigences relatives aux informations relatives à l'AMI à l'aide du formulaire de chargement du produit. Fait référence à un paramètre de modèle pour votre ID AMI. Pour de plus amples informations, veuillez consulter Exigences relatives aux informations relatives à l'AMI.
Valeur de la TemplateURL propriété pour les piles imbriquées Il doit s'agir d'une chaîne fixe et ne peut pas utiliser de fonctions intrinsèques. Peut être dynamique en utilisant des fonctions intrinsèques. Doit faire référence à un ensemble de paramètres de modèle. Pour de plus amples informations, consultez Exigences relatives aux modèles de pile imbriqués.

Les exemples de modèles suivants illustrent un exemple de produit existant qui a utilisé le formulaire de chargement du produit pour publier le modèle. Dans cet exemple, l'ID AMI se trouve ami-example123456 et un modèle imbriqué se trouve dans le compartiment S3 du vendeur sur placehttps://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml.

Exemple YAML publié avec le formulaire de chargement du produit :

AWSTemplateFormatVersion: '2010-09-09' Mappings: RegionMap: us-east-1: AMI: ami-example123456 Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap - RegionMap - !Ref AWS::Region - AMI NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml

Exemple JSON publié avec le formulaire de chargement du produit :

{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "AMI": "ami-example123456" } } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "AMI" ] } } }, "NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml" } } } }

Les exemples de modèles suivants illustrent les modifications requises pour utiliser l'expérience en libre-service afin de mettre à jour le produit.

Exemple YAML publié avec l'expérience en libre-service :

AWSTemplateFormatVersion: '2010-09-09' Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: AWS Marketplace Parameters Parameters: - ImageId - MPS3BucketName - MPS3BucketRegion - MPS3KeyPrefix Parameters: ImageId: Type: AWS::EC2::Image::Id Default: ami-example123456 Description: The AMI that will be used to launch EC2 resources. MPS3BucketName: Type: String Default: sellerbucket Description: Name of the S3 bucket for your copy of the nested templates. MPS3BucketRegion: Type: String Default: us-east-1 Description: AWS Region where the S3 bucket for your copy of the nested templates is hosted. MPS3KeyPrefix: Type: String Default: sellerproductfolder/ Description: S3 key prefix that is used to simulate a folder for your copy of the nested templates. Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !Ref ImageId NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: !Sub https://${MPS3BucketName}.s3.${MPS3BucketRegion}.${AWS::URLSuffix}/${MPS3KeyPrefix}nested-template.yaml

Exemple JSON publié avec l'expérience en libre-service :

{ "AWSTemplateFormatVersion": "2010-09-09", "Metadata": { "AWS::CloudFormation::Interface": { "ParameterGroups": [ { "Label": { "default": "AWS Marketplace Parameters" }, "Parameters": [ "ImageId", "MPS3BucketName", "MPS3BucketRegion", "MPS3KeyPrefix" ] } ] } }, "Parameters": { "ImageId": { "Type": "AWS::EC2::Image::Id", "Default": "ami-example123456", "Description": "The AMI that will be used to launch EC2 resources." }, "MPS3BucketName": { "Type": "String", "Default": "sellerbucket", "Description": "Name of the S3 bucket for your copy of the nested templates." }, "MPS3BucketRegion": { "Type": "String", "Default": "us-east-1", "Description": "AWS Region where the S3 bucket for your copy of the nested templates is hosted." }, "MPS3KeyPrefix": { "Type": "String", "Default": "sellerproductfolder/", "Description": "S3 key prefix that is used to simulate a folder for your copy of the nested templates." } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" } } }, "NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": { "Fn::Sub": "https://${MPS3BucketName}.s3.${MPS3BucketRegion}.${AWS::URLSuffix}/${MPS3KeyPrefix}nested-template.yaml" } } } } }