

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 製品に CloudFormation テンプレートを追加する
<a name="cloudformation"></a>

AWS Marketplace 販売者は、 AWS CloudFormation テンプレートを使用して AWS Marketplace 購入者に配信される AMI ベースの製品を一覧表示できます。AMI ベースの製品に CloudFormation テンプレートを追加すると、購入者はリソースと依存関係を手動で設定しなくてもソリューションをデプロイできます。テンプレートを使用して、各製品の分散アーキテクチャまたはクラスターを定義する、または異なる AMI の組み合わせや製品設定を選択できます。単一の AMI ソリューションには、最大 3 つの CloudFormation テンプレートを含めることができます。

CloudFormation テンプレートは、単一の Amazon マシンイメージ (AMI) を、関連する構成ファイルと Lambda 関数と共に配信するように設定できます。さらに、各テンプレートのアーキテクチャ図を含める必要があります。

**Topics**
+ [CloudFormation テンプレートの準備](#aws-cloudformation-template-preparation)
+ [アーキテクチャ図](#topology-diagram)
+ [既存の製品の CloudFormation テンプレートを変換する](#convert-cloudformation-templates)
+ [サーバーレスアプリケーションコンポーネントの追加](cloudformation-serverless-application.md)

## CloudFormation テンプレートの準備
<a name="aws-cloudformation-template-preparation"></a>

CloudFormation テンプレートを構築するには、テンプレートの前提条件を満たし、必要な入力とセキュリティパラメータを用意する必要があります。CloudFormation テンプレートを送信する場合は、以下のセクションのガイドラインに従ってください。

### テンプレートの前提条件
<a name="template-prerequisites"></a>
+ テンプレートが**、製品に対して AWS リージョン 有効になっているすべての で** CloudFormation コンソールから正常に起動されていることを確認します。[TaskCat ツール](https://github.com/aws-quickstart/taskcat)を使用して、テンプレートをテストできます。
+ CloudFormation テンプレートに含まれる AMI は、公開する製品の AMI であるか、最新の Amazon Linux 2 などの AWS 管理の AMI である必要があります。コミュニティ AMI または ユーザー所有またはユーザー共有またはサードパーティ共有の AMI は含まないでください。AWS マネージド AMI を使用するには、AMI ID をハードコーディングする代わりに、[AWS Systems Manager パラメータストアでパブリック](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-public-parameters.html)パラメータを使用します。 IDs 例えば、AMI ID を指定する CloudFormation テンプレート内では、動的リファレンス `ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}'` を使用します。
+ 特定のアベイラビリティーゾーン (AZ) の使用に依存しないようにテンプレートを構築します。すべてのアベイラビリティーゾーンにすべての顧客がアクセスできるとは限りません。AZ はさまざまなアカウントに別々にマッピングされます。
+ Auto Scaling グループを使用してクラスター化されたソリューションを構築している場合は、スケーリングイベントを考慮することをお勧めします。新規ノードは、自動的に動作クラスターを結合する必要があります。
+ 単一ノードの製品であっても、[Auto Scaling グループ](https://docs.aws.amazon.com/autoscaling/latest/userguide/create-asg-from-instance.html)を使用することをお勧めします。
+ ソリューションに、複数のインスタンスのクラスターが含まれる場合で、インスタンス間でネットワークレイテンシーが低い、またはネットワークスループットが高い、あるいはその両方の場合、プレイスメントグループを使用することを検討してください。
+  AWS Marketplace チームによるレビューを容易にし、顧客に透明性を持たせるために、**UserData** セクションにコメントを追加することをお勧めします。

### AMI の詳細の要件
<a name="ami-requirements-sse"></a>

**注記**  
販売者ポータルの[サーバー製品](https://aws.amazon.com//marketplace/management/products/server)ページで **CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI** を作成し、[製品ロードフォーム](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)のダウンロードを求めるプロンプトが表示された場合は、代わりに「[製品ロードフォームを使用した AMI の詳細の要件](#ami-requirements-product-load-form)」を参照してください。

[AWS::EC2::Instance](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html)、[AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-launchconfiguration.html)、[AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html) リソースなどの EC2 インスタンスに AMI をデプロイするリソースの `ImageId` プロパティを指定する場合は、[テンプレートパラメータ](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)を参照する必要があります。パラメータタイプは、`AWS::EC2::Image::Id`、`AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>`、または `String` のいずれかである必要があります。

このテンプレートパラメータには、任意の有効なパラメータ名を指定できます。 は、テンプレートを独自の Amazon S3 バケット AWS Marketplace にコピーし、指定されたパラメータを [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html) パラメータに置き換えます。 AWS Marketplace また、 は説明と制約テキストを更新して、テンプレートをデプロイする購入者に正しい値を明確にします。購入者がテンプレートをデプロイすると、そのパラメータは、公開された製品の AWS リージョン固有の AMI ID に解決されます。

次のテンプレート例は、組み込み関数 [Ref](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) を使用してテンプレートパラメータを参照する `ImageId` プロパティを示しています。

YAML の例:

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

JSON の例:

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

EC2 インスタンスをルートスタックではなく[ネストされたスタック](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)内にデプロイする場合、AMI ID はルートスタックからその値を動的に継承する必要があります。ルートスタックとネストされたスタックを編集して、ルートスタックでテンプレートパラメータの値を設定すると、このネストされたスタックで使用される AMI ID が上書きされるようにします。

### 製品ロードフォームを使用した AMI の詳細の要件
<a name="ami-requirements-product-load-form"></a>

**注記**  
販売者ポータルの[サーバー製品](https://aws.amazon.com//marketplace/management/products/server)ページで **CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI** を作成し、[製品ロードフォーム](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)のダウンロードを求めるプロンプトがすぐに表示されない場合は、代わりに「[AMI の詳細の要件](#ami-requirements-sse)」を参照してください。

AMI は各リージョンのマッピングテーブルに存在する必要があります。 AWS Marketplace チームはクローン作成後に AMI IDs を更新します。ソース AMI は `us-east-1` リージョンにある必要があります。他のリージョンではプレースホルダーを使用できます。

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

### ネストされたスタックのテンプレートの要件
<a name="nested-stack-template-requirements"></a>

**注記**  
このセクションは、[製品ロードフォーム](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)を使用しない料金モデルにのみ適用されます。製品ロードフォームを*使用する*料金モデルの場合、ネストされたスタックの `TemplateURL` プロパティには固定文字列のみが許可されます。

テンプレートに[ネストされたスタック](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)が含まれている場合、ネストされたスタックリソースの `TemplateURL` プロパティは、Amazon S3 バケット名、バケットリージョン、Amazon S3 オブジェクトキープレフィックスのテンプレートパラメータを参照する必要があります。バケット名のパラメータ名は `MPS3BucketName`、バケットリージョンは `MPS3BucketRegion`、オブジェクトキープレフィックスは `MPS3KeyPrefix` である必要があります。

ネストされたテンプレートが保存されている Amazon S3 バケットに対応するように、これらのパラメータのデフォルト値を設定します。ネストされたテンプレートはすべて公開されている必要があります。公開用のテンプレートを送信すると、 はテンプレートを独自の Amazon S3 バケット AWS Marketplace にコピーし、これら 3 つのパラメータのプロパティを変更して、コピーの保存先に対応するようにデフォルト値と許容値を設定します。 AWS Marketplace また、 は説明と制約テキストを更新して、テンプレートをデプロイする購入者に正しい値を明確にします。

複数のレベルのネストされたスタックがある場合、追加のネストされたスタックを作成するすべてのネストされたスタックは、`TemplateURL` プロパティがルートスタックから Amazon S3 バケット名、Amazon S3 バケットリージョン、Amazon S3 オブジェクトキーの値を動的に継承するように設定する必要があります。ルートスタックとネストされたスタックを編集して、ルートスタックでテンプレートパラメータ `MPS3BucketName`、`MPS3BucketRegion`、`MPS3KeyPrefix` の値を設定して、このネストされたスタックで使用される URL 内のそれぞれの値を上書きし、追加のネストされたスタックを作成します。

次のテンプレート例は、組み込み関数 [Fn::Sub](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html) を使用してテンプレートパラメータを参照する `TemplateURL` プロパティを示しています。

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

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

**注記**  
[AWS::CloudFormation::Interface](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-interface.html) は、購入者がテンプレートをデプロイするときに AWS CloudFormation コンソールでパラメータをグループ化およびソートする方法を定義するために使用されます。

### テンプレート入力パラメータ
<a name="template-input-parameters"></a>
+ テンプレートへの入力パラメータには、 AWS Marketplace 顧客の AWS 認証情報 (パスワード、パブリックキー、プライベートキー、証明書など) を含めないでください。
+ パスワードなどの機密入力パラメータには、`NoEcho` プロパティを選択し、強力な正規表現を有効にします。他の入力パラメータでは、最も一般的な入力を適切なヘルパーテキストで設定します。
+ 使用可能な入力には CloudFormation パラメータタイプを使用します。
+ `AWS::CloudFormation::Interface` を使用し入力パラメータをグループ化およびソートします。
+ 以下の入力パラメータにはデフォルト値を設定しないでください。
**注記**  
顧客は、これらを入力パラメータとして指定する必要があります。
  + パブリックインターネットからリモートアクセスポートへの進入を許可するデフォルトの CIDR 範囲
  + パブリックインターネットからデータベース接続ポートへの進入を許可するデフォルトの CIDR 範囲
  + ユーザーまたはデータベースのデフォルトパスワード

### ネットワークおよびセキュリティパラメータ
<a name="networksecurity-parameters"></a>
+ デフォルトの SSH ポート (22) または RDP ポート (3389) が 0.0.0.0 に対して開かれていないことを確認します。
+ デフォルトの VPC (仮想プライベートクラウド) を使用する代わりに、適切な ACL (アクセスコントロールリスト) とセキュリティグループを設定した VPC を作成することをお勧めします。
+ テンプレートは、ユーザーに長期的なアクセスキーをリクエストしたり、 AWS リソースにアクセスするために作成したりすることはできません。AMI アプリケーションが購入者のアカウント内の AWS サービスにアクセスする必要がある場合は、[Amazon EC2 の IAM ロール](/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)を使用する必要があります。
+ IAM ロールとポリシーに[最小特権を付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)し、絶対に必要な場合のみに書き込みアクセスを有効にします。例えば、アプリケーションで `S3:GET`、`PUT` および `DELETE` オペレーションのみが必要な場合に、これらのアクションのみを指定します。この場合に、`S3:*` の使用はお勧めしません。

テンプレートを受信すると、 は製品設定と情報 AWS Marketplace を検証し、必要なリビジョンに関するフィードバックを提供します。

## アーキテクチャ図
<a name="topology-diagram"></a>

各テンプレートのアーキテクチャ図を用意する必要があります。ダイアグラムの詳細については、「[アーキテクチャダイアグラムとは](https://aws.amazon.com/what-is/architecture-diagramming/)」を参照してください。

図は次の基準を満たしている必要があります。
+ での標準デプロイの例を示します AWS。
+ リソースがデプロイされる場所を論理的に表現します。例えば、Amazon EC2 インスタンスなどのリソースは正しいサブネットにあります。
+  CloudFormation テンプレートを通じて AWS のサービス デプロイされた各 の最新の AWS 製品アイコンを使用します。現在のアーキテクチャアイコンのセットをダウンロードするには、「[AWS アーキテクチャアイコン](https://aws.amazon.com/architecture/icons/)」を参照してください。
+  CloudFormation テンプレートによってデプロイされたすべてのサービスのメタデータを含めます。
+  CloudFormation テンプレートによってデプロイされたすべてのネットワーク、VPCs、サブネットを含めます。
+ サードパーティーのアセット、API およびオンプレミス、ハイブリッドアセットを含む、統合ポイントを表示します。
+ この図のサイズは 1100 x 700 ピクセルである必要があります。元の図の比率は、伸縮やトリミングを行わずに維持します。

## 既存の製品の CloudFormation テンプレートを変換する
<a name="convert-cloudformation-templates"></a>

**注記**  
このセクションは、テンプレートの発行に[製品ロードフォーム](https://docs.aws.amazon.com/marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)を使用しており、製品ロードフォームを使用せずにそのテンプレートを更新する CloudFormation 製品を持つ既存の AMI を持つ販売者を対象としています。新しい製品を公開する場合は、「[CloudFormation テンプレートの準備](https://docs.aws.amazon.com/marketplace/latest/userguide/cloudformation.html#aws-cloudformation-template-preparation)」を参照してください。  
販売者ポータルの[サーバー製品](https://aws.amazon.com//marketplace/management/products/server)ページで **CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI** を作成し、[製品ロードフォーム](https://docs.aws.amazon.com//marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)のダウンロードを求めるプロンプトが表示された場合は、「[製品ロードフォームを使用した AMI の詳細の要件](#ami-requirements-product-load-form)」を参照してください。

セルフサービスエクスペリエンスを使用して、以前に[製品ロードフォーム](https://docs.aws.amazon.com/marketplace/latest/userguide/product-submission.html#aws-cloudformation-launched-product-free-or-paid-or-usage-based-paid-ami-product)を使用して公開した既存の製品を更新する場合は、既存の CloudFormation テンプレートを変更する必要があります。

次の表に、製品ロードフォームとセルフサービスエクスペリエンスの使用の違いを示します。


****  

|  | 製品ロードフォーム | セルフサービスエクスペリエンス | 
| --- | --- | --- | 
| EC2 リソースの ImageId プロパティの値 | AMI ID のマッピングテーブルを参照します。詳細については、「[製品ロードフォームを使用した AMI の詳細の要件](#ami-requirements-product-load-form)」を参照してください。 | AMI ID のテンプレートパラメータを参照します。詳細については、「[AMI の詳細の要件](#ami-requirements-sse)」を参照してください。 | 
| ネストされたスタックの TemplateURL プロパティの値 | 固定文字列でなければならず、組み込み関数を使用できません。 | 組み込み関数を使用して動的にすることができます。一連のテンプレートパラメータを参照する必要があります。詳細については、[ネストされたスタックのテンプレートの要件](#nested-stack-template-requirements)を参照してください。 | 

次のサンプルテンプレートは、製品ロードフォームを使用してテンプレートを発行した既存の製品の例を示しています。この例では、AMI ID は `ami-example123456` で、ネストされたテンプレートは `https://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml` の場所にある販売者の S3 バケットにあります。

製品ロードフォームで公開された YAML の例:

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

製品ロードフォームで公開された JSON の例:

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

次のテンプレート例は、セルフサービスエクスペリエンスを使用して製品を更新するために必要な変更を示しています。

セルフサービスエクスペリエンスで公開された 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-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
```

セルフサービスエクスペリエンスで公開された 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-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"
                }
            }
        }
    }
}
```