

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Adicione CloudFormation modelos ao seu produto
<a name="cloudformation"></a>

AWS Marketplace os vendedores podem listar produtos baseados em AMI que são entregues aos AWS Marketplace compradores usando modelos. AWS CloudFormation Adicionar um CloudFormation modelo ao seu produto baseado em AMI permite que seus compradores implantem sua solução sem precisar configurar manualmente os recursos e dependências. Os modelos podem ser usados para definir um cluster ou uma arquitetura distribuída para os produtos ou para selecionar diferentes combinações de AMIs ou configurações de produtos. As soluções únicas de AMI podem conter no máximo três CloudFormation modelos.

Os CloudFormation modelos podem ser configurados para fornecer uma única Amazon Machine Image (AMI) com arquivos de configuração associados e funções Lambda. Além disso, você deve incluir um diagrama arquitetônico para cada modelo.

**Topics**
+ [Preparando seu CloudFormation modelo](#aws-cloudformation-template-preparation)
+ [Diagrama de arquitetura](#topology-diagram)
+ [Converta CloudFormation modelos de produtos existentes](#convert-cloudformation-templates)
+ [Adicionar componentes de aplicativo sem servidor](cloudformation-serverless-application.md)

## Preparando seu CloudFormation modelo
<a name="aws-cloudformation-template-preparation"></a>

Para criar seus CloudFormation modelos, você deve atender aos pré-requisitos do modelo e fornecer os parâmetros de entrada e segurança necessários. Ao enviar seu CloudFormation modelo, use as diretrizes nas seções a seguir.

### Pré-requisitos de modelos
<a name="template-prerequisites"></a>
+ Verifique se o modelo foi lançado com sucesso por meio do CloudFormation console **em todos os recursos Regiões da AWS habilitados para seu produto**. Você pode usar a [TaskCat ferramenta](https://github.com/aws-quickstart/taskcat) para testar seus modelos.
+ AMIs incluído em seu CloudFormation modelo deve ser a AMI do produto que você está publicando ou uma AMI gerenciada pela AWS, como a última versão do Amazon Linux 2. Não inclua nenhuma AMI comunitária ou AMI de propriedade e compartilhada por você ou por terceiros. Para usar uma AMI gerenciada pela AWS, use [parâmetros públicos no AWS Systems Manager Parameter Store em](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html) vez da AMI codificada. IDs Por exemplo, em seu CloudFormation modelo em que você especifica a ID da AMI, você usa uma referência dinâmica`ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}'`.
+ Crie modelos de forma que não dependam do uso de uma determinada zona de disponibilidade (AZ). Nem todos os clientes têm acesso a todos AZs e AZs são mapeados de forma diferente para contas diferentes.
+ Se estiver criando uma solução clusterizada usando um grupo do Auto Scaling, recomendamos considerar um evento de escalabilidade. O novo nó deve ingressar no cluster em execução automaticamente.
+ Mesmo para produtos de nó único, recomendamos o uso de um [Grupo de Auto Scaling](https://docs.aws.amazon.com/autoscaling/latest/userguide/create-asg-from-instance.html).
+ Se sua solução envolver um cluster de várias instâncias, considere usar placement groups para ter baixa latência de rede, alta taxa de transferência de rede ou ambas entre as instâncias.
+ Para facilitar a revisão pela AWS Marketplace equipe e transparência para o cliente, recomendamos que você adicione comentários em sua **UserData**seção.

### Requisitos para obter detalhes de AMI
<a name="ami-requirements-sse"></a>

**nota**  
Se você criar uma **Amazon Machine Image (AMI) ou AMI CloudFormation** na página de [produtos do servidor](https://aws.amazon.com//marketplace/management/products/server) do portal do vendedor e for solicitado a baixar o [formulário de carregamento do produto](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product), consulte [Requisitos para obter detalhes da AMI usando o formulário de carregamento do produto](#ami-requirements-product-load-form) em vez disso.

Ao especificar a `ImageId` propriedade dos recursos que implantam sua AMI em instâncias do EC2 [AWS::EC2::Instance](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html), como, e [AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)recursos [AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html), você deve fazer referência a um parâmetro de [modelo](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/parameters-section-structure.html). O tipo de parâmetro deve ser um `AWS::EC2::Image::Id`, `AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>` ou `String`.

Você pode nomear esse parâmetro de modelo com qualquer nome de parâmetro válido. AWS Marketplace [copia seu modelo para seus próprios buckets do Amazon S3 e substitui o parâmetro especificado por um AWS Systems Manager parâmetro do Parameter Store.](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html) AWS Marketplace também atualiza a descrição e o texto da restrição para deixar claro o valor correto para os compradores que estão implantando o modelo. Quando os compradores implantam o modelo, esse parâmetro é resolvido para o ID de AMI específico da Região da AWS do produto publicado.

Os exemplos de modelo a seguir ilustram a propriedade `ImageId` que referencia parâmetros de modelo usando a função intrínseca [Ref](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html).

Exemplo de YAML:

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

Exemplo de JSON:

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

Se você estiver implantando instâncias do EC2 dentro de uma [pilha aninhada](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) em vez da pilha raiz, o ID de AMI deverá herdar dinamicamente o valor da pilha raiz. Edite as pilhas raiz e aninhadas, de maneira que, na pilha raiz, a definição do valor do parâmetro do modelo substitua o ID de AMI usado nessa pilha aninhada.

### Requisitos para obter detalhes da AMI usando o formulário de carregamento do produto
<a name="ami-requirements-product-load-form"></a>

**nota**  
Quando você cria uma **Amazon Machine Image (AMI) ou AMI CloudFormation** na página de [produtos do servidor](https://aws.amazon.com//marketplace/management/products/server) do portal do vendedor e não é imediatamente solicitado a baixar o [formulário de carregamento do produto](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product), consulte [Requisitos para obter detalhes de AMI](#ami-requirements-sse) em vez disso.

AMIs deve estar em uma tabela de mapeamento para cada região. A AWS Marketplace equipe atualiza a AMI IDs depois que ela é clonada. A AMI de origem deve estar na região `us-east-1`. As outras regiões podem usar espaços reservados.

Exemplo 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 modelos de pilha aninhada
<a name="nested-stack-template-requirements"></a>

**nota**  
Esta seção só se aplica a modelos de definição de preço que não usem o [formulário de carregamento do produto](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product). Para modelos de definição de preço que *usem* o formulário de carregamento do produto, somente uma string fixa é permitida para a propriedade `TemplateURL` da pilha aninhada.

Se o modelo incluir [pilhas aninhadas](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), a propriedade `TemplateURL` de recursos da pilha aninhada deverá referenciar os parâmetros de modelo do nome do bucket do Amazon S3, da região do bucket e do prefixo de chave do objeto do Amazon S3. Os nomes de parâmetro do nome do bucket devem ser `MPS3BucketName`, a região do bucket deve ser `MPS3BucketRegion` e o prefixo da chave de objeto deve ser `MPS3KeyPrefix`.

Defina os valores padrão para que esses parâmetros correspondam ao bucket do Amazon S3 onde os modelos aninhados são armazenados. Todos os modelos aninhados devem ser publicamente acessíveis. Quando você envia seu modelo para publicação, AWS Marketplace copia seus modelos para seus próprios buckets do Amazon S3 e modifica as propriedades desses três parâmetros para que o valor padrão e o valor permitido sejam definidos de acordo com o local em que as cópias são armazenadas. AWS Marketplace também atualiza a descrição e o texto da restrição para deixar os valores corretos claros para os compradores que estão implantando o modelo.

Se você tiver vários níveis de pilhas aninhadas, todas as pilhas aninhadas que criam pilhas aninhadas adicionais deverão ser configuradas para que a propriedade `TemplateURL` herde dinamicamente os valores do nome do bucket do Amazon S3, da região do bucket do Amazon S3 e da chave de objeto do Amazon S3 da pilha raiz. Edite as pilhas raiz e aninhadas para que, na pilha raiz, a definição do valor do parâmetro do modelo `MPS3BucketName`, `MPS3BucketRegion` e `MPS3KeyPrefix` substitua os respectivos valores na URL usada nessa pilha aninhada para criar pilhas aninhadas adicionais.

Os exemplos de modelo a seguir ilustram a propriedade `TemplateURL` que referencia parâmetros de modelo usando a função intrínseca [Fn::Sub](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html).

Exemplo 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
```

Exemplo 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](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-interface.html)é usado para definir como os parâmetros são agrupados e classificados no AWS CloudFormation console quando os compradores implantam seu modelo.

### Parâmetros de entrada de modelos
<a name="template-input-parameters"></a>
+ Os parâmetros de entrada no modelo não devem incluir AWS as credenciais do AWS Marketplace cliente (como senhas, chaves públicas, chaves privadas ou certificados).
+ Para parâmetros de entradas confidenciais, como senhas, escolha a propriedade `NoEcho` e habilite expressão regular mais forte. Para outros parâmetros de entrada, defina as entradas mais comuns juntamente com texto auxiliar apropriado.
+ Use tipos de CloudFormation parâmetros para entradas, quando disponíveis.
+ Use `AWS::CloudFormation::Interface` para agrupar e classificar parâmetros de entrada.
+ Não defina nenhum valor padrão para os seguintes parâmetros de entrada:
**nota**  
Os clientes devem fornecer essas informações como parâmetros de entrada.
  + Intervalos CIDR padrão que permitem a entrada em portas de acesso remoto a partir da Internet pública
  + Intervalos CIDR padrão que permitem a entrada em portas de conexão de banco de dados a partir da Internet pública
  + Senhas padrão para usuários ou bancos de dados

### Parâmetros de rede e segurança
<a name="networksecurity-parameters"></a>
+ Verifique se a porta SSH padrão (22) ou a porta RDP (3389) não está aberta para 0.0.0.0.
+ Em vez de usar a nuvem privada virtual (VPC) padrão, recomendamos que você crie uma VPC com listas de controle de acesso (ACLs) e grupos de segurança apropriados. 
+ Seu modelo não pode solicitar chaves de acesso de longo prazo dos usuários nem criá-las para acessar AWS recursos. Se seu aplicativo de AMI exigir acesso aos AWS serviços na conta do comprador, ele deverá usar [funções do IAM para o Amazon EC2](/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html).
+ Defina perfis e políticas do IAM para [conceder o privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) e permitir acesso de gravação apenas quando absolutamente necessário. Por exemplo, se o aplicativo precisar apenas das operações `S3:GET`, `PUT` e `DELETE`, especifique apenas essas ações. Não recomendamos o uso de `S3:*` nesse caso. 

Depois que seu modelo for recebido, AWS Marketplace valida a configuração e as informações do produto e fornece feedback sobre as revisões necessárias.

## Diagrama de arquitetura
<a name="topology-diagram"></a>

Você deve fornecer um diagrama de arquitetura para cada modelo. Para saber mais sobre diagramação, consulte [O que é diagramação de arquitetura](https://aws.amazon.com/what-is/architecture-diagramming/)?

O diagrama deve atender aos seguintes critérios:
+ Ilustre uma implantação padrão em. AWS
+ Descreva logicamente onde os recursos são implantados. Por exemplo, recursos da, como instâncias do Amazon EC2, estão na sub-rede correta.
+ Use os ícones de AWS produto mais atuais para cada um AWS service (Serviço da AWS) implantado por meio do CloudFormation modelo. Para baixar o conjunto atual de ícones de arquitetura, consulte [Ícones de arquitetura da AWS](https://aws.amazon.com/architecture/icons/).
+ Inclua metadados para todos os serviços implantados pelo CloudFormation modelo.
+ Inclua todas as VPCs redes e sub-redes implantadas pelo modelo. CloudFormation 
+ Mostre pontos de integração, incluindo ativos de terceiros APIs e ativos híbridos locais.
+ Diagramas devem ter um tamanho de 1.100 x 700 pixels. Mantenha as proporções originais do diagrama sem esticar ou cortar.

## Converta CloudFormation modelos de produtos existentes
<a name="convert-cloudformation-templates"></a>

**nota**  
Esta seção é para vendedores com uma AMI existente com CloudFormation produto que usaram o [formulário de carregamento de produto](https://docs.aws.amazon.com/marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product) para publicar seus modelos e agora desejam atualizar esse modelo sem usar o formulário de carregamento de produto. Se você estiver publicando um novo produto, consulte [Preparando seus CloudFormation modelos](https://docs.aws.amazon.com/marketplace/latest/userguide/cloudformation.html#aws-cloudformation-template-preparation).  
Se você criar uma **Amazon Machine Image (AMI) ou AMI CloudFormation** na página de [produtos do servidor](https://aws.amazon.com//marketplace/management/products/server) do portal do vendedor e for solicitado a baixar o [formulário de carregamento do produto](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product), consulte[Requisitos para obter detalhes da AMI usando o formulário de carregamento do produto](#ami-requirements-product-load-form).

Se você quiser usar a experiência de autoatendimento para atualizar um produto existente que anteriormente usava o [formulário de carregamento de produto](https://docs.aws.amazon.com/marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product) para publicar, você deve fazer alterações no seu CloudFormation modelo existente.

A seguinte tabela descreve a diferença entre o uso do formulário de carregamento do produto e a experiência de autoatendimento:


****  

|  | Formulário de carregamento do produto | Experiência de autoatendimento | 
| --- | --- | --- | 
| Valor da propriedade ImageId para recursos do EC2 | Referencia uma tabela de mapeamento para o ID de AMI. Para obter mais informações, consulte [Requisitos para obter detalhes da AMI usando o formulário de carregamento do produto](#ami-requirements-product-load-form).  | Referencia um parâmetro de modelo para o ID de AMI. Para obter mais informações, consulte [Requisitos para obter detalhes de AMI](#ami-requirements-sse).  | 
| Valor da propriedade TemplateURL para pilhas aninhadas | Deve ser uma string fixa e não pode usar funções intrínsecas. | Pode ser dinâmico usando funções intrínsecas. Deve referenciar um conjunto de parâmetros do modelo. Para obter mais informações, consulte [Requisitos para modelos de pilha aninhada](#nested-stack-template-requirements). | 

Os modelos de exemplo a seguir ilustram um exemplo de um produto existente que usou o formulário de carregamento do produto para publicar o modelo. Neste exemplo, o ID de AMI é `ami-example123456` e um modelo aninhado está no bucket S3 de um vendedor no local `https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml`.

Exemplo de YAML publicado com o formulário de carregamento do produto:

```
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
```

Exemplo de JSON publicado com o formulário de carregamento do produto:

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

Os exemplos de modelo a seguir ilustram as alterações necessárias para usar a experiência de autoatendimento para atualizar o produto.

Exemplo de YAML publicado com a experiência de autoatendimento:

```
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
```

Exemplo de JSON publicado com a experiência de autoatendimento:

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