View a markdown version of this page

Aggiungi CloudFormation modelli al tuo prodotto - AWS Marketplace

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Aggiungi CloudFormation modelli al tuo prodotto

AWS Marketplace i venditori possono elencare AMI-based i prodotti che vengono consegnati agli AWS Marketplace acquirenti utilizzando AWS CloudFormation modelli. L'aggiunta di un CloudFormation modello al AMI-based prodotto consente agli acquirenti di implementare la soluzione senza dover configurare manualmente le risorse e le dipendenze. Puoi utilizzare i modelli per definire un cluster o un'architettura distribuita per i prodotti o per selezionare diverse combinazioni AMI o configurazioni di prodotto. Le singole soluzioni AMI possono contenere un massimo di tre CloudFormation modelli.

I CloudFormation modelli possono essere configurati per fornire una singola Amazon Machine Image (AMI) con file di configurazione associati e funzioni Lambda. Inoltre, è necessario includere un diagramma architettonico per ogni modello.

Preparazione del CloudFormation modello

Per creare i CloudFormation modelli, è necessario soddisfare i prerequisiti del modello e fornire i parametri di input e sicurezza richiesti. Quando invii il CloudFormation modello, utilizza le linee guida nelle sezioni seguenti.

Prerequisiti del modello

  • Verifica che il modello venga avviato correttamente tramite la CloudFormation console in tutte le versioni Regioni AWS abilitate per il tuo prodotto. Puoi utilizzare lo TaskCat strumento per testare i tuoi modelli.

  • Le AMI incluse nel CloudFormation modello devono essere l'AMI del prodotto che stai pubblicando o un' AWS-managed AMI come la versione più recente di Amazon Linux 2. Non includere le AMI della community o le AMI possedute e condivise da te o da altre terze parti. Per utilizzare un' AWS-managed AMI, utilizza i parametri pubblici in AWS Systems Manager Parameter Store anziché gli ID AMI codificati. Ad esempio, all'interno del CloudFormation modello in cui si specifica l'ID AMI, si utilizza un riferimento dinamico. ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}'

  • Crea modelli in modo che non dipendano dall'uso in una particolare zona di disponibilità (AZ). Non tutti i clienti hanno accesso a tutte le AZ e le AZ sono mappate in modo diverso per i diversi account.

  • Se stai creando una soluzione in cluster utilizzando un gruppo Auto Scaling, ti consigliamo di tenere conto di un evento di scaling. Il nuovo nodo dovrebbe unirsi automaticamente al cluster in esecuzione.

  • Anche per i prodotti a nodo singolo, consigliamo di utilizzare un gruppo Auto Scaling.

  • Se la soluzione prevede un cluster di più istanze, valuta la possibilità di utilizzare i gruppi di posizionamento se desideri una bassa latenza di rete, un elevato throughput di rete o entrambe le istanze.

  • Per facilitare la revisione da parte del AWS Marketplace team e garantire trasparenza al cliente, ti consigliamo di aggiungere commenti nella tua sezione. UserData

Requisiti per i dettagli dell'AMI

Nota

Se crei un'Amazon Machine Image (AMI) o AMI con CloudFormation nella pagina dei prodotti server del portale per i venditori e ti viene richiesto di scaricare il modulo di caricamento del prodotto, consulta Requisiti per i dettagli dell'AMI utilizzando il modulo di caricamento del prodotto invece.

Quando specifichi la ImageId proprietà delle risorse che distribuiscono la tua AMI su istanze EC2 come le risorse AWS: :EC2: :Instance,:: e AWS: :EC2 AWS::AutoScaling:: LaunchConfiguration, devi fare riferimento a un parametro del modello. LaunchTemplate https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html Il tipo di parametro deve essere a AWS::EC2::Image::IdAWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, oString.

È possibile assegnare a questo parametro del modello un nome di parametro valido. AWS Marketplace copia il modello nei propri bucket Amazon S3 e sostituisce il parametro specificato con un AWS Systems Manager parametro Parameter Store. AWS Marketplace aggiorna anche la descrizione e il testo del vincolo per rendere chiaro il valore corretto agli acquirenti che stanno implementando il modello. Quando gli acquirenti implementano il tuo modello, quel parametro si risolve nell'ID AMI Regione AWS specifico del prodotto pubblicato.

I seguenti esempi di modello illustrano la ImageId proprietà che fa riferimento ai parametri del modello utilizzando la funzione intrinseca Ref. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

Esempio YAML:

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

Esempio JSON:

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

Se stai distribuendo istanze EC2 all'interno di uno stack annidato anziché nello stack principale, l'ID AMI deve ereditare dinamicamente il suo valore dallo stack principale. Modifica lo stack principale e quello annidato in modo che nello stack principale, l'impostazione del valore del parametro del modello abbia la precedenza sull'ID AMI utilizzato in questo stack annidato.

Requisiti per i dettagli dell'AMI utilizzando il modulo di caricamento del prodotto

Nota

Se crei un'Amazon Machine Image (AMI) o AMI con CloudFormation nella pagina dei prodotti server del portale per i venditori e non ti viene immediatamente richiesto di scaricare il modulo di caricamento del prodotto, consulta Requisiti per i dettagli dell'AMI invece.

Le AMI devono essere contenute in una tabella di mappatura per ciascuna regione. Il AWS Marketplace team aggiorna gli ID AMI dopo che sono stati clonati. L'AMI di origine deve trovarsi nella us-east-1 Regione. Le altre regioni possono utilizzare segnaposti.

Esempio 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

Requisiti per i modelli di stack annidati

Nota

Questa sezione si applica solo ai modelli di prezzo che non utilizzano il modulo di caricamento del prodotto. Per i modelli di determinazione dei prezzi che utilizzano il modulo di caricamento del prodotto, è consentita solo una stringa fissa per la TemplateURL proprietà nested stack.

Se il modello include stack annidati, la TemplateURL proprietà delle risorse dello stack annidato deve fare riferimento ai parametri del modello per il nome del bucket Amazon S3, la regione del bucket e il prefisso chiave dell'oggetto Amazon S3. I nomi dei parametri per il nome del bucket devono essereMPS3BucketName, la regione del bucket deve essere e il prefisso della chiave dell'oggetto deve essereMPS3BucketRegion. MPS3KeyPrefix

Imposta i valori predefiniti per questi parametri in modo che corrispondano al bucket Amazon S3 in cui sono archiviati i modelli annidati. Tutti i modelli annidati devono essere accessibili al pubblico. Quando invii il modello per la pubblicazione, AWS Marketplace copia i modelli nei relativi bucket Amazon S3 e modifica le proprietà di questi tre parametri in modo che il valore predefinito e il valore consentito siano impostati in base al luogo in cui sono archiviate le copie. AWS Marketplace aggiorna anche il testo della descrizione e del vincolo per rendere chiari i valori corretti agli acquirenti che stanno implementando il modello.

Se hai più livelli di stack nidificati, tutti gli stack nidificati che creano stack nidificati aggiuntivi devono essere configurati in modo che la TemplateURL proprietà erediti dinamicamente i valori del nome del bucket Amazon S3, della regione del bucket Amazon S3 e della chiave oggetto Amazon S3 dallo stack principale. Modifica i tuoi stack root e nidificati in modo che siano nello stack principale, impostando il valore del parametro MPS3BucketName template e MPS3KeyPrefix sovrascrivendo i rispettivi valori nell'URL utilizzato in questo stack nidificato per creare stack nidificati aggiuntivi. MPS3BucketRegion

I seguenti esempi di modello illustrano la TemplateURL proprietà che fa riferimento ai parametri del modello utilizzando la funzione intrinseca Fn: :Sub. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html

Esempio 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

Esempio 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" } } } } }
Nota

AWS::CloudFormation: :Interface viene utilizzato per definire il modo in cui i parametri vengono raggruppati e ordinati nella AWS CloudFormation console quando gli acquirenti distribuiscono il modello.

Parametri di input del modello

  • I parametri di input del modello non devono includere le AWS credenziali del AWS Marketplace cliente (come password, chiavi pubbliche, chiavi private o certificati).

  • Per i parametri di input sensibili come le password, scegliete la NoEcho proprietà e attivate un'espressione regolare più sicura. Per gli altri parametri di input, impostate gli input più comuni insieme al testo di supporto appropriato.

  • Utilizzate i tipi di CloudFormation parametro per gli input, se disponibili.

  • Utilizzato AWS::CloudFormation::Interface per raggruppare e ordinare i parametri di input.

  • Non impostate alcun valore predefinito per i seguenti parametri di input:

    Nota

    I clienti devono fornirli come parametri di input.

    • Intervalli CIDR predefiniti che consentono l'ingresso nelle porte di accesso remoto dalla rete Internet pubblica

    • Intervalli CIDR predefiniti che consentono l'ingresso nelle porte di connessione al database dalla rete Internet pubblica

    • Password predefinite per utenti o database

Parametri di rete e sicurezza

  • Assicurati che la porta SSH (22) o RDP predefinita (3389) non sia aperta a 0.0.0.0.

  • Invece di utilizzare il cloud privato virtuale (VPC) predefinito, ti consigliamo di creare un VPC con elenchi di controllo degli accessi (ACL) e gruppi di sicurezza appropriati.

  • Il tuo modello non può richiedere chiavi di accesso a lungo termine agli utenti o crearle per accedere alle risorse. AWS Se la tua applicazione AMI richiede l'accesso ai AWS servizi nell'account dell'acquirente, deve utilizzare i ruoli IAM per Amazon EC2.

  • Imposta i ruoli e le policy IAM per concedere il privilegio minimo e abilitare l'accesso in scrittura solo quando assolutamente necessario. Ad esempio, se la tua applicazione necessita solo S3:GET di DELETE operazioni, specifica solo quelle azioni. PUT Se ne sconsiglia l'uso S3:* in questo caso.

Dopo aver ricevuto il modello, AWS Marketplace convalida la configurazione e le informazioni del prodotto e fornisce un feedback per eventuali revisioni richieste.

Diagramma architettonico

È necessario fornire un diagramma architettonico per ogni modello. Per ulteriori informazioni sulla creazione di diagrammi, vedi Cos'è la creazione di diagrammi di architettura?

Il diagramma deve soddisfare i seguenti criteri:

  • Illustrare una distribuzione standard su. AWS

  • Rappresenta logicamente dove vengono distribuite le risorse. Ad esempio, risorse come le istanze Amazon EC2 si trovano nella sottorete corretta.

  • Utilizza le icone di AWS prodotto più recenti per ciascuna Servizio AWS distribuzione tramite il modello. CloudFormation Per scaricare l'attuale set di icone di architettura, consulta AWS Architecture Icons.

  • Includi i metadati per tutti i servizi distribuiti dal modello. CloudFormation

  • Includi tutte le reti, i VPC e le sottoreti distribuiti dal modello. CloudFormation

  • Mostra i punti di integrazione, tra cui risorse di terze parti, API e risorse ibride locali.

  • I diagrammi devono avere una dimensione di 1100 x 700 pixel. Mantieni le proporzioni originali del diagramma senza allungare o ritagliare.

Converti CloudFormation modelli di prodotti esistenti

Nota

Questa sezione è destinata ai venditori con un'AMI esistente con un CloudFormation prodotto che ha utilizzato il modulo di caricamento del prodotto per pubblicare i propri modelli e che ora desiderano aggiornare quel modello senza utilizzare il modulo di caricamento del prodotto. Se stai pubblicando un nuovo prodotto, consulta Preparazione dei CloudFormation modelli.

Se crei un'Amazon Machine Image (AMI) o AMI with CloudFormation nella pagina dei prodotti server del portale per i venditori e ti viene richiesto di scaricare il modulo di caricamento del prodotto, consultaRequisiti per i dettagli dell'AMI utilizzando il modulo di caricamento del prodotto.

Se desideri utilizzare l'esperienza self-service per aggiornare un prodotto esistente che in precedenza utilizzava il modulo di caricamento del prodotto per la pubblicazione, devi apportare modifiche al modello esistente CloudFormation.

La tabella seguente descrive la differenza tra l'utilizzo del modulo di caricamento del prodotto e l'esperienza self-service:

Modulo di caricamento del prodotto Self-service esperienza
Valore della ImageId proprietà per le risorse EC2 Fa riferimento a una tabella di mappatura per il tuo ID AMI. Per ulteriori informazioni, consulta Requisiti per i dettagli dell'AMI utilizzando il modulo di caricamento del prodotto. Fa riferimento a un parametro di modello per il tuo ID AMI. Per ulteriori informazioni, consulta Requisiti per i dettagli dell'AMI.
Valore della TemplateURL proprietà per gli stack annidati Deve essere una stringa fissa e non può utilizzare funzioni intrinseche. Può essere dinamico utilizzando funzioni intrinseche. Deve fare riferimento a un set di parametri del modello. Per ulteriori informazioni, consulta Requisiti per i modelli di stack annidati

I seguenti modelli di esempio illustrano un esempio di prodotto esistente che ha utilizzato il modulo di caricamento del prodotto per pubblicare il modello. In questo esempio, l'ID AMI è ami-example123456 e un modello annidato si trova nel bucket S3 di un venditore presso la sede. https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml

Esempio YAML pubblicato con il modulo di caricamento del prodotto:

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

Esempio JSON pubblicato con il modulo di caricamento del prodotto:

{ "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" } } } }

I seguenti esempi di modelli illustrano le modifiche necessarie per utilizzare l'esperienza self-service per aggiornare il prodotto.

Esempio YAML pubblicato con l'esperienza self-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

Esempio JSON pubblicato con l'esperienza self-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" } } } } }