

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menambahkan komponen aplikasi tanpa server
<a name="cloudformation-serverless-application"></a>

**penting**  
AWS Marketplace tidak lagi mendukung penerbitan produk baru dengan CloudFormation template yang menyebarkan sumber daya dari AWS Serverless Application Repository. Penjual dapat terus mempublikasikan produk yang ada dengan CloudFormation templat yang menyebarkan sumber daya dari AWS Serverless Application Repository hingga tanggal mendatang untuk diumumkan.

Anda dapat membuat produk yang menyertakan Amazon Machine Image (AMI), dikirimkan menggunakan AWS CloudFormation template, dengan komponen tanpa server yang dimasukkan ke dalam produk. Misalnya, Anda dapat membuat produk dengan AMI yang dikonfigurasi sebagai server pengontrol dan mengirimkannya sebagai CloudFormation tumpukan. CloudFormation Template yang digunakan untuk membuat tumpukan dapat menyertakan definisi untuk mengatur AWS Lambda fungsi yang dipicu oleh peristiwa di server. Bila Anda menggunakan pendekatan ini untuk merancang produk Anda, Anda dapat menyederhanakan arsitektur dan memudahkan pembeli Anda untuk memulai. Pendekatan ini juga dapat membuat lebih mudah bagi Anda untuk memperbarui produk Anda. Bagian berikut ini menunjukkan kepada Anda cara membuat dan menawarkan jenis produk ini.

Untuk informasi tentang membuat AMI untuk produk Anda, lihat[Produk berbasis AMI di AWS Marketplace](ami-products.md). Untuk informasi tentang melengkapi AWS CloudFormation template untuk produk Anda, lihat[Tambahkan CloudFormation template ke produk Anda](cloudformation.md). 

Ketika Anda mendefinisikan aplikasi tanpa server Anda, Anda menggunakan AWS Serverless Application Model (AWS SAM) template yang Anda simpan di. AWS Serverless Application Repository AWS SAM adalah kerangka kerja sumber terbuka untuk membangun aplikasi tanpa server. Selama penyebaran, AWS SAM mengubah dan memperluas sintaks menjadi AWS Serverless Application Model sintaks. CloudFormation Parameter AWS Serverless Application Repository adalah repositori dikelola untuk aplikasi tanpa server. Hal ini memungkinkan Anda untuk menyimpan dan berbagi aplikasi yang dapat digunakan kembali sehingga pembeli dapat merakit dan men-deploy arsitektur tanpa server. 

**catatan**  
AWS Marketplace meninjau dan memvalidasi produk Anda sebelum listing Anda dibuat. Jika ada masalah yang harus Anda selesaikan sebelum penawaran terdaftar, kami akan mengirimkan pesan email kepada Anda.
Sebagai bagian dari memenuhi langganan, kami menyalin, aplikasi tanpa server AMIs, dan CloudFormation templat ke repositori yang AWS Marketplace dimiliki di masing-masing. Wilayah AWS Saat pembeli berlangganan produk Anda, kami memberi mereka akses, dan juga mbucketitahu mereka saat Anda memperbarui perangkat lunak Anda.

**Topics**
+ [Langkah 1: Buat aplikasi tanpa server](#cloudformation-serverless-application-procedure-step-1)
+ [Langkah 2: Publikasikan aplikasi Anda ke repositori](#cloudformation-serverless-application-procedure-step-2)
+ [Langkah 3: Buat CloudFormation template](#cloudformation-serverless-application-procedure-step-3)
+ [Langkah 4: Kirim file CloudFormation template dan konfigurasi Anda](#cloudformation-serverless-application-procedure-step-4)
+ [Langkah 5: Perbarui izin AWS Serverless Application Repository aplikasi Anda](#cloudformation-serverless-application-procedure-step-5)
+ [Langkah 6: Bagikan AMI Anda](#cloudformation-serverless-application-procedure-step-6)
+ [Langkah 7: Kirim CloudFormation produk Anda dengan AMI dan aplikasi tanpa server](#cloudformation-serverless-application-procedure-step-7)

## Langkah 1: Buat aplikasi tanpa server
<a name="cloudformation-serverless-application-procedure-step-1"></a>

Langkah pertama Anda adalah mengemas AWS Lambda fungsi yang digunakan untuk membuat aplikasi tanpa server Anda. Aplikasi Lambda adalah kombinasi dari fungsi Lambda, sumber peristiwa, dan sumber daya lainnya yang bekerja sama untuk melakukan tugas. Aplikasi tanpa server dapat sesederhana satu fungsi Lambda, atau dapat berisi beberapa fungsi dengan sumber daya lain, seperti, database APIs, dan pemetaan sumber peristiwa.

Gunakan AWS SAM untuk menentukan model untuk aplikasi tanpa server Anda. Untuk deskripsi nama dan jenis properti, lihat [AWS::Serverless::Application](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapplication)di AWS Labs pada GitHub. Berikut ini adalah contoh AWS SAM template dengan fungsi Lambda tunggal dan peran AWS Identity and Access Management (IAM).

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

## Langkah 2: Publikasikan aplikasi Anda ke repositori
<a name="cloudformation-serverless-application-procedure-step-2"></a>

Untuk menerbitkan aplikasi, Anda memuat naik kod aplikasi terlebih dahulu. Simpan artefak kode Anda (misalnya, fungsi Lambda, skrip, file konfigurasi) di bucket Amazon S3 yang dimiliki akun Anda. Ketika Anda mengunggah aplikasi Anda, awalnya disetel ke pribadi, yang berarti bahwa itu hanya tersedia untuk Akun AWS yang membuatnya. Anda harus membuat kebijakan IAM yang memberikan AWS Serverless Application Repository izin untuk mengakses artefak yang Anda unggah.

**Untuk mempublikasikan aplikasi tanpa server Anda ke repositori aplikasi tanpa server**

1. Buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Pilih bucket Amazon S3 yang Anda gunakan untuk mengemas aplikasi Anda.

1. Pilih tab **Izin**.

1. Pilih **Kebijakan Bucket**.

1. Salin dan tempel contoh pernyataan kebijakan berikut. 
**catatan**  
Pernyataan kebijakan contoh akan menghasilkan kesalahan sampai nilai untuk `aws:SourceAccount` dan `Resource` diperbarui dalam langkah-langkah berikut.

------
#### [ JSON ]

****  

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

------

   1. Ganti amzn-s3-demo-bucket di nilai `Resource` properti dengan nama bucket untuk bucket Anda. 

   1. Ganti {{123456789012}} `Condition` elemen dengan Akun AWS ID Anda. `Condition`Elemen memastikan bahwa AWS Serverless Application Repository hanya memiliki izin untuk mengakses aplikasi dari yang ditentukan Akun AWS.

1. Pilih **Simpan**.

1. Buka AWS Serverless Application Repository konsol di[https://console.aws.amazon.com/serverlessrepo](https://console.aws.amazon.com/serverlessrepo).

1. Pada halaman **Aplikasi Saya**, pilih **Publikasikan aplikasi**.

1. Lengkapi bidang yang wajib diisi dan bidang opsional, yang sesuai. Bidang yang wajib diisi:
   +  **Nama aplikasi** 
   +  **Pengarang** 
   +  **Deskripsi** 
   +  **URL kode sumber** 
   +  **Templat SAM** 

1. Pilih**Publikasikan Aplikasi**. 

**Untuk mempublikasikan versi berikutnya dari aplikasi Anda**

1. Buka AWS Serverless Application Repository konsol di[https://console.aws.amazon.com/serverlessrepo](https://console.aws.amazon.com/serverlessrepo).

1. Di panel navigasi, dari**Aplikasi saya**, pilih aplikasi.

1. Pilih**Publikasikan versi baru**.

Untuk informasi selengkapnya, lihat [Menerbitkan Aplikasi tanpa server Menggunakan CLI AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html).

## Langkah 3: Buat CloudFormation template
<a name="cloudformation-serverless-application-procedure-step-3"></a>

Untuk membangun CloudFormation template Anda, Anda harus memenuhi prasyarat template dan memberikan input dan parameter keamanan yang diperlukan. Untuk informasi selengkapnya, lihat [Anatomi templat](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html) di *Panduan AWS CloudFormation Pengguna*.

Dalam CloudFormation template Anda, Anda dapat mereferensikan aplikasi tanpa server dan AMI Anda. Anda juga dapat menggunakan CloudFormation templat bersarang dan referensi aplikasi tanpa server baik di template root maupun templat bersarang. Untuk mereferensikan aplikasi tanpa server, Anda menggunakan template. AWS SAM Anda dapat secara otomatis membuat AWS SAM template untuk aplikasi Anda dari AWS Serverless Application Repository. Berikut adalah contoh.

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

 AWS SAM Template berisi elemen-elemen berikut:
+  `ApplicationID`— Nama Sumber Daya Amazon (ARN) aplikasi Anda. Informasi ini terletak di**Aplikasi saya**Bagian dari AWS Serverless Application Repository.
+  `SemanticVersion`— Versi aplikasi tanpa server Anda. Anda dapat menemukan ini dari**Aplikasi saya**Bagian dari AWS Serverless Application Repository.
+  `Parameter`(opsional) — Parameter aplikasi.

**catatan**  
Untuk `ApplicationID` dan`SemanticVersion`, [fungsi intrinsik](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html) tidak didukung. Anda harus hardcode string itu. `ApplicationID`Ini diperbarui saat dikloning oleh AWS Marketplace.

Jika Anda berencana untuk referensi konfigurasi dan file skrip dalam CloudFormation template Anda, gunakan format berikut. Untuk template bersarang (`AWS::Cloudformation::Stack`), hanya `TemplateURLs` tanpa fungsi intrinsik yang didukung. Catatan`Parameters`konten dalam templat.

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

## Langkah 4: Kirim file CloudFormation template dan konfigurasi Anda
<a name="cloudformation-serverless-application-procedure-step-4"></a>

Untuk mengirimkan file CloudFormation template, konfigurasi, dan skrip, berikan AWS Marketplace izin untuk membaca bucket Amazon S3 tempat file ini disimpan. Untuk melakukannya, memperbarui kebijakan bucket Anda untuk menyertakan izin berikut.

------
#### [ JSON ]

****  

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

------

## Langkah 5: Perbarui izin AWS Serverless Application Repository aplikasi Anda
<a name="cloudformation-serverless-application-procedure-step-5"></a>

Untuk mengirimkan AWS Serverless Application Repository aplikasi Anda AWS Marketplace, Anda harus memberikan AWS Marketplace izin untuk membaca aplikasi Anda. Untuk melakukannya, tambahkan izin ke kebijakan yang terkait dengan aplikasi tanpa server Anda. Ada dua cara untuk memperbarui kebijakan aplikasi Anda:
+ AWS Serverless Application Repository Pilih aplikasi tanpa server Anda dari daftar. Pilih**Pembagian**tab, dan pilih**Buat Pernyataan**. Pada halaman **konfigurasi Pernyataan**, masukkan prinsip layanan berikut**assets.marketplace.amazonaws.com**, di bidang **ID Akun**. Lalu, pilih **Simpan**.
+ Gunakan AWS CLI perintah berikut untuk memperbarui kebijakan aplikasi Anda.

  ```
  aws serverlessrepo put-application-policy \
  --region {{region}} \
  --application-id {{application-arn}} \
  --statements Principals=assets.marketplace.amazonaws.com,Actions=Deploy
  ```

## Langkah 6: Bagikan AMI Anda
<a name="cloudformation-serverless-application-procedure-step-6"></a>

Semua yang AMIs dibangun dan diserahkan AWS Marketplace harus mematuhi semua kebijakan produk. Pemindaian AMI swalayan tersedia di. Portal Manajemen AWS Marketplace Dengan fitur ini, Anda dapat memulai pemindaian Anda. AMIs Anda menerima hasil pemindaian dengan cepat (biasanya, dalam waktu kurang dari satu jam) dengan umpan balik yang jelas di satu lokasi. Setelah AMI Anda berhasil dipindai, kirimkan AMI untuk diproses oleh tim Operasi AWS Marketplace Penjual dengan mengunggah formulir pemuatan produk Anda. 

## Langkah 7: Kirim CloudFormation produk Anda dengan AMI dan aplikasi tanpa server
<a name="cloudformation-serverless-application-procedure-step-7"></a>

Ingatlah hal-hal berikut sebelum Anda mengirimkan produk Anda:
+ Anda harus memberikan diagram arsitektur untuk setiap template. Diagram harus menggunakan ikon AWS produk untuk setiap AWS layanan yang digunakan melalui CloudFormation template. Juga, diagram harus menyertakan metadata untuk layanan. Untuk mengunduh ikon AWS arsitektur resmi kami, lihat [Ikon AWS Arsitektur](https://aws.amazon.com/architecture/icons).
+ Prakiraan biaya infrastruktur untuk setiap templat yang ditampilkan kepada pembeli didasarkan pada prakiraan yang Anda berikan dengan menggunakan [AWS Kalkulator Harga](https://calculator.s3.amazonaws.com/index.html). Dalam estimasi, sertakan daftar layanan yang akan digunakan sebagai bagian dari template, bersama dengan nilai default untuk penerapan tipikal.
+ Lengkapi formulir beban produk. Anda dapat menemukan formulir beban produk dari Portal Manajemen AWS Marketplace. Formulir beban produk yang berbeda diperlukan untuk produk AMI tunggal dan beberapa produk AMI. Dalam formulir pemuatan produk, Anda akan memberikan URL publik ke CloudFormation template Anda. CloudFormation template harus diserahkan dalam bentuk URL publik.
+ Gunakan Portal Manajemen AWS Marketplace untuk mengirimkan daftar Anda. Dari**Aset**, pilih**Unggahan file**, melampirkan file Anda, kemudian pilih**Mengunggah**. Setelah kami menerima template dan metadata Anda, AWS mulailah memproses permintaan Anda.

Setelah Anda mengirimkan daftar Anda, AWS Marketplace meninjau dan memvalidasi formulir pemuatan produk. Selain itu, AWS Marketplace regionalisasi AMIs dan aplikasi tanpa server, dan memperbarui pemetaan regional untuk template Anda atas nama Anda CloudFormation . Jika terjadi masalah, tim Operasi AWS Marketplace Penjual akan menghubungi Anda melalui email. 