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
Marketplace AWS i venditori possono pubblicare offerte di prodotti basati sull'AMI che vengono consegnati agli Marketplace AWS acquirenti utilizzando modelli. AWS CloudFormation L'aggiunta di un CloudFormation modello al prodotto basato su AMI consente agli acquirenti di implementare la soluzione senza dover configurare manualmente le risorse e le dipendenze. È possibile 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 soluzioni AMI singole 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 e funzioni Lambda associati. Inoltre, è necessario includere un diagramma architettonico per ogni modello.
Argomenti
Preparazione del modello CloudFormation
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 AWS CloudFormation console in tutte le versioni Regioni AWS abilitate per il prodotto. Puoi utilizzare lo TaskCat strumento
per testare i tuoi modelli. -
AMIs nel CloudFormation modello deve essere inclusa l'AMI del prodotto che stai pubblicando o un'AMI gestita da AWS come la versione più recente di Amazon Linux 2. Non includere AMI della community o AMI posseduti e condivisi da te o da altre terze parti. Per utilizzare un'AMI gestita da AWS, utilizza parametri pubblici in AWS Systems Manager Parameter Store anziché utilizzare un codice hardware dell'AMI. IDs 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 tutti AZs e AZs vengono mappati in modo diverso per account diversi.
-
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 tua soluzione prevede un cluster di più istanze, prendi in considerazione l'utilizzo di gruppi di collocamento se desideri una bassa latenza di rete, un throughput di rete elevato o entrambi tra le istanze.
-
Per facilitare la revisione da parte del Marketplace AWS team e garantire trasparenza nei confronti del 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 nella pagina dei prodotti server
Quando si specifica la ImageId
proprietà delle risorse che distribuiscono l'AMI su EC2 istanze come AWS::EC2::Instance, e AWS::EC2::LaunchTemplateresources AWS::AutoScaling::LaunchConfiguration, è necessario fare riferimento a un parametro del modello. Il tipo di parametro deve essere unAWS::EC2::Image::Id
, AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
o. String
È possibile assegnare a questo parametro del modello qualsiasi nome di parametro valido. Marketplace AWS copia il modello nei propri bucket Amazon S3 e sostituisce il parametro specificato con un AWS Systems Manager parametro Parameter Store. Quando gli acquirenti implementano il tuo modello, quel parametro viene risolto nell'ID Regione AWS AMI specifico del prodotto pubblicato.
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 EC2 istanze all'interno di uno stack annidato anziché dello stack principale, l'ID AMI deve ereditare dinamicamente il suo valore dallo stack principale. Modifica gli stack root e nidificati in modo che nello stack principale, l'impostazione del valore del parametro del modello abbia la precedenza sull'ID AMI utilizzato in questo stack nidificato.
Requisiti per i dettagli sulle AMI utilizzando il modulo di caricamento del prodotto
Nota
Quando crei un'Amazon Machine Image (AMI) o AMI CloudFormation sulla pagina dei prodotti server
AMIs deve trovarsi in una tabella di mappatura per ogni regione. Il Marketplace AWS team aggiorna gli AMI IDs dopo la clonazione. L'AMI di origine deve trovarsi nella us-east-1
regione. Le altre regioni possono utilizzare i 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 prezzo che utilizzano il modulo di caricamento del prodotto, è consentita solo una stringa fissa per la proprietà nested stackTemplateURL
.
Se il modello include stack nidificati, la TemplateURL
proprietà delle risorse dello stack nidificato deve fare riferimento ai parametri del modello per il nome del bucket Amazon S3, la regione del bucket e il prefisso della chiave dell'oggetto Amazon S3. I nomi dei parametri per il nome del bucket devono essereMPS3BucketName
, il bucket Region deve essere MPS3BucketRegion
e per il prefix della chiave dell'oggetto deve essere. MPS3KeyPrefix
Imposta i valori predefiniti per questi parametri in modo che corrispondano al tuo bucket Amazon S3 in cui sono archiviati i modelli nidificati. Tutti i modelli nidificati devono essere accessibili pubblicamente. Quando invii il modello per la pubblicazione, lo Marketplace AWS copia nei relativi bucket Amazon S3 e modifica i valori predefiniti di questi tre parametri in modo che corrispondano a dove sono archiviate le copie.
Se disponi di 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 S3, della regione del bucket S3 e della chiave oggetto S3 dallo stack principale. Modifica gli stack root e nidificati in modo che nella pila principale, imposti il valore del parametro MPS3BucketName
template e MPS3KeyPrefix
sovrascriva i rispettivi valori nell'URL utilizzato in questo stack nidificato per creare ulteriori stack nidificati. MPS3BucketRegion
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::Interfaceviene utilizzato per definire il modo in cui i parametri vengono raggruppati e ordinati nella AWS CloudFormation console quando gli acquirenti implementano il modello.
Parametri di input del modello
-
I parametri di input del modello non devono includere le AWS credenziali del Marketplace AWS cliente (come password, chiavi pubbliche, chiavi private o certificati).
-
Per i parametri di input sensibili come le password, scegli la
NoEcho
proprietà e abilita un'espressione regolare più forte. Per altri parametri di input, impostate gli input più comuni insieme al testo di supporto appropriato. -
Utilizzate i tipi di AWS CloudFormation parametri per gli input, se disponibili.
-
AWS::CloudFormation::Interface
Da utilizzare 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'accesso alle porte di accesso remoto dalla rete Internet pubblica
-
Intervalli CIDR predefiniti che consentono l'accesso alle porte di connessione del database dalla rete Internet pubblica
-
Password predefinite per utenti o database
-
Parametri di rete e sicurezza
-
Assicurati che la porta SSH (22) o la porta RDP (3389) predefinita 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 (ACLs) e gruppi di sicurezza appropriati.
-
Il modello non può richiedere chiavi di accesso a lungo termine agli utenti o crearle per accedere AWS alle risorse. 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 politiche IAM per concedere il minimo privilegio e abilitare l'accesso in scrittura solo quando assolutamente necessario. Ad esempio, se la tua applicazione richiede solo
DELETE
le operazioni eS3:GET
PUT
, specifica solo quelle azioni. In questo caso si sconsiglia l'uso diS3:*
.
Dopo aver ricevuto il modello, Marketplace AWS convalida la configurazione e le informazioni del prodotto e fornisce feedback per eventuali revisioni richieste.
Diagramma architettonico
È necessario fornire un diagramma architettonico per ogni modello. Per ulteriori informazioni sulla creazione di diagrammi, vedi Cos'è
Il diagramma deve soddisfare i seguenti criteri:
-
Illustra una distribuzione standard su. AWS
-
Descrivi in modo logico dove vengono distribuite le risorse. Ad esempio, risorse come le EC2 istanze Amazon si trovano nella sottorete corretta.
-
Utilizza le icone di AWS prodotto più recenti per ogni prodotto Servizio AWS distribuito tramite il modello. AWS CloudFormation Per scaricare l'attuale set di icone di architettura, consulta AWS Architecture Icons
. -
Includi i metadati per tutti i servizi distribuiti dal AWS CloudFormation modello.
-
Include tutte le reti e VPCs le sottoreti distribuite dal modello. AWS CloudFormation
-
Mostra i punti di integrazione, inclusi gli asset di terze parti APIs e gli asset ibridi locali.
-
I diagrammi devono avere una dimensione di 1100 x 700 pixel. Mantieni le proporzioni originali del diagramma senza allungarle o ritagliarle.
Converti modelli di prodotti esistenti CloudFormation
Nota
Questa sezione è dedicata ai venditori con un'AMI esistente con CloudFormation prodotto che hanno utilizzato il modulo di caricamento del prodotto per pubblicare i propri modelli e che ora desiderano aggiornare tale 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 nella pagina dei prodotti server
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 | Esperienza self-service | |
---|---|---|
Valore della ImageId proprietà in rapporto alle risorse EC2 |
Fa riferimento a una tabella di mappatura per il tuo ID AMI. Per ulteriori informazioni, consulta Requisiti per i dettagli sulle AMI utilizzando il modulo di caricamento del prodotto. | Fa riferimento a un parametro 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 modelli di esempio seguenti illustrano un esempio di un 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 del 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" } } } } }