Adición de componentes de aplicación sin servidor - AWS Marketplace

Adición de componentes de aplicación sin servidor

Puede crear un producto que incluya una o varias Imágenes de máquina de Amazon (AMI), entregadas mediante una o varias plantillas de AWS CloudFormation, con componentes sin servidor incorporados en el producto. Por ejemplo, puede crear un producto con una AMI configurada como servidor de controladores y otra AMI configurada como servidor de trabajo, entregada como una pila de AWS CloudFormation. La plantilla de AWS CloudFormation utilizada para crear la pila puede incluir la definición para configurar una función de AWS Lambda activada por un evento en uno de los servidores. Al utilizar este enfoque para diseñar su producto, puede simplificar la arquitectura y facilitar el lanzamiento para los compradores. Este enfoque también permite facilitar la actualización del producto. En estas secciones se muestra cómo crear y ofrecer este tipo de producto.

Para obtener información acerca de la creación de AMI para su producto, consulte Productos basados en AMI en AWS Marketplace. Para obtener información acerca de cómo completar plantillas de AWS CloudFormation para su producto, consulte Entrega de producto basado en AMI mediante AWS CloudFormation.

Al definir la aplicación sin servidor, se utiliza una plantilla de AWS Serverless Application Model (AWS SAM) que se almacena en el AWS Serverless Application Repository. AWS SAM es un marco de trabajo de código abierto para crear aplicaciones sin servidor. Durante la implementación, AWS SAM transforma y amplía la sintaxis de AWS Serverless Application Model para convertirla en sintaxis de AWS CloudFormation. El AWS Serverless Application Repository es un repositorio administrado para aplicaciones sin servidor. Le permite almacenar y compartir aplicaciones reutilizables para que los compradores puedan montar e implementar arquitecturas sin servidor.

nota
  • AWS Marketplace revisa y valida el producto antes de que se cree el listado. Si hay algún problema que deba resolver antes de que aparezca la oferta, le enviaremos un correo electrónico.

  • A la hora de cumplir con una suscripción, copiamos las AMI, las aplicaciones sin servidor y las plantillas de AWS CloudFormation en un repositorio propiedad de AWS Marketplace en cada Región de AWS. Cuando un comprador se suscribe a su producto, le proporcionamos acceso y también se lo notificamos cuando actualice el software.

Paso 1: creación de una aplicación sin servidor

El primer paso consiste en empaquetar las funciones de AWS Lambda que se utilizan para crear la aplicación sin servidor. Su aplicación es una combinación de funciones, fuentes de eventos y otros recursos de Lambda que se combinan para realizar tareas. Una aplicación sin servidor puede ser tan sencilla como una función de Lambda o contener varias funciones con otros recursos, como API, bases de datos y mapeos de orígenes de eventos.

Utilice el AWS SAM para definir un modelo para la aplicación sin servidor. Para obtener descripciones de los nombres y tipos de propiedad, consulte AWS::Serverless::Application en AWSLabs en GitHub. A continuación se muestra un ejemplo de una plantilla de AWS SAM con una única función de Lambda y función de AWS Identity and Access Management (IAM).

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example of SAM template with Lambda function and IAM role Resources: SampleFunction: Type: AWS::Serverless::Function Properties: Handler: 'com.sampleproject.SampleHandler::handleRequest' Runtime: java8 CodeUri: 's3://amzn-s3-demo-bucket/2EXAMPLE-1234-4b12-ac37-515EXAMPLEe5-lambda.zip' Description: Sample Lambda function Timeout: 120 MemorySize: 1024 Role: Fn::GetAtt: [SampleFunctionRole, Arn] # Role to execute the Lambda function SampleFunctionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: "Allow" Principal: Service: - "lambda.amazonaws.com" Action: "sts:AssumeRole" ManagedPolicyArns: - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" Policies: - PolicyName: SFNXDeployWorkflowDefinitionPolicy PolicyDocument: Statement: - Effect: "Allow" Action: - "s3:Get*" Resource: "*" RoleName: "SampleFunctionRole"

Paso 2: publicación de la aplicación en el repositorio

Para publicar una aplicación, primero hay que cargar su código. Almacene los artefactos de código (por ejemplo, funciones de Lambda, scripts y archivos de configuración) en un bucket de Amazon S3 propiedad de su cuenta. Al cargar la aplicación, esta se establece inicialmente en privada, lo que significa que solo está disponible para la Cuenta de AWS que la creó. Debe crear una política de IAM que conceda permisos de AWS Serverless Application Repository para obtener acceso a los artefactos que ha cargado.

Para publicar la aplicación sin servidor en el repositorio de aplicaciones sin servidor
  1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. Elija el bucket de Amazon S3 que usó para empaquetar su aplicación.

  3. Elija la pestaña Permissions (Permisos).

  4. Elija Bucket Policy (Política de bucket).

  5. Copie y pegue la siguiente declaración de política de ejemplo.

    nota

    La declaración de política de ejemplo generará un error hasta que los valores de aws:SourceAccount y Resource se actualicen en los pasos siguientes.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "serverlessrepo.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition" : { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
    1. Sustituya amzn-s3-demo-bucket en el valor de la propiedad de Resource por el nombre de su bucket.

    2. Sustituya 123456789012 en el elemento de Condition por su ID de Cuenta de AWS. El elemento de Condition garantiza que AWS Serverless Application Repository solo tenga permiso para acceder a las aplicaciones especificadas Cuenta de AWS.

  6. Seleccione Guardar.

  7. Abra la consola de AWS Serverless Application Repository en https://console.aws.amazon.com/serverlessrepo.

  8. En la página My Applications (Mis aplicaciones), elija Publish application (Publicar aplicación).

  9. Complete los campos obligatorios y todos los campos opcionales, según corresponda. Los campos obligatorios son:

    • Nombre de la aplicación

    • Autor

    • Descripción

    • Source code URL (URL de código fuente)

    • SAM template (Plantilla de SAM)

  10. Elija Publish application (Publicar aplicación).

Para publicar versiones posteriores de la aplicación
  1. Abra la consola de AWS Serverless Application Repository en https://console.aws.amazon.com/serverlessrepo.

  2. En el panel de navegación, en My Applications (Mis aplicaciones), elija la aplicación.

  3. Elija Publicar nueva versión.

Para obtener más información, consulte Publicación de aplicaciones sin servidor mediante la CLI de AWS SAM.

Paso 3: creación de la plantilla de CloudFormation

Para crear plantillas de CloudFormation, debe cumplir los requisitos previos de plantilla y proporcionar la entrada y los parámetros de seguridad necesarios. Para obtener más información, consulte Anatomía de la plantilla en la Guía del usuario de AWS CloudFormation.

En la plantilla de CloudFormation, puede hacer referencia a la aplicación sin servidor y a su AMI. También puede utilizar plantillas de CloudFormation anidadas y hacer referencia a aplicaciones sin servidor tanto en la plantilla raíz como en las plantillas anidadas. Para hacer referencia a la aplicación sin servidor, utilice la plantilla de AWS SAM. Puede generar automáticamente la plantilla de AWS SAM para su aplicación desde AWS Serverless Application Repository. La siguiente es una plantilla de ejemplo.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An example root template for a SAR application Resources: SampleSARApplication: Type: AWS::Serverless::Application Properties: Location: ApplicationId: arn:aws:serverlessrepo:us-east-1:1234567890:applications/TestApplication SemanticVersion: 1.0.0 SampleEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: "ami-79fd7eee" KeyName: "testkey" BlockDeviceMappings: - DeviceName: "/dev/sdm" Ebs: VolumeType: "io1" Iops: "200" DeleteOnTermination: "false" VolumeSize: "20" - DeviceName: "/dev/sdk" NoDevice: {}

La plantilla AWS SAM contiene los siguientes elementos:

  • ApplicationID: el nombre de recurso de Amazon (ARN) de su aplicación. Esta información se encuentra en la sección Mis aplicaciones de AWS Serverless Application Repository.

  • SemanticVersion: versión de la aplicación sin servidor. Puede encontrarlo en la sección My Applications (Mis aplicaciones) de la AWS Serverless Application Repository.

  • Parameter (opcional): parámetros de aplicación.

nota

Para ApplicationID y SemanticVersion, no se admiten las funciones intrínsecas. Debe codificar esas cadenas. El ApplicationID se actualiza cuando es clonado por AWS Marketplace.

Si tiene previsto hacer referencia a archivos de configuración/script en su plantilla de CloudFormation, siga el formato que se muestra a continuación. En el caso de las plantillas anidadas (AWS::Cloudformation::Stack), solo se admiten funciones TemplateURLs sin funciones intrínsecas. Anote el contenido de Parameters en la plantilla.

AWSTemplateFormatVersion: '2010-09-09' Metadata: Name: Seller test product Parameters: CFTRefFilesBucket: Type: String Default: "seller-bucket" CFTRefFilesBucketKeyPrefix: Type: String Default: "cftsolutionFolder/additionCFfiles" Resources: TestEc2: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: addCloudAccount: files: /etc/cfn/set-aia-settings.sh: source: Fn::Sub: - https://${CFTRefFilesBucket}.${S3Region}amazonaws.com/${CFTRefFilesBucketKeyPrefix}/sampleScript.sh - S3Region: !If - GovCloudCondition - s3-us-gov-west-1 - s3 owner: root mode: '000700' authentication: S3AccessCreds .. .. .. SampleNestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: 'https://sellerbucket.s3.amazon.com/sellerproductfolder/nestedCft.template' Parameters: SampleParameter: 'test' Transform: AWS::Serverless-2016-10-31

Paso 4: envío de la plantilla y los archivos de configuración de CloudFormation

Para enviar sus archivos de configuración/scripts y plantilla de CloudFormation, conceda permisos de AWS Marketplace para leer el bucket de Amazon S3 donde se almacenan estos archivos. Para ello, actualice la política del bucket para incluir los siguientes permisos.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "assets.marketplace.amazonaws.com" }, "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"] } ] }

Paso 5: actualización de los permisos de la aplicación AWS Serverless Application Repository

Para enviar la aplicación AWS Serverless Application Repository a AWS Marketplace, debe conceder permisos a AWS Marketplace para leer la aplicación. Para ello, añada permisos a una política asociada a su aplicación sin servidor. Hay dos formas de actualizar la política de la aplicación:

  • Vaya a AWS Serverless Application Repository. Elija la aplicación sin servidor de la lista. Seleccione la pestaña Compartir y elija Crear declaración. En la página Configuración de declaración, introduzca la siguiente entidad principal de servicio, assets.marketplace.amazonaws.com, en el campo ID de cuenta. A continuación, elija Guardar.

  • Utilice el siguiente comando de AWS CLI para actualizar la política de la aplicación.

    aws serverlessrepo put-application-policy \ --region region \ --application-id application-arn \ --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy

Paso 6: uso compartido de AMI

Todas las AMI creadas y enviadas a AWS Marketplace deben cumplir todas las políticas de producto. El análisis de AMI de autoservicio está disponible en AWS Marketplace Management Portal. Con esta función, puede iniciar el escaneo de sus AMI. Recibe rápidamente los resultados (normalmente en menos de una hora) con comentarios claros expuestos en una sola ubicación. Una vez que la AMI se haya analizado correctamente, envíe la AMI para que la procese el equipo de operaciones de vendedores de AWS Marketplace cargando el formulario de carga del producto.

Paso 7: envío del producto de CloudFormation con AMI y aplicación sin servidor

Tenga en cuenta lo siguiente antes de enviar su producto:

  • Debe proporcionar un diagrama de arquitectura para cada plantilla. El diagrama debe utilizar los iconos de producto de AWS para cada servicio de AWS implementado a través de la plantilla de CloudFormation. Además, el diagrama debe incluir los metadatos de los servicios. Para descargar nuestros iconos oficiales de arquitectura de AWS, consulte AWS Architecture Icons.

  • La estimación del costo de la infraestructura de cada plantilla que se muestra a los compradores se basa en la estimación que usted proporciona a través de la Calculadora de precios de AWS. En la estimación, incluya la lista de servicios que se van a implementar formando parte de la plantilla, junto con los valores predeterminados para una implementación típica.

  • Complete el formulario de carga del producto. Puede encontrar el formulario de carga del producto en la AWS Marketplace Management Portal. Se requiere un formulario de carga de producto distinto para los productos de una sola AMI y varios productos de AMI. En el formulario de carga del producto, proporcionará una URL pública a su plantilla de CloudFormation. Las plantillas de CloudFormation se deben enviar en forma de una URL pública.

  • Utilice el AWS Marketplace Management Portal para enviar la oferta de producto. En Assets (Recursos), elija File upload (Carga de archivo), adjunte el archivo y, a continuación, elija Upload (Cargar). Después de recibir la plantilla y los metadatos, AWS comienza a procesar su solicitud.

Después de enviar la descripción, AWS Marketplace revisa y valida el formulario de carga del producto. Además, AWS Marketplace regionaliza las AMI y las aplicaciones sin servidor y actualiza el mapeo regional de la plantilla de AWS CloudFormation en su nombre. Si se produce algún problema, el equipo de operaciones de vendedores de AWS Marketplace se pondrá en contacto con usted por correo electrónico.