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 mettre en vente des produits basés sur l'AMI qui sont livrés aux AWS Marketplace acheteurs à l'aide AWS CloudFormation de modèles. L'ajout d'un CloudFormation modèle à votre produit basé sur l'AMI 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 un maximum de 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 modèle CloudFormation

Pour créer vos CloudFormation modèles, vous devez répondre aux exigences du modèle 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 correctement lancé via la AWS CloudFormation console et que toutes les options sont Régions AWS activées pour votre produit. Vous pouvez utiliser TaskCat cet outil pour tester vos modèles.

  • AMIs votre CloudFormation modèle doit inclure soit l'AMI du produit que vous publiez, soit une AMI gérée par AWS, telle que la dernière version d'Amazon Linux 2. N'incluez aucune AMI communautaire ou toute AMI détenue et partagée par vous ou par un autre tiers. Pour utiliser une AMI gérée par AWS, utilisez des paramètres publics dans AWS Systems Manager Parameter Store au lieu de coder en dur l'AMI. IDs Par exemple, dans votre CloudFormation modèle dans lequel vous spécifiez l'ID de l'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. Tous les clients n'ont pas accès à tous AZs et AZs sont mappés différemment selon les 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 la révision par l' AWS Marketplace équipe et assurer la transparence pour le client, nous vous recommandons d'ajouter des commentaires dans votre UserDatasection.

Exigences relatives aux détails de 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 des vendeurs et que vous êtes invité à télécharger le formulaire de chargement du produit, consultez Exigences relatives aux détails de 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 EC2 des instances telles que AWS::EC2::Instance, AWS::AutoScaling::LaunchConfiguration, et AWS::EC2::LaunchTemplatedes ressources, vous devez faire référence à un paramètre de modèle. Le type de paramètre doit être un AWS::EC2::Image::IdAWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, ouString.

Vous pouvez nommer ce paramètre de modèle n'importe quel 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. Lorsque les acheteurs déploient votre modèle, ce paramètre est remplacé par 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 EC2 instances dans une pile imbriquée plutôt que dans la pile racine, l'ID d'AMI doit hériter dynamiquement de sa valeur de la pile racine. Modifiez votre pile racine et vos piles imbriquées de manière à ce que, dans la pile racine, la définition de la valeur du paramètre de votre modèle remplace l'ID d'AMI utilisé dans cette pile imbriquée.

Exigences relatives aux détails de l'AMI à l'aide du formulaire de chargement du produit

Note

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

AMIs doit figurer dans une table de mappage pour chaque région. L' AWS Marketplace équipe met à jour l'AMI IDs après son 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ée

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 de pile imbriquée 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 clé d'objet Amazon S3. Les noms de paramètres pour le nom du bucket doivent êtreMPS3BucketName, le bucket Region doit êtreMPS3BucketRegion, et pour le préfixe de clé de l'objet doit être. MPS3KeyPrefix

Définissez les valeurs par défaut de ces paramètres afin qu'elles correspondent à votre compartiment Amazon S3 dans lequel sont stockés vos modèles imbriqués. Tous les modèles imbriqués doivent être accessibles au public. Lorsque vous soumettez votre modèle pour publication, il AWS Marketplace copie vos modèles dans ses propres compartiments Amazon S3 et modifiez les valeurs par défaut de ces trois paramètres pour qu'elles correspondent à l'endroit où les copies sont stockées.

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 S3, de la région du compartiment S3 et de la clé d'objet S3 de la pile racine. Modifiez votre pile racine et vos piles imbriquées de telle sorte que dans la pile racine, définissez la valeur du paramètre MPS3BucketName du modèle 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. MPS3BucketRegion

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::Interfaceest utilisé pour définir la manière 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 d'entrée, définissez les entrées les plus courantes ainsi que le texte d'aide approprié.

  • Utilisez les types de AWS CloudFormation paramètres pour les entrées lorsqu'ils sont disponibles.

  • 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 d'adresses CIDR par défaut qui autorisent l'accès aux ports d'accès à distance depuis l'Internet public

    • Plages d'adresses CIDR par défaut qui autorisent l'accès aux ports de connexion à la 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 cloud privé virtuel (VPC) par défaut, nous vous recommandons de créer un VPC avec des listes de contrôle d'accès (ACLs) et des groupes de sécurité appropriés.

  • Votre modèle ne peut pas demander de clés d'accès à long terme aux utilisateurs ni en créer pour accéder aux AWS 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 de manière à accorder le moins de privilèges possible et à n'autoriser l'accès en écriture que lorsque cela est absolument nécessaire. 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 diagramme doit répondre aux critères suivants :

  • Illustrez un déploiement standard sur AWS.

  • Décrivez de manière logique l'endroit où les ressources sont déployées. Par exemple, les ressources telles que les EC2 instances Amazon se trouvent dans le sous-réseau approprié.

  • Utilisez les icônes de AWS produit les plus récentes pour chaque produit Service AWS déployé via le AWS CloudFormation modèle. Pour télécharger l'ensemble actuel d'icônes d'architecture, reportez-vous à la section Icônes AWS d'architecture.

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

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

  • Affichez les points d'intégration, y compris les actifs tiers APIs 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 ont 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 des vendeurs et que vous êtes invité à télécharger le formulaire de chargement du produit, consultezExigences relatives aux détails de 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 Expérience en libre-service
Valeur de la ImageId propriété par rapport aux EC2 ressources Fait référence à une table de mappage pour votre ID AMI. Pour de plus amples informations, veuillez consulter Exigences relatives aux détails de 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 détails de l'AMI.
Valeur de la TemplateURL propriété pour les piles imbriquées Doit être 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 plus d’informations, consultez Exigences relatives aux modèles de pile imbriquée.

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 de l'AMI est ami-example123456 et un modèle imbriqué se trouve dans le compartiment S3 d'un vendeur à cet emplacementhttps://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" } } } } }