

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

# Membuat fungsi Lambda yang tahan lama
<a name="durable-getting-started"></a>

Untuk memulai dengan fungsi Lambda yang tahan lama, gunakan konsol Lambda untuk membuat fungsi yang tahan lama. Dalam beberapa menit, Anda dapat membuat dan menerapkan fungsi tahan lama yang menggunakan langkah-langkah dan menunggu untuk menunjukkan eksekusi berbasis pos pemeriksaan.

Saat Anda menjalankan tutorial, Anda akan mempelajari konsep fungsi dasar yang tahan lama, seperti cara menggunakan `DurableContext` objek, membuat pos pemeriksaan dengan langkah-langkah, dan menjeda eksekusi dengan menunggu. Anda juga akan mempelajari cara kerja replay saat fungsi Anda dilanjutkan setelah menunggu.

Untuk menjaga hal-hal sederhana, tutorial ini menunjukkan kepada Anda cara membuat fungsi Anda menggunakan runtime Python atau Node.js. Dengan bahasa yang ditafsirkan ini, Anda dapat mengedit kode fungsi langsung di editor kode bawaan konsol.

**catatan**  
Fungsi tahan lama saat ini mendukung Python, Node.js (JavaScript/TypeScript), dan runtime Java, serta gambar kontainer (OCI). Untuk daftar lengkap versi runtime yang didukung dan opsi gambar kontainer, lihat [Runtime yang didukung untuk fungsi tahan lama](durable-supported-runtimes.md). Untuk informasi selengkapnya tentang penggunaan gambar kontainer dengan Lambda, lihat Membuat gambar [kontainer Lambda di](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html) Panduan Pengembang Lambda.

**Tip**  
Untuk mempelajari cara membuat **solusi tanpa server**, lihat Panduan Pengembang Tanpa [Server](https://docs.aws.amazon.com/serverless/latest/devguide/).

## Prasyarat
<a name="durable-getting-started-prerequisites"></a>

### Mendaftar untuk Akun AWS
<a name="sign-up-for-aws"></a>

Jika Anda tidak memiliki Akun AWS, selesaikan langkah-langkah berikut untuk membuatnya.

**Untuk mendaftar untuk Akun AWS**

1. Buka [https://portal.aws.amazon.com/billing/pendaftaran.](https://portal.aws.amazon.com/billing/signup)

1. Ikuti petunjuk online.

   Bagian dari prosedur pendaftaran melibatkan menerima panggilan telepon atau pesan teks dan memasukkan kode verifikasi pada keypad telepon.

   Saat Anda mendaftar untuk sebuah Akun AWS, sebuah *Pengguna root akun AWS*dibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan [tugas yang memerlukan akses pengguna root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS mengirimi Anda email konfirmasi setelah proses pendaftaran selesai. Kapan saja, Anda dapat melihat aktivitas akun Anda saat ini dan mengelola akun Anda dengan masuk [https://aws.amazon.com.rproxy.goskope.comke/](https://aws.amazon.com/) dan memilih **Akun Saya**.

### Buat pengguna dengan akses administratif
<a name="create-an-admin"></a>

Setelah Anda mendaftar Akun AWS, amankan Pengguna root akun AWS, aktifkan AWS IAM Identity Center, dan buat pengguna administratif sehingga Anda tidak menggunakan pengguna root untuk tugas sehari-hari.

**Amankan Anda Pengguna root akun AWS**

1.  Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/)sebagai pemilik akun dengan memilih **pengguna Root** dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

   Untuk bantuan masuk dengan menggunakan pengguna root, lihat [Masuk sebagai pengguna root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) di *AWS Sign-In Panduan Pengguna*.

1. Mengaktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

   Untuk petunjuk, lihat [Mengaktifkan perangkat MFA virtual untuk pengguna Akun AWS root (konsol) Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) di Panduan Pengguna *IAM*.

**Buat pengguna dengan akses administratif**

1. Aktifkan Pusat Identitas IAM.

   Untuk mendapatkan petunjuk, silakan lihat [Mengaktifkan AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) di *Panduan Pengguna AWS IAM Identity Center *.

1. Di Pusat Identitas IAM, berikan akses administratif ke pengguna.

   Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat [Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) di *Panduan AWS IAM Identity Center Pengguna*.

**Masuk sebagai pengguna dengan akses administratif**
+ Untuk masuk dengan pengguna Pusat Identitas IAM, gunakan URL masuk yang dikirim ke alamat email saat Anda membuat pengguna Pusat Identitas IAM.

  Untuk bantuan masuk menggunakan pengguna Pusat Identitas IAM, lihat [Masuk ke portal AWS akses](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) di *Panduan AWS Sign-In Pengguna*.

**Tetapkan akses ke pengguna tambahan**

1. Di Pusat Identitas IAM, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

   Untuk petunjuknya, lihat [Membuat set izin](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) di *Panduan AWS IAM Identity Center Pengguna*.

1. Tetapkan pengguna ke grup, lalu tetapkan akses masuk tunggal ke grup.

   Untuk petunjuk, lihat [Menambahkan grup](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) di *Panduan AWS IAM Identity Center Pengguna*.

## Buat fungsi Lambda yang tahan lama dengan konsol
<a name="getting-started-create-durable-function"></a>

Dalam contoh ini, fungsi tahan lama Anda memproses pesanan melalui beberapa langkah dengan pos pemeriksaan otomatis. Fungsi mengambil objek JSON yang berisi ID pesanan, memvalidasi pesanan, memproses pembayaran, dan mengonfirmasi pesanan. Setiap langkah secara otomatis diperiksa, jadi jika fungsi terganggu, itu dilanjutkan dari langkah terakhir yang diselesaikan.

Fungsi Anda juga menunjukkan operasi tunggu, menghentikan eksekusi untuk waktu yang singkat untuk mensimulasikan menunggu konfirmasi eksternal.

**Untuk membuat fungsi yang tahan lama dengan konsol**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari awal**.

1. Di panel **Informasi dasar**, untuk **nama Fungsi**, masukkan`myDurableFunction`.

1. Untuk **Runtime**, pilih **Node.js 24 atau **Python** 3.14**.

1. Pilih **Aktifkan eksekusi yang tahan lama**.

Lambda membuat fungsi tahan lama Anda dengan [peran eksekusi](lambda-intro-execution-role.md) yang menyertakan izin untuk operasi pos pemeriksaan (dan). `lambda:CheckpointDurableExecution` `lambda:GetDurableExecutionState`

**catatan**  
Runtime Lambda menyertakan Durable Execution SDK, sehingga Anda dapat menguji fungsi yang tahan lama tanpa dependensi kemasan. Namun, sebaiknya sertakan SDK dalam paket penerapan Anda untuk produksi. Ini memastikan konsistensi versi dan menghindari kemungkinan pembaruan runtime yang mungkin memengaruhi fungsi Anda.

Gunakan editor kode bawaan konsol untuk menambahkan kode fungsi tahan lama Anda.

------
#### [ Node.js ]

**Untuk memodifikasi kode di konsol**

1. Pilih tab **Kode**.

   Di editor kode bawaan konsol, Anda akan melihat kode fungsi yang dibuat Lambda. Jika Anda tidak melihat tab **index.mjs** di editor kode, pilih **index.mjs di file explorer seperti yang ditunjukkan** pada diagram berikut.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/durable-nodejs.png)

1. Tempelkan kode berikut ke tab **index.mjs**, ganti kode yang dibuat Lambda.

   ```
   import {
     withDurableExecution,
   } from "@aws/durable-execution-sdk-js";
   
   export const handler = withDurableExecution(
     async (event, context) => {
       const orderId = event.orderId;
       
       // Step 1: Validate order
       const validationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Validating order ${orderId}`);
         return { orderId, status: "validated" };
       });
       
       // Step 2: Process payment
       const paymentResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Processing payment for order ${orderId}`);
         return { orderId, status: "paid", amount: 99.99 };
       });
       
       // Wait for 10 seconds to simulate external confirmation
       await context.wait({ seconds: 10 });
       
       // Step 3: Confirm order
       const confirmationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Confirming order ${orderId}`);
         return { orderId, status: "confirmed" };
       });
           
       return {
         orderId: orderId,
         status: "completed",
         steps: [validationResult, paymentResult, confirmationResult]
       };
     }
   );
   ```

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda:  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Memahami kode fungsi tahan lama Anda**  
Sebelum Anda pindah ke langkah berikutnya, mari kita lihat kode fungsi dan pahami konsep fungsi kunci yang tahan lama.
+ `withDurableExecution`Pembungkusnya:

  Fungsi tahan lama Anda dibungkus dengan`withDurableExecution`. Pembungkus ini memungkinkan eksekusi yang tahan lama dengan menyediakan `DurableContext` objek dan mengelola operasi pos pemeriksaan.
+ `DurableContext`Objek:

  Alih-alih konteks Lambda standar, fungsi Anda menerima file. `DurableContext` Objek ini menyediakan metode untuk operasi tahan lama seperti `step()` dan `wait()` yang membuat pos pemeriksaan.
+ Langkah-langkah dan pos pemeriksaan:

  Setiap `context.step()` panggilan membuat pos pemeriksaan sebelum dan sesudah eksekusi. Jika fungsi Anda terganggu, itu dilanjutkan dari pos pemeriksaan terakhir yang selesai. Fungsi ini tidak menjalankan kembali langkah-langkah yang telah selesai. Ini menggunakan hasil yang disimpan sebagai gantinya.
+ Tunggu operasi:

  `context.wait()`Panggilan menjeda eksekusi tanpa menghabiskan sumber daya komputasi. Ketika menunggu selesai, Lambda memanggil fungsi Anda lagi dan memutar ulang log pos pemeriksaan, menggantikan nilai yang disimpan untuk langkah-langkah yang telah diselesaikan.
+ Mekanisme replay:

  Ketika fungsi Anda dilanjutkan setelah menunggu atau interupsi, Lambda menjalankan kode Anda dari awal. Namun, langkah yang diselesaikan tidak dijalankan ulang. Lambda memutar ulang hasil mereka dari log pos pemeriksaan. Inilah sebabnya mengapa kode Anda harus deterministik.

------
#### [ Python ]

**Untuk memodifikasi kode di konsol**

1. Pilih tab **Kode**.

   Di editor kode bawaan konsol, Anda akan melihat kode fungsi yang dibuat Lambda. Jika Anda tidak melihat tab **lambda\$1function.py** di editor kode, pilih **lambda\$1function.py** di file explorer seperti yang ditunjukkan pada diagram berikut.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/durable-python.png)

1. Tempelkan kode berikut ke tab **lambda\$1function.py**, ganti kode yang dibuat Lambda.

   ```
   from aws_durable_execution_sdk_python import (
       DurableContext,
       durable_execution,
       durable_step,
   )
   from aws_durable_execution_sdk_python.config import Duration
   
   @durable_step
   def validate_order(step_context, order_id):
       step_context.logger.info(f"Validating order {order_id}")
       return {"orderId": order_id, "status": "validated"}
   
   @durable_step
   def process_payment(step_context, order_id):
       step_context.logger.info(f"Processing payment for order {order_id}")
       return {"orderId": order_id, "status": "paid", "amount": 99.99}
   
   @durable_step
   def confirm_order(step_context, order_id):
       step_context.logger.info(f"Confirming order {order_id}")
       return {"orderId": order_id, "status": "confirmed"}
   
   @durable_execution
   def lambda_handler(event, context: DurableContext):
       order_id = event['orderId']
       
       # Step 1: Validate order
       validation_result = context.step(validate_order(order_id))
       
       # Step 2: Process payment
       payment_result = context.step(process_payment(order_id))
       
       # Wait for 10 seconds to simulate external confirmation
       context.wait(Duration.from_seconds(10))
       
       # Step 3: Confirm order
       confirmation_result = context.step(confirm_order(order_id))
           
       return {
           "orderId": order_id,
           "status": "completed",
           "steps": [validation_result, payment_result, confirmation_result]
       }
   ```

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda:  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Memahami kode fungsi tahan lama Anda**  
Sebelum Anda pindah ke langkah berikutnya, mari kita lihat kode fungsi dan pahami konsep fungsi kunci yang tahan lama.
+ `@durable_execution`Dekorator:

  Fungsi handler Anda dihiasi dengan`@durable_execution`. Dekorator ini memungkinkan eksekusi yang tahan lama dengan menyediakan `DurableContext` objek dan mengelola operasi pos pemeriksaan.
+ `@durable_step`Dekorator:

  Setiap fungsi langkah dihiasi dengan`@durable_step`. Dekorator ini menandai fungsi sebagai langkah tahan lama yang menciptakan pos pemeriksaan.
+ `DurableContext`Objek:

  Alih-alih konteks Lambda standar, fungsi Anda menerima file. `DurableContext` Objek ini menyediakan metode untuk operasi tahan lama seperti `step()` dan `wait()` yang membuat pos pemeriksaan.
+ Langkah-langkah dan pos pemeriksaan:

  Setiap `context.step()` panggilan membuat pos pemeriksaan sebelum dan sesudah eksekusi. Jika fungsi Anda terganggu, itu dilanjutkan dari pos pemeriksaan terakhir yang selesai. Fungsi ini tidak menjalankan kembali langkah-langkah yang telah selesai. Ini menggunakan hasil yang disimpan sebagai gantinya.
+ Tunggu operasi:

  `context.wait()`Panggilan menjeda eksekusi tanpa menghabiskan sumber daya komputasi. Ketika menunggu selesai, Lambda memanggil fungsi Anda lagi dan memutar ulang log pos pemeriksaan, menggantikan nilai yang disimpan untuk langkah-langkah yang telah diselesaikan.
+ Python SDK sinkron:

  Perhatikan bahwa Python SDK tidak digunakan. `await` Semua operasi tahan lama adalah panggilan metode sinkron.

------

## Memanggil fungsi tahan lama menggunakan editor kode konsol
<a name="get-started-invoke-durable-manually"></a>

Jika tidak ada versi eksplisit yang ditentukan (atau dipublikasikan), konsol akan memanggil fungsi tahan lama menggunakan kualifikasi `$LATEST` versi. Namun, untuk eksekusi deterministik kode Anda, Anda harus selalu menggunakan ARN yang memenuhi syarat yang menunjuk ke versi stabil.

**Untuk mempublikasikan versi fungsi Anda**

1. Pilih tab **Versi**.

1. Pilih**Publikasikan versi baru**.

1. Untuk **deskripsi Versi**, masukkan **Initial version** (opsional).

1. Pilih **Terbitkan**.

1. Lambda membuat versi 1 dari fungsi Anda. Perhatikan bahwa fungsi ARN sekarang termasuk `:1` di akhir, menunjukkan ini adalah versi 1.

Sekarang buat acara uji untuk dikirim ke fungsi Anda. Acara ini adalah dokumen berformat JSON yang berisi ID pesanan.

**Untuk membuat acara pengujian**

1. Di bagian **TEST EVENTS** pada editor kode konsol, pilih **Buat acara pengujian**.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/test-event.png)

1. Untuk **Nama Acara**, masukkan**myTestEvent**.

1. Di bagian **Event JSON**, ganti JSON default dengan yang berikut:

   ```
   {
     "orderId": "order-12345"
   }
   ```

1. Pilih **Simpan**.

**Untuk menguji fungsi tahan lama Anda dan melihat eksekusi**

Di bagian **TEST EVENTS** pada editor kode konsol, pilih ikon jalankan di sebelah acara pengujian Anda:

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/run-test-event.png)


Fungsi tahan lama Anda mulai dijalankan. Karena ini termasuk menunggu 10 detik, pemanggilan awal selesai dengan cepat, dan fungsi dilanjutkan setelah periode tunggu. Anda dapat melihat progres eksekusi di tab **Eksekusi tahan lama**.

**Untuk melihat eksekusi fungsi tahan lama**

1. Pilih tab **Eksekusi tahan lama**.

1. Temukan eksekusi Anda dalam daftar. Eksekusi menunjukkan status saat ini (Berjalan, Berhasil, atau Gagal).

1. Pilih ID eksekusi untuk melihat detail, termasuk:
   + Garis waktu eksekusi menunjukkan kapan setiap langkah selesai
   + Sejarah pos pemeriksaan
   + Periode tunggu
   + Hasil langkah

Anda juga dapat melihat log fungsi Anda di CloudWatch Log untuk melihat keluaran konsol dari setiap langkah.

**Untuk melihat catatan pemanggilan fungsi Anda di Log CloudWatch**

1. Buka halaman [Grup log](https://console.aws.amazon.com/cloudwatch/home#logs:) CloudWatch konsol.

1. Pilih grup log untuk fungsi Anda (`/aws/lambda/myDurableFunction`).

1. Gulir ke bawah dan pilih **aliran Log** untuk pemanggilan fungsi yang ingin Anda lihat.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/log-stream.png)

   Anda akan melihat entri log untuk setiap pemanggilan fungsi Anda, termasuk eksekusi awal dan pemutaran ulang setelah menunggu.

**catatan**  
Saat Anda menggunakan logger dari `DurableContext` (seperti `context.logger` atau`stepContext.logger`), log juga muncul dalam eksekusi tahan lama dan tampilan langkah di konsol Lambda. Log ini mungkin membutuhkan waktu beberapa saat untuk dimuat.

## Bersihkan
<a name="gettingstarted-durable-cleanup"></a>

Setelah Anda selesai bekerja dengan contoh fungsi tahan lama, hapus. Anda juga dapat menghapus grup log yang menyimpan log fungsi, dan [peran eksekusi](lambda-intro-execution-role.md) yang dibuat konsol.

**Untuk menghapus fungsi Lambda**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.

**Untuk menghapus grup log**

1. Buka halaman [Grup log](https://console.aws.amazon.com/cloudwatch/home#logs:) CloudWatch konsol.

1. Pilih grup log fungsi (`/aws/lambda/myDurableFunction`).

1. Pilih **Tindakan**, **Hapus grup log**.

1. Di kotak dialog **Hapus grup log**, pilih **Hapus**.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home?#/roles) konsol AWS Identity and Access Management (IAM).

1. Pilih peran eksekusi fungsi (misalnya,`myDurableFunction-role-31exxmpl`).

1. Pilih **Hapus**.

1. Di kotak dialog **Hapus peran**, masukkan nama peran, lalu pilih **Hapus**.

## Sumber daya tambahan dan langkah selanjutnya
<a name="durable-getting-started-more-resources"></a>

Sekarang setelah Anda membuat dan menguji fungsi tahan lama sederhana menggunakan konsol, ambil langkah berikut:
+ Pelajari tentang kasus penggunaan umum untuk fungsi tahan lama, termasuk transaksi terdistribusi, pemrosesan pesanan, dan alur kerja tinjauan manusia. Lihat [Contoh](durable-examples.md).
+ Pahami cara memantau eksekusi fungsi yang tahan lama dengan CloudWatch metrik dan riwayat eksekusi. Lihat [Monitoring dan debugging](durable-monitoring.md).
+ Pelajari tentang menjalankan fungsi tahan lama secara sinkron dan asinkron, serta mengelola eksekusi yang berjalan lama. Lihat [Memanggil fungsi yang tahan lama](durable-invoking.md).
+ Ikuti praktik terbaik untuk menulis kode deterministik, mengelola ukuran pos pemeriksaan, dan mengoptimalkan biaya. Lihat [Praktik terbaik](durable-best-practices.md).
+ Pelajari cara menguji fungsi tahan lama secara lokal dan di cloud. Lihat [Menguji fungsi tahan lama](durable-testing.md).
+ Bandingkan fungsi tahan lama dengan Step Functions untuk memahami kapan setiap pendekatan paling efektif. Lihat [Fungsi tahan lama atau Step Functions](durable-step-functions.md).