

Amazon CodeCatalyst tidak lagi terbuka untuk pelanggan baru. Pelanggan yang sudah ada dapat terus menggunakan layanan ini seperti biasa. Lihat informasi yang lebih lengkap di [Cara bermigrasi dari CodeCatalyst](migration.md).

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

# Tutorial: Menyebarkan aplikasi tanpa server
<a name="deploy-tut-lambda"></a>

Dalam tutorial ini, Anda mempelajari cara membangun, menguji, dan menyebarkan aplikasi tanpa server sebagai CloudFormation tumpukan menggunakan alur kerja.

Aplikasi dalam tutorial ini adalah aplikasi web sederhana yang mengeluarkan pesan 'Hello World'. Ini terdiri dari AWS Lambda fungsi dan Amazon API Gateway, dan Anda membangunnya menggunakan [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html), yang merupakan ekstensi dari [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

**Topics**
+ [

## Prasyarat
](#deploy-tut-lambda-cfn-prereqs)
+ [

## Langkah 1: Buat repositori sumber
](#deploy-tut-lambda-cfn-source)
+ [

## Langkah 2: Buat AWS peran
](#deploy-tut-lambda-cfn-roles)
+ [

## Langkah 3: Tambahkan AWS peran ke CodeCatalyst
](#deploy-tut-lambda-cfn-roles-add)
+ [

## Langkah 4: Buat ember Amazon S3
](#deploy-tut-lambda-cfn-s3)
+ [

## Langkah 5: Tambahkan file sumber
](#deploy-tut-lambda-cfn-files)
+ [

## Langkah 6: Buat dan jalankan alur kerja
](#deploy-tut-lambda-cfn-workflow)
+ [

## Langkah 7: Buat perubahan
](#deploy-tut-lambda-cfn-change)
+ [

## Bersihkan
](#deploy-tut-lambda-cfn-clean-up)

## Prasyarat
<a name="deploy-tut-lambda-cfn-prereqs"></a>

Sebelum Anda memulai:
+ Anda membutuhkan CodeCatalyst **ruang** dengan AWS akun yang terhubung. Untuk informasi selengkapnya, lihat [Membuat ruang](spaces-create.md).
+ Di ruang Anda, Anda memerlukan proyek kosong yang disebut:

  ```
  codecatalyst-cfn-project
  ```

  Gunakan opsi **Mulai dari awal** untuk membuat proyek ini.

  Untuk informasi selengkapnya, lihat [Membuat proyek kosong di Amazon CodeCatalyst](projects-create.md#projects-create-empty).
+ Dalam proyek Anda, Anda memerlukan CodeCatalyst **lingkungan** yang disebut:

  ```
  codecatalyst-cfn-environment
  ```

  Konfigurasikan lingkungan ini sebagai berikut:
  + Pilih jenis apa pun, seperti **Non-produksi**.
  + Hubungkan AWS akun Anda ke sana.
  + Untuk peran **IAM Default, pilih peran** apa pun. Anda akan menentukan peran yang berbeda nanti.

  Untuk informasi selengkapnya, lihat [Menyebarkan ke dalam Akun AWS dan VPCs](deploy-environments.md).

## Langkah 1: Buat repositori sumber
<a name="deploy-tut-lambda-cfn-source"></a>

Pada langkah ini, Anda membuat repositori sumber di. CodeCatalyst Repositori ini digunakan untuk menyimpan file sumber tutorial, seperti file fungsi Lambda. 

Untuk informasi selengkapnya tentang repositori sumber, lihat. [Membuat repositori sumber](source-repositories-create.md)

**Untuk membuat repositori sumber**

1. Di CodeCatalyst, di panel navigasi, pilih **Kode**, lalu pilih **Repositori sumber**. 

1. Pilih **Tambahkan repositori**, lalu pilih **Buat** repositori.

1. Dalam **nama Repositori, masukkan:**

   ```
   codecatalyst-cfn-source-repository
   ```

1. Pilih **Buat**.

Anda sekarang telah membuat repositori yang disebut. `codecatalyst-cfn-source-repository`

## Langkah 2: Buat AWS peran
<a name="deploy-tut-lambda-cfn-roles"></a>

Pada langkah ini, Anda membuat peran AWS IAM berikut:
+ **Menyebarkan peran** — Memberikan izin tindakan ** CloudFormation tumpukan CodeCatalyst Deploy** untuk mengakses AWS akun dan CloudFormation layanan tempat Anda akan menerapkan aplikasi tanpa server Anda. Tindakan ** CloudFormation tumpukan Deploy** adalah bagian dari alur kerja Anda.
+ **Peran build** - Memberikan izin tindakan CodeCatalyst build untuk mengakses AWS akun Anda dan menulis ke Amazon S3 tempat paket aplikasi tanpa server Anda akan disimpan. Tindakan build adalah bagian dari alur kerja Anda.
+ **Peran tumpukan** - Memberikan CloudFormation izin untuk membaca dan memodifikasi sumber daya yang ditentukan dalam AWS SAM template yang akan Anda berikan nanti. Juga memberikan izin untuk CloudWatch.

Untuk informasi selengkapnya tentang peran IAM, lihat [peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) di *AWS Identity and Access Management Panduan Pengguna*.

**catatan**  
Untuk menghemat waktu, Anda dapat membuat satu peran, yang disebut `CodeCatalystWorkflowDevelopmentRole-spaceName` peran, alih-alih tiga peran yang tercantum sebelumnya. Untuk informasi selengkapnya, lihat [Membuat **CodeCatalystWorkflowDevelopmentRole-*spaceName***peran untuk akun dan ruang Anda](ipa-iam-roles.md#ipa-iam-roles-service-create). Pahami bahwa `CodeCatalystWorkflowDevelopmentRole-spaceName` peran tersebut memiliki izin yang sangat luas yang dapat menimbulkan risiko keamanan. Kami menyarankan Anda hanya menggunakan peran ini dalam tutorial dan skenario di mana keamanan kurang menjadi perhatian. Tutorial ini mengasumsikan Anda membuat tiga peran yang tercantum sebelumnya.

**catatan**  
[Peran eksekusi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) juga diperlukan, tetapi Anda tidak perlu membuatnya sekarang karena `sam-template.yml` file membuatnya untuk Anda ketika Anda menjalankan alur kerja di langkah 5.



**Untuk membuat peran penerapan**

1. Buat kebijakan untuk peran tersebut, sebagai berikut:

   1. Masuk ke AWS.

   1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Di panel navigasi, pilih **Kebijakan**.

   1. Pilih **Buat kebijakan**.

   1. Pilih tab **JSON**.

   1. Hapus kode yang ada.

   1. Tempel kode berikut:
**catatan**  
Pertama kali peran digunakan untuk menjalankan tindakan alur kerja, gunakan wildcard dalam pernyataan kebijakan sumber daya dan kemudian cakup kebijakan dengan nama sumber daya setelah tersedia.  

      ```
      "Resource": "*"
      ```

   1. Pilih **Berikutnya: Tanda**.

   1. Pilih **Berikutnya: Tinjau**.

   1. Dalam **Nama**, masukkan:

      ```
      codecatalyst-deploy-policy
      ```

   1. Pilih **Buat kebijakan**.

      Anda sekarang telah membuat kebijakan izin.

1. Buat peran deploy, sebagai berikut:

   1. Di panel navigasi, pilih **Peran**, lalu pilih **Buat peran**.

   1. Pilih **Kebijakan kepercayaan khusus**.

   1. Hapus kebijakan kepercayaan kustom yang ada.

   1. Tambahkan kebijakan kepercayaan khusus berikut:

   1. Pilih **Berikutnya**.

   1. Di **Kebijakan izin**, cari `codecatalyst-deploy-policy` dan pilih kotak centang.

   1. Pilih **Berikutnya**.

   1. Untuk **nama Peran**, masukkan:

      ```
      codecatalyst-deploy-role
      ```

   1. Untuk **deskripsi Peran**, masukkan:

      ```
      CodeCatalyst deploy role
      ```

   1. Pilih **Buat peran**.

   Anda sekarang telah membuat peran penerapan dengan kebijakan kepercayaan dan kebijakan izin.

1. Dapatkan peran penyebaran ARN, sebagai berikut:

   1. Di panel navigasi, pilih **Peran**.

   1. Di kotak pencarian, masukkan nama peran yang baru saja Anda buat (`codecatalyst-deploy-role`).

   1. Pilih peran dari daftar.

      Halaman **Ringkasan** peran muncul.

   1. Di bagian atas, salin nilai **ARN**.

   Anda sekarang telah membuat peran penerapan dengan izin yang sesuai, dan memperoleh ARN-nya.

**Untuk membuat peran build**

1. Buat kebijakan untuk peran tersebut, sebagai berikut:

   1. Masuk ke AWS.

   1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Di panel navigasi, pilih **Kebijakan**.

   1. Pilih **Buat kebijakan**.

   1. Pilih tab **JSON**.

   1. Hapus kode yang ada.

   1. Tempel kode berikut:
**catatan**  
Pertama kali peran digunakan untuk menjalankan tindakan alur kerja, gunakan wildcard dalam pernyataan kebijakan sumber daya dan kemudian cakup kebijakan dengan nama sumber daya setelah tersedia.  

      ```
      "Resource": "*"
      ```

   1. Pilih **Berikutnya: Tanda**.

   1. Pilih **Berikutnya: Tinjau**.

   1. Dalam **Nama**, masukkan:

      ```
      codecatalyst-build-policy
      ```

   1. Pilih **Buat kebijakan**.

      Anda sekarang telah membuat kebijakan izin.

1. Buat peran build, sebagai berikut:

   1. Di panel navigasi, pilih **Peran**, lalu pilih **Buat peran**.

   1. Pilih **Kebijakan kepercayaan khusus**.

   1. Hapus kebijakan kepercayaan kustom yang ada.

   1. Tambahkan kebijakan kepercayaan khusus berikut:

   1. Pilih **Berikutnya**.

   1. Di **Kebijakan izin**, cari `codecatalyst-build-policy` dan pilih kotak centang.

   1. Pilih **Berikutnya**.

   1. Untuk **nama Peran**, masukkan:

      ```
      codecatalyst-build-role
      ```

   1. Untuk **deskripsi Peran**, masukkan:

      ```
      CodeCatalyst build role
      ```

   1. Pilih **Buat peran**.

   Anda sekarang telah membuat peran build dengan kebijakan kepercayaan dan kebijakan izin.

1. Dapatkan peran membangun ARN, sebagai berikut:

   1. Di panel navigasi, pilih **Peran**.

   1. Di kotak pencarian, masukkan nama peran yang baru saja Anda buat (`codecatalyst-build-role`).

   1. Pilih peran dari daftar.

      Halaman **Ringkasan** peran muncul.

   1. Di bagian atas, salin nilai **ARN**.

   Anda sekarang telah membuat peran build dengan izin yang sesuai, dan memperoleh ARN-nya.<a name="deploy-tut-lambda-cfn-roles-stack"></a>

**Untuk membuat peran tumpukan**

1. Masuk untuk AWS menggunakan akun tempat Anda ingin menyebarkan tumpukan Anda.

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Buat peran tumpukan sebagai berikut:

   1. Di panel navigasi, pilih **Peran**.

   1. Pilih **Buat peran**.

   1. Pilih **Layanan AWS **.

   1. Di bagian **Use case**, pilih **CloudFormation**dari daftar drop-down.

   1. Pilih tombol **CloudFormation**radio.

   1. Di bagian bawah, pilih **Berikutnya**.

   1. Menggunakan kotak pencarian, temukan kebijakan izin berikut, lalu pilih kotak centang masing-masing.
**catatan**  
Jika Anda mencari kebijakan dan tidak muncul, pastikan untuk memilih **Hapus filter** dan coba lagi.
      + **CloudWatchFullAccess**
      + **AWS CloudFormationFullAccess**
      + **IAMFullAkses**
      + **AWS Lambda\$1 FullAccess**
      + **APIGatewayAdministrator Amazon**
      + **AmazonS3 FullAccess**
      + **Amazon EC2 ContainerRegistryFullAccess**

      Kebijakan pertama memungkinkan akses CloudWatch untuk mengaktifkan rollback tumpukan saat alarm terjadi.

      Kebijakan yang tersisa memungkinkan AWS SAM untuk mengakses layanan dan sumber daya di tumpukan yang akan digunakan dalam tutorial ini. Untuk informasi selengkapnya, lihat [Izin](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html) di *Panduan AWS Serverless Application Model Pengembang*.

   1. Pilih **Berikutnya**.

   1. Untuk **nama Peran**, masukkan:

      ```
      codecatalyst-stack-role
      ```

   1. Pilih **Buat peran**.

1. Dapatkan ARN peran tumpukan, sebagai berikut:

   1. Di panel navigasi, pilih **Peran**.

   1. Di kotak pencarian, masukkan nama peran yang baru saja Anda buat (`codecatalyst-stack-role`).

   1. Pilih peran dari daftar.

   1. Di bagian **Ringkasan**, salin nilai **ARN**. Anda membutuhkannya nanti.

   Anda sekarang telah membuat peran tumpukan dengan izin yang sesuai, dan Anda telah memperoleh ARN-nya.

## Langkah 3: Tambahkan AWS peran ke CodeCatalyst
<a name="deploy-tut-lambda-cfn-roles-add"></a>

Pada langkah ini, Anda menambahkan build role (`codecatalyst-build-role`) dan deploy role (`codecatalyst-deploy-role`) ke koneksi CodeCatalyst akun di ruang Anda.

**catatan**  
Anda tidak perlu menambahkan stack role (`codecatalyst-stack-role`) ke koneksi. Ini karena peran tumpukan digunakan oleh *CloudFormation*(not CodeCatalyst), *setelah* koneksi sudah dibuat antara CodeCatalyst dan AWS menggunakan peran penerapan. Karena peran tumpukan tidak digunakan oleh CodeCatalyst untuk mendapatkan akses ke AWS, itu tidak perlu dikaitkan dengan koneksi akun.

**Untuk menambahkan peran build dan deploy ke koneksi akun**

1. Masuk CodeCatalyst, navigasikan ke ruang Anda.

1. Pilih **AWS akun**. Daftar koneksi akun muncul.

1. Pilih koneksi akun yang mewakili AWS akun tempat Anda membuat peran build dan deploy.

1. Pilih **Kelola peran dari konsol AWS manajemen**.

   **Peran Add IAM ke halaman CodeCatalyst ruang Amazon** muncul. Anda mungkin perlu masuk untuk mengakses halaman.

1. Pilih **Tambahkan peran yang sudah Anda buat di IAM**.

   Daftar drop-down muncul. Daftar ini menampilkan semua peran IAM dengan kebijakan kepercayaan yang mencakup prinsip `codecatalyst-runner.amazonaws.com` dan `codecatalyst.amazonaws.com` layanan.

1. Dalam daftar drop-down, pilih`codecatalyst-build-role`, dan pilih **Tambah peran**.

1. Pilih **Tambahkan peran IAM**, pilih **Tambahkan peran yang ada yang telah Anda buat di IAM**, dan dalam daftar drop-down, pilih. `codecatalyst-deploy-role` Pilih **Tambahkan peran**.

   Anda sekarang telah menambahkan peran build dan deploy ke ruang Anda.

1. Salin nilai **nama CodeCatalyst tampilan Amazon**. Anda akan membutuhkan nilai ini nanti, saat membuat alur kerja Anda.

## Langkah 4: Buat ember Amazon S3
<a name="deploy-tut-lambda-cfn-s3"></a>

Pada langkah ini, Anda membuat bucket Amazon S3 tempat Anda menyimpan file paket deployment aplikasi tanpa server.

**Untuk membuat bucket Amazon S3**

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

1. Di panel utama, pilih **Buat ember**.

1. Untuk **nama Bucket**, masukkan:

   ```
   codecatalyst-cfn-s3-bucket
   ```

1. Untuk **Wilayah AWS **, pilih Wilayah. Tutorial ini mengasumsikan Anda memilih **US West (Oregon) us-west-2**. Untuk informasi tentang Wilayah yang didukung oleh Amazon S3, lihat [titik akhir dan kuota Amazon Simple Storage Service](https://docs.aws.amazon.com/general/latest/gr/s3.html) di. *Referensi Umum AWS*

1. Di bagian bawah halaman, pilih **Buat ember**.

Anda sekarang telah membuat ember yang disebut **codecatalyst-cfn-s3-bucket** di Wilayah AS Barat (Oregon) us-west-2.

## Langkah 5: Tambahkan file sumber
<a name="deploy-tut-lambda-cfn-files"></a>

Pada langkah ini, Anda menambahkan beberapa file sumber aplikasi ke repositori CodeCatalyst sumber Anda. `hello-world`Folder berisi file aplikasi yang akan Anda gunakan. `tests`Folder berisi tes unit. Struktur folder adalah sebagai berikut:

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

### .npmignore
<a name="deploy-tut-lambda-cfn-files-npmignore"></a>

`.npmignore`File menunjukkan file dan folder npm mana yang harus dikecualikan dari paket aplikasi. Dalam tutorial ini, npm mengecualikan `tests` folder karena bukan bagian dari aplikasi.

**Untuk menambahkan file.npmignore**

1. Buka CodeCatalyst konsol di [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Pilih proyek Anda, `codecatalyst-cfn-project`

1. Di panel navigasi, pilih **Kode**, lalu pilih **Repositori sumber**.

1. Dari daftar repositori sumber, pilih repositori Anda,. `codecatalyst-cfn-source-repository` 

1. Di **File**, pilih **Buat file**.

1. Untuk **nama File**, masukkan:

   ```
   .npmignore
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   tests/*
   ```

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah membuat file yang disebut `.npmignore` di root repositori Anda.

### berkas package.json
<a name="deploy-tut-lambda-cfn-files-package-json"></a>

`package.json`File berisi metadata penting tentang proyek Node Anda seperti nama proyek, nomor versi, deskripsi, dependensi, dan detail lain yang menjelaskan cara berinteraksi dan menjalankan aplikasi Anda.

`package.json`Dalam tutorial ini mencakup daftar dependensi dan skrip. `test` Skrip pengujian melakukan hal berikut:
+ Menggunakan [moka](https://mochajs.org/), skrip pengujian menjalankan pengujian unit yang ditentukan `hello-world/tests/unit/` dan menulis hasilnya ke `junit.xml` file menggunakan reporter [xunit]().
+ [Menggunakan [Istanbul (nyc)](https://istanbul.js.org/), skrip pengujian menghasilkan laporan cakupan kode (`clover.xml`) menggunakan reporter semanggi.](https://openclover.org/doc/manual/4.2.0/general--about-openclover.html) Untuk informasi lebih lanjut, lihat [Menggunakan reporter alternatif](https://istanbul.js.org/docs/advanced/alternative-reporters/#clover) dalam dokumentasi Istanbul.

**Untuk menambahkan file package.json**

1. Di repositori Anda, di **File**, pilih **Buat** file.

1. Untuk **nama File**, masukkan:

   ```
   package.json
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   {
     "name": "hello_world",
     "version": "1.0.0",
     "description": "hello world sample for NodeJS",
     "main": "app.js",
     "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs",
     "author": "SAM CLI",
     "license": "MIT",
     "dependencies": {
       "axios": "^0.21.1",
       "nyc": "^15.1.0"
     },
     "scripts": {
       "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml"
     },
     "devDependencies": {
       "aws-sdk": "^2.815.0",
       "chai": "^4.2.0",
       "mocha": "^8.2.1"
     }
   }
   ```

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah menambahkan file yang dipanggil `package.json` ke root repositori.

### file sam-template.yml
<a name="deploy-tut-lambda-cfn-files-sam-template-yml"></a>

`sam-template.yml`File berisi instruksi untuk menerapkan fungsi Lambda dan API Gateway dan mengonfigurasinya bersama-sama. Ini mengikuti [spesifikasi AWS Serverless Application Model template](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html), yang memperluas spesifikasi CloudFormation template.

Anda menggunakan AWS SAM template dalam tutorial ini alih-alih CloudFormation template biasa karena AWS SAM menawarkan tipe sumber daya [AWS: :Serverless: :Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) yang bermanfaat. Tipe ini melakukan banyak behind-the-scenes konfigurasi yang biasanya harus Anda tulis untuk menggunakan CloudFormation sintaks dasar. Misalnya, `AWS::Serverless::Function` membuat fungsi Lambda, peran eksekusi Lambda, dan pemetaan sumber peristiwa yang memulai fungsi. Anda harus mengkodekan semua ini jika Anda ingin menulisnya menggunakan dasar CloudFormation.

Meskipun tutorial ini menggunakan template yang telah ditulis sebelumnya, Anda dapat membuatnya sebagai bagian dari alur kerja Anda menggunakan tindakan build. Untuk informasi selengkapnya, lihat [Menyebarkan tumpukan CloudFormation](deploy-action-cfn.md).

**Untuk menambahkan file sam-template.yml.**

1. Di repositori Anda, di **File**, pilih **Buat** file.

1. Untuk **nama File**, masukkan:

   ```
   sam-template.yml
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: >
     serverless-api
   
     Sample SAM Template for serverless-api
     
   # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
   Globals:
     Function:
       Timeout: 3
   
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
       Properties:
         CodeUri: hello-world/
         Handler: app.lambdaHandler
         Runtime: nodejs12.x
         Events:
           HelloWorld:
             Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
             Properties:
               Path: /hello
               Method: get
   
   Outputs:
     # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function
     # Find out about other implicit resources you can reference within AWS SAM at
     # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
     HelloWorldApi:
       Description: "API Gateway endpoint URL for the Hello World function"
       Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
     HelloWorldFunction:
       Description: "Hello World Lambda function ARN"
       Value: !GetAtt HelloWorldFunction.Arn
     HelloWorldFunctionIamRole:
       Description: "Implicit Lambda execution role created for the Hello World function"
       Value: !GetAtt HelloWorldFunctionRole.Arn
   ```

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah menambahkan file yang disebut `sam-template.yml` di bawah folder root repositori Anda.

### setup-sam.sh berkas
<a name="deploy-tut-lambda-cfn-files-setup-sam"></a>

`setup-sam.sh`File berisi instruksi untuk mengunduh dan menginstal utilitas AWS SAM CLI. Alur kerja menggunakan utilitas ini untuk mengemas `hello-world` sumber.

**Untuk menambahkan file setup-sam.sh**

1. Di repositori Anda, di **File**, pilih **Buat** file.

1. Untuk **nama File**, masukkan:

   ```
   setup-sam.sh
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   #!/usr/bin/env bash
   echo "Setting up sam"
   
   yum install unzip -y
   
   curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
   unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory
   
   ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2
   ```

   Dalam kode sebelumnya, ganti *us-west-2* dengan Wilayah Anda AWS .

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah menambahkan file yang dipanggil `setup-sam.sh` ke root repositori.

### app.js berkas
<a name="deploy-tut-lambda-cfn-files-app-js"></a>

`app.js`Berisi kode fungsi Lambda. Dalam tutorial ini, kode mengembalikan teks`hello world`.

**Untuk menambahkan file app.js**

1. Di repositori Anda, di **File**, pilih **Buat** file.

1. Untuk **nama File**, masukkan:

   ```
   hello-world/app.js
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   // const axios = require('axios')
   // const url = 'http://checkip.amazonaws.com/';
   let response;
   
   /**
    *
    * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
    * @param {Object} event - API Gateway Lambda Proxy Input Format
    *
    * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html 
    * @param {Object} context
    *
    * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
    * @returns {Object} object - API Gateway Lambda Proxy Output Format
    * 
    */
   exports.lambdaHandler = async (event, context) => {
       try {
           // const ret = await axios(url);
           response = {
               'statusCode': 200,
               'body': JSON.stringify({
                   message: 'hello world',
                   // location: ret.data.trim()
               })
           }
       } catch (err) {
           console.log(err);
           return err;
       }
   
       return response
   };
   ```

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah membuat folder bernama `hello-world` dan file bernama`app.js`.

### test-handler.js berkas
<a name="deploy-tut-lambda-cfn-files-test-handler-js"></a>

`test-handler.js`File berisi pengujian unit untuk fungsi Lambda.

**Untuk menambahkan file test-handler.js**

1. Di repositori Anda, di **File**, pilih **Buat** file.

1. Untuk **nama File**, masukkan:

   ```
   hello-world/tests/unit/test-handler.js
   ```

1. Di kotak teks, masukkan kode berikut:

   ```
   'use strict';
   
   const app = require('../../app.js');
   const chai = require('chai');
   const expect = chai.expect;
   var event, context;
   
   describe('Tests index', function () {
       it('verifies successful response', async () => {
           const result = await app.lambdaHandler(event, context)
   
           expect(result).to.be.an('object');
           expect(result.statusCode).to.equal(200);
           expect(result.body).to.be.an('string');
   
           let response = JSON.parse(result.body);
   
           expect(response).to.be.an('object');
           expect(response.message).to.be.equal("hello world");
           // expect(response.location).to.be.an("string");
       });
   });
   ```

1. Pilih **Komit**, lalu pilih **Komit** lagi.

   Anda sekarang telah menambahkan file yang disebut `test-handler.js` di bawah `hello-world/tests/unit` folder.

Anda sekarang telah menambahkan semua file sumber Anda.

Luangkan waktu sejenak untuk memeriksa ulang pekerjaan Anda dan pastikan Anda menempatkan semua file di folder yang benar. Struktur folder adalah sebagai berikut:

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— README.md
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

## Langkah 6: Buat dan jalankan alur kerja
<a name="deploy-tut-lambda-cfn-workflow"></a>

Pada langkah ini, Anda membuat alur kerja yang mengemas kode sumber Lambda Anda dan menerapkannya. Alur kerja terdiri dari blok bangunan berikut yang berjalan secara berurutan:
+ Pemicu - Pemicu ini memulai alur kerja yang dijalankan secara otomatis saat Anda mendorong perubahan ke repositori sumber Anda. Untuk informasi lebih lanjut tentang menggunakan pemicu, lihat [Memulai alur kerja berjalan secara otomatis menggunakan pemicu](workflows-add-trigger.md).
+ Tindakan pengujian (`Test`) — Pada pemicu, tindakan ini menginstal [manajer paket Node (npm)](https://www.npmjs.com/), dan kemudian menjalankan perintah. `npm run test` Perintah ini memberitahu npm untuk menjalankan `test` script didefinisikan dalam `package.json` file. `test`Skrip, pada gilirannya, menjalankan pengujian unit dan menghasilkan dua laporan: laporan pengujian (`junit.xml`) dan laporan cakupan kode (`clover.xml`). Untuk informasi selengkapnya, lihat [berkas package.json](#deploy-tut-lambda-cfn-files-package-json).

  Selanjutnya, tindakan pengujian mengubah laporan XHTML menjadi CodeCatalyst laporan dan menampilkannya di CodeCatalyst konsol, di bawah tab **Laporan** tindakan pengujian.

  Untuk informasi lebih lanjut tentang tindakan pengujian, lihat[Pengujian dengan alur kerjaPengujian dengan alur kerja](test-workflow-actions.md).
+ Tindakan build (`BuildBackend`) — Setelah menyelesaikan tindakan pengujian, tindakan build mengunduh dan menginstal AWS SAM CLI, mengemas sumbernya, dan menyalin paket `hello-world` ke bucket Amazon S3 Anda, tempat layanan Lambda mengharapkannya. Tindakan ini juga mengeluarkan file AWS SAM template baru yang disebut `sam-template-packaged.yml` dan menempatkannya dalam artefak keluaran yang disebut. `buildArtifact`

  Untuk informasi selengkapnya tentang tindakan build, lihat[Membangun dengan alur kerja](build-workflow-actions.md).
+ Tindakan penerapan (`DeployCloudFormationStack`) — Setelah menyelesaikan aksi build, tindakan deploy mencari artefak keluaran yang dihasilkan oleh build action (`buildArtifact`), menemukan AWS SAM template di dalamnya, dan kemudian menjalankan template. AWS SAM Template membuat tumpukan yang menyebarkan aplikasi tanpa server.

**Untuk membuat alur kerja**

1. **Di panel navigasi, pilih **CI/CD, lalu pilih Alur** kerja.**

1. Pilih **Buat alur kerja**.

1. Untuk **repositori Sumber, pilih**. `codecatalyst-cfn-source-repository`

1. Untuk **Cabang**, pilih`main`.

1. Pilih **Buat**.

1. Hapus kode sampel YAMAL.

1. Tambahkan kode YAML berikut:
**catatan**  
Dalam kode YAMAL berikut, Anda dapat menghilangkan `Connections:` bagian jika Anda mau. Jika Anda menghilangkan bagian ini, Anda harus memastikan bahwa peran yang ditentukan dalam bidang **peran IAM default** di lingkungan Anda mencakup izin dan kebijakan kepercayaan dari kedua peran yang dijelaskan. [Langkah 2: Buat AWS peran](#deploy-tut-lambda-cfn-roles) Untuk informasi selengkapnya tentang menyiapkan lingkungan dengan peran IAM default, lihat[Pembuatan lingkungan](deploy-environments-creating-environment.md).

   ```
   Name: codecatalyst-cfn-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: PUSH
       Branches:
         - main   
   Actions:
     Test:
       Identifier: aws/managed-test@v1
       Inputs:
         Sources:
           - WorkflowSource
       Outputs:
         Reports:
           CoverageReport:
             Format: CLOVERXML
             IncludePaths:
               - "coverage/*"
           TestReport:
             Format: JUNITXML
             IncludePaths:
               - junit.xml
       Configuration:
         Steps:
           - Run: npm install
           - Run: npm run test  
     BuildBackend:
       Identifier: aws/build@v1
       DependsOn:
         - Test
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-build-role
       Inputs:
         Sources:
           - WorkflowSource
       Configuration: 
         Steps:
           - Run: . ./setup-sam.sh
           - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2
       Outputs:
         Artifacts:
           - Name: buildArtifact
             Files:
               - "**/*"
     DeployCloudFormationStack:
       Identifier: aws/cfn-deploy@v1
       DependsOn: 
         - BuildBackend
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-deploy-role
       Inputs:
         Artifacts:
           - buildArtifact
         Sources: []
       Configuration:
         name: codecatalyst-cfn-stack
         region: us-west-2
         role-arn: arn:aws:iam::111122223333:role/StackRole
         template: ./sam-template-packaged.yml
         capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
   ```

   Pada kode sebelumnya, ganti:
   + Kedua contoh *codecatalyst-cfn-environment* dengan nama lingkungan Anda.
   + Kedua contoh *codecatalyst-account-connection* dengan nama tampilan koneksi akun Anda. Nama tampilan mungkin nomor. Untuk informasi selengkapnya, lihat [Langkah 3: Tambahkan AWS peran ke CodeCatalyst](#deploy-tut-lambda-cfn-roles-add).
   + *codecatalyst-build-role*dengan nama peran build yang Anda buat[Langkah 2: Buat AWS peran](#deploy-tut-lambda-cfn-roles).
   + *codecatalyst-cfn-s3-bucket*dengan nama bucket Amazon S3 yang Anda buat. [Langkah 4: Buat ember Amazon S3](#deploy-tut-lambda-cfn-s3)
   + Kedua instance *us-west-2* dengan Wilayah tempat bucket Amazon S3 Anda berada (instance pertama) dan tempat tumpukan Anda akan diterapkan (instance kedua). Daerah ini bisa berbeda. Tutorial ini mengasumsikan bahwa kedua Wilayah diatur ke`us-west-2`. Untuk detail tentang Wilayah yang didukung oleh Amazon S3 dan CloudFormation, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) di. *Referensi Umum AWS*
   + *codecatalyst-deploy-role*dengan nama peran penerapan yang Anda buat. [Langkah 2: Buat AWS peran](#deploy-tut-lambda-cfn-roles)
   + *codecatalyst-cfn-environment*dengan nama lingkungan yang Anda buat[Prasyarat](#deploy-tut-lambda-cfn-prereqs).
   + *arn:aws:iam::111122223333:role/StackRole*dengan Nama Sumber Daya Amazon (ARN) dari peran tumpukan yang Anda buat. [Langkah 2: Buat AWS peran](#deploy-tut-lambda-cfn-roles)
**catatan**  
Jika Anda memutuskan untuk tidak membuat peran build, deploy, dan stack, ganti *codecatalyst-build-role**codecatalyst-deploy-role*, dan *arn:aws:iam::111122223333:role/StackRole* dengan nama atau ARN peran tersebut. `CodeCatalystWorkflowDevelopmentRole-spaceName` Untuk informasi selengkapnya tentang peran ini, silakan lihat [Langkah 2: Buat AWS peran](#deploy-tut-lambda-cfn-roles).

   Untuk informasi tentang properti dalam kode yang ditunjukkan sebelumnya, lihat[Tindakan 'Menyebarkan CloudFormation tumpukan' YAMAL](deploy-action-ref-cfn.md).

1. (Opsional) Pilih **Validasi** untuk memastikan kode YAMG valid sebelum melakukan.

1. Pilih **Terapkan**.

1. Pada kotak dialog **Commit workflow**, masukkan yang berikut ini:

   1. Untuk **nama file Workflow**, pertahankan default,`codecatalyst-cfn-workflow`.

   1. Untuk **pesan Commit**, masukkan:

      ```
      add initial workflow file
      ```

   1. Untuk **Repositori, pilih**. **codecatalyst-cfn-source-repository**

   1. Untuk **nama Branch**, pilih **main**.

   1. Pilih **Terapkan**.

   Anda sekarang telah membuat alur kerja. Jalankan alur kerja dimulai secara otomatis karena pemicu yang ditentukan di bagian atas alur kerja. Khususnya, ketika Anda melakukan (dan mendorong) `codecatalyst-cfn-workflow.yaml` file ke repositori sumber Anda, pemicu memulai alur kerja dijalankan.

**Untuk melihat alur kerja yang sedang berjalan**

1. **Di panel navigasi, pilih **CI/CD, lalu pilih Alur** kerja.**

1. Pilih alur kerja yang baru saja Anda buat:`codecatalyst-cfn-workflow`.

1. Pilih tab **Runs**.

1. Di kolom **Run ID**, pilih run ID.

1. Pilih **Uji** untuk melihat kemajuan tes.

1. Pilih **BuildBackend**untuk melihat kemajuan pembangunan.

1. Pilih **DeployCloudFormationStack**untuk melihat kemajuan penerapan.

   Untuk informasi selengkapnya tentang melihat detail run, lihat[Melihat status dan detail alur kerja](workflows-view-run.md).

1. Saat **DeployCloudFormationStack**tindakan selesai, lakukan hal berikut:
   + Jika alur kerja berjalan berhasil, pergi ke prosedur berikutnya.
   + Jika alur kerja gagal pada **Pengujian** atau **BuildBackend**tindakan, pilih **Log** untuk memecahkan masalah.
   + Jika alur kerja berjalan gagal pada **DeployCloudFormationStack**tindakan, pilih tindakan penerapan, lalu pilih tab **Ringkasan**. Gulir ke bagian **CloudFormation peristiwa** untuk melihat pesan kesalahan terperinci. Jika terjadi rollback, hapus `codecatalyst-cfn-stack` tumpukan melalui CloudFormation konsol AWS sebelum menjalankan kembali alur kerja.

**Untuk memverifikasi penyebaran**

1. Setelah penerapan berhasil, pilih **Variabel (7)** dari bilah menu horizontal di dekat bagian atas. (Jangan memilih **Variabel** di panel di sebelah kanan.)

1. Di samping **HelloWorldApi**, tempel `https://` URL ke browser.

   Pesan JSON **hello world** dari fungsi Lambda ditampilkan, menunjukkan bahwa alur kerja berhasil digunakan dan dikonfigurasi fungsi Lambda dan API Gateway.
**Tip**  
Anda dapat CodeCatalyst menampilkan URL ini dalam diagram alur kerja dengan beberapa konfigurasi kecil. Untuk informasi selengkapnya, lihat [Menampilkan URL aplikasi dalam diagram alur kerja](deploy-app-url.md).

**Untuk memverifikasi hasil pengujian unit dan cakupan kode**

1. Dalam diagram alur kerja, pilih **Uji**, lalu pilih **Laporan**.

1. Pilih **TestReport**untuk melihat hasil pengujian unit, atau pilih **CoverageReport**untuk melihat detail cakupan kode file yang sedang diuji, dalam hal ini, `app.js` dan`test-handler.js`.

**Untuk memverifikasi sumber daya yang digunakan**

1. Masuk ke Konsol Manajemen AWS dan buka konsol API Gateway di [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/). 

1. Amati **codecatalyst-cfn-stack**API yang dibuat AWS SAM template. Nama API berasal dari `Configuration/name` nilai dalam file definisi alur kerja (`codecatalyst-cfn-workflow.yaml`).

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Di panel navigasi, pilih **Fungsi**.

1. Pilih fungsi Lambda Anda,. `codecatalyst-cfn-stack-HelloWorldFunction-string`

1. Anda dapat melihat bagaimana API Gateway adalah pemicu untuk fungsi tersebut. Integrasi ini secara otomatis dikonfigurasi oleh jenis AWS SAM `AWS::Serverless::Function` sumber daya.

## Langkah 7: Buat perubahan
<a name="deploy-tut-lambda-cfn-change"></a>

Pada langkah ini, Anda membuat perubahan pada kode sumber Lambda Anda dan melakukan itu. Komit ini memulai alur kerja baru. Proses ini menerapkan fungsi Lambda baru dalam skema biru-hijau yang menggunakan konfigurasi perpindahan lalu lintas default yang ditentukan di konsol Lambda.

**Untuk membuat perubahan pada sumber Lambda Anda**

1. Masuk CodeCatalyst, navigasikan ke proyek Anda.

1. Di panel navigasi, pilih **Kode**, lalu pilih **Repositori sumber**.

1. Pilih repositori `codecatalyst-cfn-source-repository` sumber Anda.

1. Ubah file aplikasi:

   1. Pilih `hello-world` foldernya.

   1. Pilih `app.js` file.

   1. Pilih **Edit**.

   1. Pada baris 23, ubah `hello world` ke**Tutorial complete\$1**.

   1. Pilih **Komit**, lalu pilih **Komit** lagi.

      Komit menyebabkan alur kerja berjalan dimulai. Proses ini akan gagal karena Anda belum memperbarui pengujian unit untuk mencerminkan perubahan nama.

1. Perbarui pengujian unit:

   1. Pilih `hello-world\tests\unit\test-handler.js`.

   1. Pilih **Edit**.

   1. Pada baris 19, ubah `hello world` ke**Tutorial complete\$1**.

   1. Pilih **Komit**, lalu pilih **Komit** lagi.

      Komit menyebabkan alur kerja lain dijalankan. Lari ini akan berhasil.

1. **Di panel navigasi, pilih **CI/CD, lalu pilih Alur** kerja.**

1. Pilih`codecatalyst-cfn-workflow`, lalu pilih **Runs**.

1. Pilih ID run dari run terbaru. Seharusnya masih dalam proses.

1. Pilih **Uji**, **BuildBackend**, dan **DeployCloudFormationStack**untuk melihat alur kerja berjalan kemajuan.

1. Saat alur kerja selesai, pilih **Variabel (7)** di dekat bagian atas.

1. Di samping **HelloWorldApi**, tempel `https://` URL ke browser.

   Sebuah `Tutorial complete!` pesan muncul di browser, menunjukkan bahwa aplikasi baru Anda berhasil digunakan.

## Bersihkan
<a name="deploy-tut-lambda-cfn-clean-up"></a>

Bersihkan file dan layanan yang digunakan dalam tutorial ini untuk menghindari biaya untuk mereka.

**Untuk membersihkan di CodeCatalyst konsol**

1. Buka CodeCatalyst konsol di [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Hapus`codecatalyst-cfn-workflow`.

1. Hapus`codecatalyst-cfn-environment`.

1. Hapus`codecatalyst-cfn-source-repository`.

1. Hapus`codecatalyst-cfn-project`.

**Untuk membersihkan di Konsol Manajemen AWS**

1. Bersihkan CloudFormation, sebagai berikut:

   1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

   1. Hapus`codecatalyst-cfn-stack`.

      Menghapus tumpukan menghapus semua sumber daya tutorial dari API Gateway dan layanan Lambda.

1. Bersihkan di Amazon S3, sebagai berikut:

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

   1. Pilih `codecatalyst-cfn-s3-bucket`.

   1. Hapus isi ember.

   1. Hapus bucket.

1. Bersihkan di IAM, sebagai berikut:

   1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Hapus`codecatalyst-deploy-policy`.

   1. Hapus`codecatalyst-build-policy`.

   1. Hapus`codecatalyst-stack-policy`.

   1. Hapus`codecatalyst-deploy-role`.

   1. Hapus`codecatalyst-build-role`.

   1. Hapus`codecatalyst-stack-role`.

**Dalam tutorial ini, Anda belajar bagaimana menerapkan aplikasi tanpa server sebagai CloudFormation tumpukan menggunakan CodeCatalyst alur kerja dan tindakan tumpukan Deploy. CloudFormation **