Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tambahkan CloudFormation template ke produk Anda
AWS Marketplace penjual dapat membuat daftar AMI-based produk yang dikirimkan ke AWS Marketplace pembeli dengan menggunakan AWS CloudFormation template. Menambahkan CloudFormation template ke AMI-based produk Anda memungkinkan pembeli untuk menerapkan solusi Anda tanpa harus mengkonfigurasi sumber daya dan dependensi secara manual. Anda dapat menggunakan templat untuk menentukan cluster atau arsitektur didistribusikan untuk produk atau untuk memilih kombinasi AMI yang berbeda atau konfigurasi produk. Solusi AMI tunggal dapat berisi maksimal tiga CloudFormation templat.
Tem CloudFormation plate dapat dikonfigurasi untuk mengirimkan satu Amazon Machine Image (AMI) dengan file konfigurasi terkait dan fungsi Lambda. Selain itu, Anda harus menyertakan diagram arsitektur untuk setiap template.
Topik
Mempersiapkan CloudFormation template Anda
Untuk membuat CloudFormation template Anda, Anda harus memenuhi prasyarat template dan memberikan parameter input dan keamanan yang diperlukan. Saat mengirimkan CloudFormation template Anda, gunakan pedoman di bagian berikut.
Prasyarat templat
-
Pastikan template berhasil diluncurkan melalui CloudFormation konsol di semua yang Wilayah AWS diaktifkan untuk produk Anda. Anda dapat menggunakan TaskCat alat ini
untuk menguji template Anda. -
AMI yang disertakan dalam CloudFormation template Anda harus berupa AMI dari produk yang Anda terbitkan atau AWS-managed AMI seperti Amazon Linux 2 terbaru. Jangan sertakan AMI komunitas atau AMI yang dimiliki dan dibagikan oleh Anda atau pihak ketiga lainnya. Untuk menggunakan AWS-managed AMI, gunakan parameter publik di Penyimpanan Parameter Manajer AWS Sistem al ih-alih ID AMI hardcoding. Misalnya, di dalam CloudFormation template tempat Anda menentukan ID AMI, Anda menggunakan referensi dinamis
ImageId: '{{resolve:ssm:/aws/service/ecs/optimized-ami/amazon-linux-2/recommended/image_id}}'. -
Bangun template sehingga tidak bergantung pada penggunaan di Availability Zone (AZ) tertentu. Tidak semua pelanggan memiliki akses ke semua AZ, dan AZ dipetakan berbeda untuk akun yang berbeda.
-
Jika Anda membuat solusi kluster menggunakan grup Auto Scaling, sebaiknya akun peristiwa penskalaan. Node baru harus bergabung dengan cluster berjalan secara otomatis.
-
Bahkan untuk produk single-node, kami merekomendasikan untuk menggunakanGrup Auto Scaling.
-
Jika solusi Anda melibatkan sekelompok peristiwa, pertimbangkan untuk menggunakan grup penempatan jika Anda ingin latensi jaringan rendah, throughput jaringan tinggi, atau keduanya di antara instans.
-
Untuk kemudahan peninjauan oleh AWS Marketplace tim dan transparansi kepada pelanggan, kami sarankan Anda menambahkan komentar di UserData bagian Anda.
Persyaratan untuk detail AMI
catatan
Jika Anda membuat Amazon Machine Image (AMI) atau AMI CloudFormation di halaman produk
Saat menentukan ImageId properti sumber daya yang menerapkan AMI Anda ke instans EC2 seperti AWS: :EC2: :Instance,::, dan AWS AWS::AutoScaling: :EC2: LaunchTemplate resource LaunchConfiguration, Anda harus mereferensikan parameter template. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html Jenis parameter harus berupa aAWS::EC2::Image::Id,AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>, atauString.
Anda dapat memberi nama parameter template ini nama parameter yang valid. AWS Marketplace menyalin template Anda ke bucket Amazon S3 sendiri dan mengganti parameter yang ditentukan dengan parameter Peny AWS Systems Manager impanan Parameter. AWS Marketplace juga memperbarui deskripsi dan teks kendala untuk membuat nilai yang benar jelas bagi pembeli yang menerapkan template. Saat pembeli menerapkan template Anda, parameter tersebut diselesaikan ke ID Wilayah AWS AMI spesifik produk yang Anda publikasikan.
Contoh template berikut menggambarkan parameter template referensi ImageId properti menggunakan fungsi intrinsik Ref.
Contoh YAML:
Parameters: ImageId: Type: AWS::EC2::Image::Id Default: ami-example1234567890 Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: !Ref ImageId
Contoh JSON:
{ "Parameters": { "ImageId": { "Type": "AWS::EC2::Image::Id", "Default": "ami-example1234567890" } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" } } } } }
Jika Anda menerapkan instans EC2 di dalam tumpukan bersar ang alih- alih tumpukan root, ID AMI harus secara dinamis mewarisi nilainya dari tumpukan root. Edit root dan tumpukan bersarang Anda sehingga di tumpukan root, menyetel nilai parameter template Anda menggantikan ID AMI yang digunakan dalam tumpukan bersarang ini.
Persyaratan untuk detail AMI menggunakan formulir pemuatan produk
catatan
Saat Anda membuat Amazon Machine Image (AMI) atau AMI dengan CloudFormation halaman produk
AMI harus ada dalam tabel pemetaan untuk setiap Wilayah. AWS Marketplace Tim memperbarui ID AMI setelah dikloning. Sumber AMI Anda harus berada di Wil us-east-1 ayah. Wilayah lain dapat menggunakan placeholder.
Contoh 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
Persyaratan untuk templat tumpukan bersarang
catatan
Bagian ini hanya berlaku untuk model penetapan harga yang tidak menggunakan formulir pemuatan produk. Untuk model penetapan harga yang menggunakan formulir pemuatan produk, hanya string tetap yang diperbolehkan untuk TemplateURL properti tumpukan bersarang.
Jika template Anda menyertakan tum pukan bersarang, TemplateURL properti resource tumpukan bersarang harus mereferensikan parameter template untuk nama bucket Amazon S3, Wilayah bucket, dan awalan kunci objek Amazon S3. Nama parameter untuk nama bucket harusMPS3BucketName, Region bucket harusMPS3BucketRegion, dan untuk awalan kunci objek harusMPS3KeyPrefix.
Tetapkan nilai default untuk parameter ini agar sesuai dengan bucket Amazon S3 tempat templat bersarang disimpan. Semua templat bersarang harus dapat diakses publik. Saat Anda mengirimkan template untuk diterbitkan, AWS Marketplace salin templat Anda ke bucket Amazon S3 sendiri dan memodifikasi properti dari ketiga parameter tersebut agar nilai default dan nilai yang diizinkan ditetapkan sesuai dengan tempat penyimpanan salinan. AWS Marketplace juga memperbarui deskripsi dan teks kendala untuk membuat nilai yang benar jelas bagi pembeli yang menerapkan template.
Jika Anda memiliki beberapa level tumpukan bersarang, semua tumpukan bersarang yang membuat tumpukan bersarang tambahan harus dikonfigurasi sehingga TemplateURL properti secara dinamis mewarisi nilai nama bucket Amazon S3, Wilayah bucket Amazon S3, dan kunci objek Amazon S3 dari tumpukan root. Edit root dan tumpukan bersarang Anda sehingga di tumpukan root, mengatur nilai parameter template, MPS3BucketNameMPS3BucketRegion, dan MPS3KeyPrefix mengganti nilainya masing-masing dalam URL yang digunakan dalam tumpukan bersarang ini untuk membuat tumpukan bersarang tambahan.
Contoh template berikut menggambarkan parameter template referensi TemplateURL properti menggunakan fungsi intrinsik Fn:: Sub.
Contoh 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
Contoh 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" } } } } }
catatan
AWS::CloudFormation: :Antarmuka digunakan untuk menentukan bagaimana parameter dikelompokkan dan diurutkan di AWS CloudFormation konsol saat pembeli menerapkan template Anda.
Parameter input templat
-
Parameter input ke template tidak boleh menyertakan AWS kredenSIAL AWS Marketplace pelanggan (seperti kata sandi, kunci publik, kunci pribadi, atau sertifikat).
-
Untuk parameter input sensitif seperti kata sandi, pilih
NoEchoproperti dan aktifkan ekspresi reguler yang lebih kuat. Untuk parameter input lainnya, atur input yang paling umum bersama dengan teks pembantu yang sesuai. -
Gunakan jenis CloudFormation parameter untuk input jika tersedia.
-
Gunakan
AWS::CloudFormation::Interfaceuntuk kelompok dan mengurutkan parameter masukan. -
Jangan menetapkan nilai default apa pun untuk parameter input berikut:
catatan
Pelanggan harus menyediakan ini sebagai parameter input.
-
Rentang CIDR default yang memungkinkan masuk ke port akses jarak jauh dari internet publik
-
Rentang CIDR default yang memungkinkan masuk ke port koneksi database dari internet publik
-
Kata sandi default untuk pengguna atau database
-
Jaringan dan parameter keamanan
-
Pastikan bahwa port SSH default (22) atau RDP port (3389) tidak terbuka untuk 0.0.0.0.
-
Alih-alih menggunakan default virtual private cloud (VPC), kami sarankan Anda membangun VPC dengan daftar kontrol akses yang sesuai (ACL) dan grup keamanan.
-
Template Anda tidak dapat meminta kunci akses jangka panjang dari pengguna atau membuatnya untuk mengakses AWS sumber daya. Jika aplikasi AMI Anda memerlukan akses ke AWS layanan di akun pembeli, aplikasi tersebut harus menggunakan peran IAM untuk Amazon EC 2.
-
Tetapkan peran dan kebijakan IAM keBerikan hak istimewa yang paling rendahdan aktifkan akses tulis hanya jika benar-benar diperlukan. Misalnya, jika aplikasi Anda hanya perlu
S3:GET,PUT, danDELETEoperasi, tentukan tindakan tersebut saja. Kami tidak merekomendasikan penggunaanS3:*dalam kasus ini.
Setelah template Anda diterima, AWS Marketplace memvalidasi konfigurasi dan informasi produk dan memberikan umpan balik untuk setiap revisi yang diperlukan.
Diagram arsitektur
Anda harus memberikan diagram arsitektur untuk setiap template. Untuk mempelajari lebih lanjut tentang pembuatan diagram, lihat Apa itu diagram arsitektur?
Diagram harus memenuhi kriteria berikut:
-
Ilustrasikan penerapan standar pada AWS.
-
Menggambarkan secara logis di mana sumber daya dikerahkan. Misalnya, sumber daya seperti instans Amazon EC2 berada di subnet yang benar.
-
Gunakan ikon AWS produk terbaru untuk setiap yang Layanan AWS digunakan melalui CloudFormation template. Untuk mengunduh kumpulan ikon arsitektur saat ini, lihat Ikon AWS Arsitektur
. -
Sertakan metadata untuk semua layanan yang digunakan oleh CloudFormation template.
-
Sertakan semua jaringan, VPC, dan subnet yang digunakan oleh template. CloudFormation
-
Tampilkan titik integrasi, termasuk aset pihak ketiga, API, dan aset hibrida lokal.
-
Diagram harus berukuran 1100 x 700 piksel. Pertahankan proporsi diagram asli tanpa meregangkan atau memotong.
Konversi CloudFormation templat produk yang ada
catatan
Bagian ini untuk penjual dengan AMI yang sudah ada dengan CloudFormation produk yang menggunakan formulir pemuatan produk untuk mempublikasikan templat mereka dan sekarang ingin memperbarui template itu tanpa menggunakan formulir pemuatan produk. Jika Anda menerbitkan produk baru, lihat Mempersiapkan CloudFormation templat Anda.
Jika Anda membuat Amazon Machine Image (AMI) atau AMI CloudFormation di halaman produk
Jika Anda ingin menggunakan pengalaman layanan mandiri untuk memperbarui produk yang sudah ada yang sebelumnya menggunakan formulir pemuatan produk untuk dipublikasikan, Anda harus membuat perubahan pada CloudFormation template yang ada.
Tabel berikut menjelaskan perbedaan antara menggunakan formulir pemuatan produk dan pengalaman layanan mandiri:
| Formulir beban produk | Self-service pengalaman | |
|---|---|---|
Nilai ImageId properti untuk sumber daya EC2 |
Referensi tabel pem etaan untuk ID AMI Anda. Untuk informasi selengkapnya, lihat Persyaratan untuk detail AMI menggunakan formulir pemuatan produk. | Referensi parameter template untuk ID AMI Anda. Untuk informasi selengkapnya, lihat Persyaratan untuk detail AMI. |
Nilai TemplateURL properti untuk tumpukan bersarang |
Harus berupa string tetap dan tidak dapat menggunakan fungsi intrinsik. | Dapat dinamis dengan menggunakan fungsi intrinsik. Harus mereferensikan satu set parameter template. Untuk informasi selengkapnya, lihat Persyaratan untuk templat tumpukan bersarang |
Template contoh berikut menggambarkan contoh produk yang ada yang menggunakan formulir pemuatan produk untuk menerbitkan template. Dalam contoh ini, ID AMI adalah ami-example123456 dan template bersarang ada di bucket S3 penjual di lokasihttps://sellerbucket.s3.us-east-1.amazonaws.com/sellerproductfolder/nested-template.yaml.
Contoh YAML yang diterbitkan dengan formulir pemuatan produk:
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
Contoh JSON diterbitkan dengan formulir pemuatan produk:
{ "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" } } } }
Contoh template berikut menggambarkan perubahan yang diperlukan untuk menggunakan pengalaman layanan mandiri untuk memperbarui produk.
Contoh YAML yang dipublikasikan dengan pengalaman layanan mandiri:
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
Contoh JSON diterbitkan dengan pengalaman layanan mandiri:
{ "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" } } } } }