CloudFormation テンプレートを製品に追加する - AWS Marketplace

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

CloudFormation テンプレートを製品に追加する

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

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

CloudFormation テンプレートの準備

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

テンプレートの前提条件

  • テンプレートが、製品に対して AWS リージョン 有効になっているすべての で AWS CloudFormation コンソールから正常に起動されたことを確認します。TaskCat ツールを使用して、テンプレートをテストできます。

  • CloudFormation テンプレートに含まれる AMI は、公開する製品の AMI であるか、最新の Amazon Linux 2 などの AWS 管理の AMI である必要があります。コミュニティ AMI または ユーザー所有またはユーザー共有またはサードパーティ共有の AMI は含まないでください。AWS が管理する AMI を使用するには、ハードコーディングされた AMI ID ではなく、AWS Systems Manager Parameter Store のパブリックパラメータを使用します。例えば、AMI ID を指定する CloudFormation テンプレート内では、動的リファレンス ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}' を使用します。

  • 特定のアベイラビリティーゾーン (AZ) の使用に依存しないようにテンプレートを構築します。すべてのアベイラビリティーゾーンにすべての顧客がアクセスできるとは限りません。AZ はさまざまなアカウントに別々にマッピングされます。

  • Auto Scaling グループを使用してクラスター化されたソリューションを構築している場合は、スケーリングイベントを考慮することをお勧めします。新規ノードは、自動的に動作クラスターを結合する必要があります。

  • 単一ノードの製品であっても、Auto Scaling グループを使用することをお勧めします。

  • ソリューションに、複数のインスタンスのクラスターが含まれる場合で、インスタンス間でネットワークレイテンシーが低い、またはネットワークスループットが高い、あるいはその両方の場合、プレイスメントグループを使用することを検討してください。

  • AWS Marketplace チームによるレビューと顧客への透明性を容易にするために、UserData セクションにコメントを追加することをお勧めします。

AMI の詳細の要件

注記

販売者ポータルのサーバー製品ページで CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI を作成し、製品ロードフォームのダウンロードを求めるプロンプトが表示された場合は、製品ロードフォームを使用した AMI の詳細の要件代わりに「」を参照してください。

AWS::EC2::Instance、AWS::AWS::AutoScaling::LaunchConfigurationAWS::EC2::LaunchTemplate リソースなどの EC2 インスタンスに AMI をデプロイするリソースの ImageIdプロパティを指定する場合は、テンプレートパラメータを参照する必要があります。 AWS::EC2::Instance パラメータタイプは、AWS::EC2::Image::IdAWS::SSM::Parameter::Value<AWS::EC2::Image::Id>、または のいずれかである必要がありますString

このテンプレートパラメータには、任意の有効なパラメータ名を指定できます。 は、テンプレートを独自の Amazon S3 バケット AWS Marketplace にコピーし、指定されたパラメータを AWS Systems Manager Parameter Store パラメータに置き換えます。購入者がテンプレートをデプロイすると、そのパラメータは公開済み製品の AWS リージョン特定の AMI ID に解決されます。

次のテンプレート例は、組み込み関数 Ref を使用してテンプレートパラメータを参照する 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 インスタンスをデプロイする場合、AMI ID はルートスタックからその値を動的に継承する必要があります。ルートスタックとネストされたスタックを編集して、ルートスタックでテンプレートパラメータの値を設定すると、このネストされたスタックで使用される AMI ID が上書きされるようにします。

製品ロードフォームを使用した AMI の詳細の要件

注記

販売者ポータルのサーバー製品ページで CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI を作成し、製品ロードフォームのダウンロードをすぐに求められない場合は、AMI の詳細の要件「」を参照してください。

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

ネストされたスタックテンプレートの要件

注記

このセクションは、製品ロードフォームを使用しない料金モデルにのみ適用されます。製品ロードフォームを使用する料金モデルの場合、ネストされたスタックTemplateURLプロパティには固定文字列のみが許可されます。

テンプレートにネストされたスタックが含まれている場合、ネストされたスタックリソースの TemplateURLプロパティは、Amazon S3 バケット名、バケットリージョン、および Amazon S3 オブジェクトキープレフィックスのテンプレートパラメータを参照する必要があります。バケット名のパラメータ名は MPS3BucketName、バケットリージョンは MPS3BucketRegion、オブジェクトキープレフィックスの は である必要がありますMPS3KeyPrefix

ネストされたテンプレートが保存されている Amazon S3 バケットに対応するように、これらのパラメータのデフォルト値を設定します。ネストされたテンプレートはすべてパブリックにアクセス可能である必要があります。公開用にテンプレートを送信すると、 はテンプレートを独自の Amazon S3 バケット AWS Marketplace にコピーし、コピーの保存先に対応するようにこれら 3 つのパラメータのデフォルト値を変更します。

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

次のテンプレート例は、組み込み関数 Fn::Sub を使用してテンプレートパラメータを参照する 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 は、購入者がテンプレートをデプロイするときに AWS CloudFormation コンソールでパラメータをグループ化およびソートする方法を定義するために使用されます。

テンプレート入力パラメータ

  • テンプレートへの入力パラメータには、 AWS Marketplace 顧客の AWS 認証情報 (パスワード、パブリックキー、プライベートキー、証明書など) を含めないでください。

  • パスワードなどの機密入力パラメータには、NoEcho プロパティを選択し、強力な正規表現を有効にします。他の入力パラメータでは、最も一般的な入力を適切なヘルパーテキストで設定します。

  • 使用可能な入力には AWS CloudFormation パラメータタイプを使用します。

  • AWS::CloudFormation::Interface を使用し入力パラメータをグループ化およびソートします。

  • 以下の入力パラメータにはデフォルト値を設定しないでください。

    注記

    顧客は、これらを入力パラメータとして指定する必要があります。

    • パブリックインターネットからリモートアクセスポートへの進入を許可するデフォルトの CIDR 範囲

    • パブリックインターネットからデータベース接続ポートへの進入を許可するデフォルトの CIDR 範囲

    • ユーザーまたはデータベースのデフォルトパスワード

ネットワークおよびセキュリティパラメータ

  • デフォルトの SSH ポート (22) または RDP ポート (3389) が 0.0.0.0 に対して開かれていないことを確認します。

  • デフォルトの VPC (仮想プライベートクラウド) を使用する代わりに、適切な ACL (アクセスコントロールリスト) とセキュリティグループを設定した VPC を作成することをお勧めします。

  • テンプレートは、 ユーザーに長期的なアクセスキーをリクエストしたり、 AWS リソースにアクセスするために作成したりすることはできません。AMI アプリケーションが購入者のアカウント内の AWS サービスにアクセスする必要がある場合は、Amazon EC2 の IAM ロールを使用する必要があります。

  • IAM ロールとポリシーに最小特権を付与し、絶対に必要な場合のみに書き込みアクセスを有効にします。たとえば、アプリケーションで S3:GETPUT および DELETE オペレーションのみが必要な場合に、これらのアクションのみを指定します。この場合に、S3:* の使用はお勧めしません。

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

アーキテクチャ図

各テンプレートのアーキテクチャ図を用意する必要があります。ダイアグラムの詳細については、「アーキテクチャダイアグラムとは」を参照してください。

図は次の基準を満たしている必要があります。

  • での標準デプロイの例を示します AWS。

  • リソースがデプロイされる場所を論理的に表現します。例えば、Amazon EC2 インスタンスなどのリソースは正しいサブネットにあります。

  • AWS CloudFormation テンプレートを通じて AWS のサービス デプロイされた各 の最新の AWS 製品アイコンを使用します。現在のアーキテクチャアイコンのセットをダウンロードするには、「AWS アーキテクチャアイコン」を参照してください。

  • AWS CloudFormation テンプレートによってデプロイされたすべてのサービスのメタデータを含めます。

  • AWS CloudFormation テンプレートによってデプロイされたすべてのネットワーク、VPCs、サブネットを含めます。

  • サードパーティーのアセット、API およびオンプレミス、ハイブリッドアセットを含む、統合ポイントを表示します。

  • この図のサイズは 1100 x 700 ピクセルである必要があります。元の図の比率は、伸縮やトリミングを行わずに維持します。

既存の製品の CloudFormation テンプレートを変換する

注記

このセクションは、製品ロードフォームを使用してテンプレートを発行し、製品ロードフォームを使用せずにそのテンプレートを更新する CloudFormation 製品を持つ既存の AMI を持つ販売者を対象としています。新しい製品を公開する場合は、CloudFormation テンプレートの準備」を参照してください。

販売者ポータルのサーバー製品ページで CloudFormation を使用して Amazon マシンイメージ (AMI) または AMI を作成し、製品ロードフォームのダウンロードを求めるプロンプトが表示された場合は、「」を参照してください製品ロードフォームを使用した AMI の詳細の要件

セルフサービスエクスペリエンスを使用して、以前に製品ロードフォームを使用して公開した既存の製品を更新する場合は、既存の CloudFormation テンプレートを変更する必要があります。

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

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

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

製品ロードフォームで公開された 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" } } } } }