Adicionar componentes de aplicativo sem servidor
É possível criar um produto que inclua uma ou mais imagens de máquina da Amazon (AMIs), entregues usando um ou mais modelos do AWS CloudFormation, com componentes com tecnologia sem servidor incorporados ao produto. Por exemplo, é possível criar um produto com uma AMI configurada como um servidor de controlador e outra AMI configurada como um servidor de operador, entregue como uma pilha do AWS CloudFormation. O modelo do AWS CloudFormation usado para criar a pilha pode incluir a definição para configurar uma função AWS Lambda que é acionada por um evento em um dos servidores. Ao usar essa abordagem para projetar seu produto, você pode simplificar a arquitetura e facilitar o lançamento para seus compradores. Essa abordagem também pode facilitar a atualização do produto. Essas seções mostram como criar e oferecer esse tipo de produto.
Para obter informações sobre como criar AMIs para o produto, consulte Produtos baseados em AMI no AWS Marketplace. Para obter informações sobre como preencher modelos do AWS CloudFormation para o produto, consulte Entregar seu produto baseado em AMI usando AWS CloudFormation.
Ao definir o aplicativo sem servidor, use um modelo do AWS Serverless Application Model (AWS SAM) armazenado no AWS Serverless Application Repository. O AWS SAM é uma estrutura de código aberto para a criação de aplicativos sem servidor. Durante a implantação, o AWS SAM transforma e expande a sintaxe do AWS Serverless Application Model em sintaxe do AWS CloudFormation. O AWS Serverless Application Repository é um repositório gerenciado para aplicativos sem servidor. Ele possibilita armazenar e compartilhar aplicativos reutilizáveis para que os compradores possam montar e implantar arquiteturas sem servidor.
nota
-
O AWS Marketplace analisa e valida o produto antes que a oferta seja criada. Enviaremos um e-mail se houver problemas a serem resolvidos antes que a oferta seja listada.
-
Como parte da execução de uma assinatura, copiamos as AMIs, os aplicativos com tecnologia sem servidor e os modelos do AWS CloudFormation para um repositório de propriedade do AWS Marketplace em cada Região da AWS. Quando um comprador assina o seu produto, damos acesso ao comprador e também o notificamos quando você atualiza o software.
Tópicos
- Etapa 1: criar uma aplicação de tecnologia sem servidor
- Etapa 2: publicar o aplicativo no repositório
- Etapa 3: criar o modelo do CloudFormation
- Etapa 4: enviar modelo e arquivos de configuração do CloudFormation
- Etapa 5: atualizar as permissões do seu aplicativo AWS Serverless Application Repository
- Etapa 6: compartilhar sua AMI
- Etapa 7: enviar o produto do CloudFormation com a AMI e o aplicativo com tecnologia sem servidor
Etapa 1: criar uma aplicação de tecnologia sem servidor
A primeira etapa é empacotar as funções AWS Lambda usadas para criar o aplicativo sem servidor. O aplicativo é uma combinação de funções do Lambda, fontes de eventos e outros recursos que trabalham juntos para realizar tarefas. Um aplicativo com tecnologia sem servidor pode ser tão simples quanto uma função do Lambda ou conter várias funções com outros recursos, como APIs, bancos de dados e mapeamentos da fonte de eventos.
Use o AWS SAM a fim de definir um modelo para seu aplicativo sem servidor. Para obter descrições de nomes e tipos de propriedade, consulte AWS::Serverless::Application
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"
Etapa 2: publicar o aplicativo no repositório
Para publicar um aplicativo, você precisa primeiro fazer upload do código dele. Armazene seus artefatos de código (por exemplo, funções do Lambda, scripts, arquivos de configuração) em um bucket do Amazon S3 da sua conta. Ao fazer upload do aplicativo, ele é definido inicialmente como privado, o que significa que ele só está disponível para a Conta da AWS que o criou. Será necessário criar uma política do IAM que conceda permissões ao AWS Serverless Application Repository para acessar os artefatos carregados.
Como publicar o aplicativo sem servidor no repositório de aplicativos sem servidor
-
Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
Escolha o bucket do Amazon S3 que você usou para empacotar o aplicativo.
-
Escolha a aba Permissões.
-
Escolha Política do bucket.
-
Copie e cole o seguinte exemplo de instrução de política.
nota
O exemplo de instrução de política produzirá um erro até que os valores de
aws:SourceAccount
eResource
sejam atualizados nas etapas a seguir.{ "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
" } } } ] }-
Substitua amzn-s3-demo-bucket no valor da propriedade
Resource
pelo nome do seu bucket. -
Substitua
123456789012
no elementoCondition
pelo ID da Conta da AWS. O elementoCondition
garante que somente o AWS Serverless Application Repository tenha permissão para acessar aplicativos da Conta da AWS especificada.
-
-
Escolha Salvar.
-
Abra o console do AWS Serverless Application Repository em https://console.aws.amazon.com/serverlessrepo
. -
Na página Meus aplicativos, escolha Publicar aplicativo.
-
Preencha os campos obrigatórios e todos os campos opcionais apropriados. Os campos obrigatórios são:
-
Nome do aplicativo
-
Autor
-
Descrição
-
URL do código-fonte
-
Modelo do SAM
-
-
Escolha Publicar aplicativo.
Para publicar versões subsequentes do aplicativo
-
Abra o console do AWS Serverless Application Repository em https://console.aws.amazon.com/serverlessrepo
. -
No painel de navegação, em Meus aplicativos, escolha o aplicativo.
-
Escolha Publicar nova versão.
Para obter mais informações, consulte Publicar aplicativos com tecnologia sem servidor usando a CLI do AWS SAM.
Etapa 3: criar o modelo do CloudFormation
Para criar modelos do CloudFormation, você deve atender aos seguintes pré-requisitos de modelo e fornecer os parâmetros de segurança e entrada necessários. Para obter mais informações, consulte Anatomia do modelo no Guia do usuário do AWS CloudFormation.
No modelo do CloudFormation, você pode fazer referência ao aplicativo sem servidor e à AMI. Também é possível usar modelos do CloudFormation aninhados e fazer referência a aplicativos com tecnologia sem servidor no modelo mestre e nos modelos aninhados. Para fazer referência ao aplicativo com tecnologia sem servidor, use o modelo do AWS SAM. Você pode gerar automaticamente o modelo do AWS SAM para seu aplicativo pelo AWS Serverless Application Repository. Veja um exemplo de modelo a seguir.
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: {}
O modelo do AWS SAM contém os seguintes elementos:
-
ApplicationID
: o nome do recurso da Amazon (ARN) da aplicação. Essas informações estão localizadas na seção Meus aplicativos do AWS Serverless Application Repository. -
SemanticVersion
: a versão do aplicativo com tecnologia sem servidor. Você pode encontrá-lo na seção My Applications (Meus aplicativos) do AWS Serverless Application Repository. -
Parameter
(opcional): parâmetros de aplicativo.
nota
Para ApplicationID
e SemanticVersion
, funções intrínsecas não são compatíveis. Você deve codificar essas strings. O ApplicationID
é atualizado quando é clonado pelo AWS Marketplace.
Se você estiver planejando fazer referência a arquivos de configuração e script em seu modelo do CloudFormation, siga o formato a seguir. Para modelos aninhados (AWS::Cloudformation::Stack
), somente TemplateURLs
sem funções intrínsecas são aceitos. Observe o conteúdo de Parameters
no modelo.
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
Etapa 4: enviar modelo e arquivos de configuração do CloudFormation
Para enviar seu modelo do CloudFormation e arquivos de configuração e scripts, conceda ao AWS Marketplace permissões para ler o bucket do Amazon S3 onde esses arquivos estão armazenados. Para fazer isso, atualize sua política de bucket para incluir as seguintes permissões.
{ "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/*"] } ] }
Etapa 5: atualizar as permissões do seu aplicativo AWS Serverless Application Repository
Para enviar seu aplicativo do AWS Serverless Application Repository ao AWS Marketplace, é necessário conceder ao AWS Marketplace permissões para ler o aplicativo. Para fazer isso, adicione permissões a uma política associada ao aplicativo sem servidor. Há duas maneiras de atualizar sua política de aplicativo:
-
Vá para o AWS Serverless Application Repository
. Escolha o aplicativo com tecnologia sem servidor na lista. Selecione a guia Compartilhamento e escolha Criar instrução. Na página Configuração da instrução, insira a seguinte entidade principal de serviço assets.marketplace.amazonaws.com
, no campo IDs da conta. Em seguida, escolha Salvar. -
Use o seguinte comando da AWS CLI para atualizar sua política de aplicativo.
aws serverlessrepo put-application-policy \ --region
region
\ --application-idapplication-arn
\ --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy
Etapa 6: compartilhar sua AMI
Todas as AMIs criadas e enviadas para o AWS Marketplace devem aderir a todas as políticas de produto. A verificação de autoatendimento da AMI está disponível no Portal de gerenciamento do AWS Marketplace. Com esse recurso, você pode iniciar verificações das AMIs. Você recebe os resultados da verificação rapidamente (geralmente em menos de uma hora) com feedback claro em um único lugar. Depois que a AMI for verificada com êxito, envie a AMI para processamento pela equipe de operações de vendedores do AWS Marketplace fazendo upload do formulário de carregamento do produto.
Etapa 7: enviar o produto do CloudFormation com a AMI e o aplicativo com tecnologia sem servidor
Lembre-se do seguinte antes de enviar o produto:
-
Você deve fornecer um diagrama de arquitetura para cada modelo. O diagrama deve usar os ícones dos produtos da AWS para cada serviço da AWS implantado por meio do modelo do CloudFormation. Além disso, o diagrama deve incluir metadados para os serviços. Para fazer download de nossos ícones oficiais de arquitetura da AWS, consulte Ícones de arquitetura da AWS
. -
A estimativa de custo da infraestrutura de cada modelo exibida para os compradores é baseada em uma estimativa que você fornece usando a Calculadora de definição de preço da AWS
. Na estimativa, inclua a lista de serviços a serem implantados como parte do modelo junto com os valores padrão de uma implantação típica. -
Preencha o formulário de carregamento do produto. É possível encontrar o formulário de carregamento do produto no Portal de gerenciamento do AWS Marketplace. Um formulário de carregamento de produto diferente é necessário para produtos de uma única AMI e produtos de várias AMIs. No formulário de carregamento do produto, você fornecerá um URL público para o modelo do CloudFormation. Os modelos do CloudFormation devem ser enviados na forma de um URL público.
-
Use o Portal de gerenciamento do AWS Marketplace para enviar sua oferta. Em Assets (Ativos), escolha File upload (Upload de arquivo), anexe o arquivo e escolha Upload (Fazer upload). Depois de recebermos o modelo e os metadados, a AWS começará a processar sua solicitação.
Depois de enviar sua oferta, o AWS Marketplace revisa e valida o formulário de carregamento do produto. Além disso, o AWS Marketplace regionaliza AMIs e aplicativos sem servidor e atualiza o mapeamento regional do modelo do AWS CloudFormation em seu nome. Se ocorrer algum problema, a equipe de operações do vendedor do AWS Marketplace entrará em contato com você por e-mail.