View a markdown version of this page

Añade CloudFormation plantillas a tu producto - AWS Marketplace

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Añade CloudFormation plantillas a tu producto

AWS Marketplace los vendedores pueden publicar AMI-based los productos que se entregan a AWS Marketplace los compradores mediante AWS CloudFormation plantillas. Añadir una CloudFormation plantilla a tu AMI-based producto permite a los compradores implementar tu solución sin tener que configurar manualmente los recursos y las dependencias. Puede utilizar las plantillas para definir un clúster o una arquitectura distribuida para los productos, o para seleccionar diferentes combinaciones de AMI o configuraciones de productos. Las soluciones AMI individuales pueden contener un máximo de tres CloudFormation plantillas.

Las CloudFormation plantillas se pueden configurar para ofrecer una única imagen de máquina de Amazon (AMI) con los archivos de configuración y las funciones Lambda asociados. Además, debe incluir un diagrama de arquitectura para cada plantilla.

Preparar la plantilla CloudFormation

Para crear CloudFormation las plantillas, debe cumplir los requisitos previos y proporcionar los parámetros de entrada y seguridad necesarios. Cuando envíes la CloudFormation plantilla, sigue las directrices de las siguientes secciones.

Requisitos previos de la plantilla

  • Comprueba que la plantilla se haya lanzado correctamente a través de la CloudFormation consola en la que Regiones de AWS esté habilitada para tu producto. Puedes usar la TaskCat herramienta para probar tus plantillas.

  • Las AMI incluidas en la CloudFormation plantilla deben ser la AMI del producto que está publicando o una AWS-managed AMI, como la última versión de Amazon Linux 2. No incluya ninguna AMI de la comunidad ni ninguna AMI de su propiedad o de cualquier otro tercero que la comparta. Para usar una AWS-managed AMI, utilice parámetros públicos en el almacén de parámetros de AWS Systems Manager en lugar de codificar los ID de AMI de forma rígida. Por ejemplo, en la CloudFormation plantilla en la que se especifica el ID de la AMI, se utiliza una referencia ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}' dinámica.

  • Cree las plantillas de modo que no dependan de que se utilice en una zona de disponibilidad (AZ) concreta. No todos los clientes tienen acceso a todas las zonas de disponibilidad y estas se mapean de forma distinta para las distintas cuentas.

  • Si está creando una solución en clúster con un grupo de escalado automático, le recomendamos que tenga en cuenta un evento de escalado. El nodo nuevo debería unirse automáticamente al clúster en ejecución.

  • Recomendamos que utilice un grupo de escalado automático incluso para los productos de un solo nodo.

  • Si su solución incluye un clúster de varias instancias, considere la posibilidad de utilizar grupos de ubicación para conseguir una baja latencia de red, un elevado desempeño de red o ambos entre las distintas instancias.

  • Para facilitar la revisión por parte del AWS Marketplace equipo y de forma transparente para el cliente, te recomendamos que añadas comentarios en tu UserData sección.

Requisitos para los detalles de la AMI

nota

Si creas una imagen de máquina de Amazon (AMI) o AMI con CloudFormation la página de productos del servidor del portal del vendedor y se te pide que descargues el formulario de carga del producto, consulta Requisitos para los detalles de la AMI mediante el formulario de carga de productos en su lugar.

Al especificar la ImageId propiedad de los recursos que implementan tu AMI en instancias EC2, como los recursos de AWS: :EC2: :Instance,:: y AWS: :EC2 AWS::AutoScaling:: LaunchConfiguration, y AWS: :EC2:: LaunchTemplate resources, debes hacer referencia a un parámetro de plantilla. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html El tipo de parámetro debe ser: AWS::EC2::Image::Id, AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> o String.

Puede asignar a este parámetro de plantilla cualquier nombre de parámetro válido. AWS Marketplace copia la plantilla en sus propios buckets de Amazon S3 y reemplaza el parámetro especificado por un AWS Systems Manager parámetro de almacén de parámetros. AWS Marketplace también actualiza la descripción y el texto de la restricción para que los compradores que están implementando la plantilla tengan claro cuál es el valor correcto. Cuando los compradores implementan su plantilla, ese parámetro se convierte en el ID de AMI específico de Región de AWS del producto publicado.

Los siguientes ejemplos de plantillas ilustran la propiedad de ImageId que hace referencia a los parámetros de la plantilla mediante la función intrínseca Ref

Ejemplo de YAML:

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

Ejemplo de JSON:

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

Si implementa instancias de EC2 dentro de una pila anidada en lugar de en la pila raíz, el ID de AMI debe heredar dinámicamente su valor a partir de la pila raíz. Edite las pilas raíz y anidadas para que, en la pila raíz, al establecer el valor del parámetro de la plantilla, se anule el ID de AMI utilizado en esta pila anidada.

Requisitos para los detalles de la AMI mediante el formulario de carga de productos

nota

Si creas una imagen de máquina de Amazon (AMI) o AMI con CloudFormation la página de productos del servidor del portal del vendedor y no se te pide inmediatamente que descargues el formulario de carga del producto, consulta Requisitos para los detalles de la AMI en su lugar.

Las AMI deben estar en una tabla de asignación para cada región. El AWS Marketplace equipo actualiza los ID de AMI después de clonarlos. La AMI de origen debe estar en la región us-east-1. Las demás regiones pueden usar marcadores de posición.

Ejemplo de 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

Requisitos para las plantillas de pilas anidadas

nota

Esta sección solo se aplica a los modelos de precios que no utilizan el formulario de carga de productos. Para los modelos de precios que utilizan el formulario de carga de productos, solo se permite una cadena fija para la propiedad de TemplateURL de pila anidada.

Si su plantilla incluye pilas anidadas, la propiedad de TemplateURL de los recursos de estas pilas debe hacer referencia a los parámetros de la plantilla para el nombre del bucket de Amazon S3, la región del bucket y el prefijo de clave de objeto de Amazon S3. Los nombres de los parámetros del nombre del bucket deben ser MPS3BucketName, la región del bucket debe ser MPS3BucketRegion y el prefijo de la clave del objeto debe ser MPS3KeyPrefix.

Establezca los valores predeterminados de estos parámetros para que se correspondan con el bucket de Amazon S3 en el que se almacenan las plantillas anidadas. Todas las plantillas anidadas deben ser accesibles públicamente. Cuando envía la plantilla para su publicación, la AWS Marketplace copia en sus propios buckets de Amazon S3 y modifica las propiedades de esos tres parámetros para establecer el valor predeterminado y el valor permitido para que coincidan con el lugar donde están almacenadas las copias. AWS Marketplace también actualiza la descripción y el texto de las restricciones para que los compradores que están implementando la plantilla sepan con claridad cuáles son los valores correctos.

Si tiene varios niveles de pilas anidadas, todas las pilas anidadas que creen pilas adicionales de este tipo deben configurarse de manera que la propiedad de TemplateURL herede dinámicamente los valores del nombre del bucket de Amazon S3, la región del bucket de Amazon S3 y la clave de objeto de Amazon S3 de la pila raíz. Edite las pilas raíz y anidadas para que, en la pila raíz, al definir el valor del parámetro de plantilla MPS3BucketName, MPS3BucketRegion y MPS3KeyPrefix se sobrescriban sus valores respectivos en la URL utilizada en esta pila anidada para, así, crear pilas adicionales de este tipo.

Los siguientes ejemplos de plantillas ilustran la propiedad de TemplateURL que hace referencia a los parámetros de la plantilla mediante la función intrínseca Fn::Sub.

Ejemplo de 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

Ejemplo de 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 se usa para definir cómo se agrupan y ordenan los parámetros en la AWS CloudFormation consola cuando los compradores implementan tu plantilla.

Parámetros de entrada de la plantilla

  • Los parámetros de entrada de la plantilla no deben incluir las AWS credenciales del AWS Marketplace cliente (como contraseñas, claves públicas, claves privadas o certificados).

  • Para los parámetros de entradas confidenciales como las contraseñas, elija la propiedad NoEcho y habilite expresiones regulares más restrictivas. Para los demás parámetros de entrada, establezca las entradas más comunes junto con texto de ayuda adecuado.

  • Utilice tipos de CloudFormation parámetros para las entradas cuando estén disponibles.

  • Utilice AWS::CloudFormation::Interface para agrupar y clasificar los parámetros de entrada.

  • No establezca ningún valor predeterminado para los siguientes parámetros de entrada:

    nota

    Los clientes deben proporcionarlos como parámetros de entrada.

    • Intervalos de CIDR predeterminados que permiten la entrada a los puertos de acceso remoto desde la Internet pública

    • Intervalos de CIDR predeterminados que permiten la entrada a los puertos de conexión de la base de datos desde la Internet pública

    • Contraseñas predeterminadas para usuarios o bases de datos

Parámetros de seguridad y de red

  • Asegúrese de que el puerto predeterminado SSH (22) o RDP (3389) no esté abiertos a 0.0.0.0.

  • En lugar de utilizar la nube virtual privada (VPC) predeterminada, recomendamos que cree una VPC con las listas de control de acceso (ACL) y los grupos de seguridad adecuados.

  • Tu plantilla no puede solicitar claves de acceso a largo plazo a los usuarios ni crearlas para acceder a AWS los recursos. Si tu aplicación AMI requiere acceso a los AWS servicios de la cuenta del comprador, debe usar las funciones de IAM para Amazon EC2.

  • Establezca las políticas y los roles de IAM para conceder los privilegios mínimos y habilite el acceso de escritura solo cuando sea absolutamente necesario. Por ejemplo, si la aplicación solo necesita las operaciones S3:GET, PUT y DELETE, especifique únicamente dichas acciones. No recomendamos el uso de S3:* en este caso.

Una vez recibida la plantilla, AWS Marketplace valida la configuración y la información del producto y proporciona comentarios sobre las revisiones necesarias.

Diagrama de arquitectura

Debe proporcionar un diagrama de arquitectura para cada plantilla. Para obtener más información sobre la creación de diagramas, consulte ¿Qué es diagramación de la arquitectura?

El diagrama debe cumplir los siguientes criterios:

  • Ilustre una implementación estándar en. AWS

  • Describir de forma lógica dónde se implementan los recursos. Por ejemplo, recursos como las instancias de Amazon EC2 están en la subred correcta.

  • Utilice los iconos de AWS producto más actuales para cada uno de los productos Servicio de AWS implementados a través de la CloudFormation plantilla. Para descargar el conjunto actual de iconos de arquitectura, consulte AWS Architecture Icons.

  • Incluya los metadatos de todos los servicios implementados por la CloudFormation plantilla.

  • Incluya todas las redes, VPC y subredes implementadas por la CloudFormation plantilla.

  • Mostrar los puntos de integración, incluidos los activos de terceros, las API y los recursos híbridos en las instalaciones.

  • Los diagramas deben tener un tamaño de 1100 x 700 píxeles. Deben mantenerse las proporciones originales del diagrama sin estirar ni recortar.

Convierte CloudFormation plantillas de productos existentes

nota

Esta sección está dirigida a los vendedores que ya tienen una AMI con un CloudFormation producto y que han utilizado el formulario de carga de productos para publicar sus plantillas y ahora quieren actualizar esa plantilla sin utilizar el formulario de carga de productos. Si vas a publicar un producto nuevo, consulta Cómo preparar tus CloudFormation plantillas.

Si creas una imagen de máquina de Amazon (AMI) o una AMI con la CloudFormation página de productos del servidor del portal del vendedor y se te pide que descargues el formulario de carga del producto, consultaRequisitos para los detalles de la AMI mediante el formulario de carga de productos.

Si quieres utilizar la experiencia de autoservicio para actualizar un producto existente que anteriormente utilizaba el formulario de carga de productos para su publicación, debes realizar cambios en la CloudFormation plantilla actual.

En la siguiente tabla se describe la diferencia entre usar el formulario de carga de productos y la experiencia de autoservicio:

Formularios de carga de productos Self-service experiencia
Valor de la propiedad de ImageId de los recursos de EC2 Hace referencia a una tabla de asignación para su ID de AMI. Para obtener más información, consulte Requisitos para los detalles de la AMI mediante el formulario de carga de productos. Hace referencia a un parámetro de plantilla para su ID de AMI. Para obtener más información, consulte Requisitos para los detalles de la AMI.
Valor de la propiedad de TemplateURL de las pilas anidadas Debe ser una cadena fija y no puede usar funciones intrínsecas. Puede ser dinámico mediante el uso de funciones intrínsecas. Debe hacer referencia a un conjunto de parámetros de plantilla. Para obtener más información, consulte Requisitos para las plantillas de pilas anidadas

Las siguientes plantillas de ejemplo ilustran un caso de producto existente que utilizó el formulario de carga de productos para publicar la plantilla. En este ejemplo, el ID de AMI es ami-example123456 y hay una plantilla anidada en el bucket S3 de un vendedor en la ubicación https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml.

Ejemplo de YAML publicado con el formulario de carga de productos:

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

Ejemplo de JSON publicado con el formulario de carga de productos:

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

Los siguientes ejemplos de plantillas ilustran los cambios necesarios para utilizar la experiencia de autoservicio a fin de actualizar el producto.

Ejemplo de YAML publicado con la experiencia de autoservicio:

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

Ejemplo de JSON publicado con la experiencia de autoservicio:

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