

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

# Uji aplikasi tanpa server Anda dengan AWS SAM
<a name="serverless-test-and-debug"></a>

Setelah menulis dan membangun aplikasi Anda, Anda akan siap untuk menguji aplikasi Anda untuk memverifikasi bahwa itu berfungsi dengan benar. Dengan antarmuka baris AWS SAM perintah (CLI), Anda dapat menguji aplikasi tanpa server secara lokal sebelum mengunggahnya ke Cloud. AWS Menguji aplikasi membantu Anda mengonfirmasi fungsionalitas, keandalan, dan kinerja aplikasi sekaligus mengidentifikasi masalah (bug) yang perlu ditangani.

Bagian ini memberikan panduan tentang praktik umum yang dapat Anda ikuti untuk menguji aplikasi Anda. Topik di bagian ini sebagian besar berfokus pada pengujian lokal yang dapat Anda lakukan sebelum menerapkan di AWS Cloud. Pengujian sebelum menerapkan membantu Anda mengidentifikasi masalah secara proaktif, mengurangi biaya yang tidak perlu terkait dengan masalah penerapan. Setiap topik di bagian ini menjelaskan tes yang dapat Anda lakukan, memberi tahu yoxi include href? u keuntungan menggunakannya, dan termasuk contoh yang menunjukkan kepada Anda bagaimana melakukan tes. Setelah menguji aplikasi Anda, Anda akan siap untuk men-debug masalah apa pun yang Anda temukan.

**Topics**
+ [Pengantar pengujian dengan sam local perintah](using-sam-cli-local.md)
+ [Memanggil fungsi Lambda secara lokal dengan AWS SAM](serverless-sam-cli-using-invoke.md)
+ [Jalankan API Gateway secara lokal dengan AWS SAM](serverless-sam-cli-using-start-api.md)
+ [Pengantar pengujian cloud dengan sam remote test-event](using-sam-cli-remote-test-event.md)
+ [Pengantar pengujian di cloud dengan sam remote invoke](using-sam-cli-remote-invoke.md)
+ [Otomatiskan pengujian integrasi lokal dengan AWS SAM](serverless-sam-cli-using-automated-tests.md)
+ [Hasilkan contoh muatan acara dengan AWS SAM](serverless-sam-cli-using-generate-event.md)
+ [Menguji dan men-debug fungsi tahan lama](test-and-debug-durable-functions.md)

# Pengantar pengujian dengan sam local perintah
<a name="using-sam-cli-local"></a>

Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAMCLI) `sam local` untuk menguji aplikasi tanpa server Anda secara lokal.

Untuk pengantar AWS SAMCLI, lihat[Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli).

## Prasyarat
<a name="using-sam-cli-local-prerequisites"></a>

Untuk menggunakan`sam local`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam local`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).

## Menggunakan sam local perintah
<a name="using-sam-cli-local-command"></a>

Gunakan `sam local` perintah dengan subperintahnya untuk melakukan berbagai jenis pengujian lokal untuk aplikasi Anda.

```
$ sam local <subcommand>
```

Untuk mempelajari lebih lanjut tentang setiap subperintah, lihat berikut ini:
+ **[Intro ke sam local generate-event](using-sam-cli-local-generate-event.md)**— Hasilkan Layanan AWS acara untuk pengujian lokal.
+ **[Pengantar sam local invoke](using-sam-cli-local-invoke.md)**— Memulai pemanggilan satu kali fungsi secara lokal. AWS Lambda 
+ **[Pengantar ke sam local start-api](using-sam-cli-local-start-api.md)**— Jalankan fungsi Lambda Anda menggunakan server HTTP lokal.
+ **[Pengantar sam local start-lambda](using-sam-cli-local-start-lambda.md)**— Jalankan fungsi Lambda Anda menggunakan server HTTP lokal untuk digunakan dengan atau. AWS CLI SDKs

# Pengantar pengujian dengan sam local generate-event
<a name="using-sam-cli-local-generate-event"></a>

Gunakan AWS Serverless Application Model `sam local generate-event` subperintah Command Line Interface (AWS SAMCLI) untuk menghasilkan sampel payload peristiwa untuk didukung. Layanan AWS Anda kemudian dapat memodifikasi dan meneruskan peristiwa ini ke sumber daya lokal untuk pengujian.
+ Untuk pengantar AWS SAMCLI, lihat [Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Untuk daftar opsi `sam local generate-event` perintah, lihat[sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

*Peristiwa* adalah objek JSON yang dihasilkan ketika Layanan AWS melakukan tindakan atau tugas. Peristiwa ini berisi informasi spesifik, seperti data yang diproses atau stempel waktu acara. Sebagian besar Layanan AWS menghasilkan acara dan setiap acara layanan diformat secara unik untuk layanannya.

Peristiwa yang dihasilkan oleh satu layanan diteruskan ke layanan lain sebagai *sumber acara*. Misalnya, item yang ditempatkan di bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) dapat menghasilkan peristiwa. Acara ini kemudian dapat digunakan sebagai sumber peristiwa untuk suatu AWS Lambda fungsi untuk memproses data lebih lanjut.

Peristiwa yang Anda hasilkan `sam local generate-event` diformat dalam struktur yang sama dengan peristiwa aktual yang dibuat oleh AWS layanan. Anda dapat memodifikasi konten acara ini dan menggunakannya untuk menguji sumber daya dalam aplikasi Anda.

## Prasyarat
<a name="using-sam-cli-local-generate-event-prerequisites"></a>

Untuk menggunakan`sam local generate-event`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam local generate-event`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).

## Hasilkan contoh acara
<a name="using-sam-cli-local-generate-event-generate"></a>

Gunakan AWS SAMCLI `sam local generate-event` subperintah untuk menghasilkan peristiwa yang didukung Layanan AWS.

**Untuk melihat daftar yang didukung Layanan AWS**

1. Jalankan hal berikut:

   ```
   $ sam local generate-event
   ```

1. Daftar yang didukung Layanan AWS akan ditampilkan. Berikut ini adalah contohnya:

   ```
   $ sam local generate-event
   ...
   Commands:
     alb
     alexa-skills-kit
     alexa-smart-home
     apigateway
     appsync
     batch
     cloudformation
     ...
   ```

**Untuk menghasilkan acara lokal**

1. Jalankan `sam local generate-event` dan berikan nama layanan yang didukung. Ini akan menampilkan daftar jenis acara yang dapat Anda hasilkan. Berikut ini adalah contohnya:

   ```
   $ sam local generate-event s3
   
   Usage: sam local generate-event s3 [OPTIONS] COMMAND [ARGS]...
   
   Options:
     -h, --help  Show this message and exit.
   
   Commands:
     batch-invocation  Generates an Amazon S3 Batch Operations Invocation Event
     delete            Generates an Amazon S3 Delete Event
     put               Generates an Amazon S3 Put Event
   ```

1. Untuk menghasilkan contoh acara, jalankan`sam local generate-event`, berikan layanan dan jenis acara.

   ```
   $ sam local generate-event <service> <event>
   ```

   Berikut ini adalah contohnya:

   ```
   $ sam local generate-event s3 put
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

Contoh peristiwa ini berisi nilai placeholder. Anda dapat memodifikasi nilai-nilai ini untuk mereferensikan sumber daya aktual dalam aplikasi atau nilai Anda untuk membantu pengujian lokal.

**Untuk memodifikasi contoh peristiwa**

1. Anda dapat memodifikasi contoh peristiwa di command prompt. Untuk melihat opsi Anda, jalankan yang berikut ini:

   ```
   $ sam local generate-event <service> <event> --help
   ```

   Berikut ini adalah contohnya:

   ```
   $ sam local generate-event s3 put --help
   
   Usage: sam local generate-event s3 put [OPTIONS]
   
   Options:
     --region TEXT       Specify the region name you'd like, otherwise the
                         default = us-east-1
     --partition TEXT    Specify the partition name you'd like, otherwise the
                         default = aws
     --bucket TEXT       Specify the bucket name you'd like, otherwise the
                         default = example-bucket
     --key TEXT          Specify the key name you'd like, otherwise the default =
                         test/key
     --debug             Turn on debug logging to print debug message generated
                         by AWS SAM CLI and display timestamps.
     --config-file TEXT  Configuration file containing default parameter values.
                         [default: samconfig.toml]
     --config-env TEXT   Environment name specifying default parameter values in
                         the configuration file.  [default: default]
     -h, --help          Show this message and exit.
   ```

1. Gunakan salah satu opsi ini di prompt perintah untuk memodifikasi payload acara sampel Anda. Berikut ini adalah contohnya:

   ```
   $ sam local generate-event s3 put--bucket sam-s3-demo-bucket
   
   {
     "Records": [
       {
         "eventVersion": "2.0",
         "eventSource": "aws:s3",
         "awsRegion": "us-east-1",
         "eventTime": "1970-01-01T00:00:00.000Z",
         "eventName": "ObjectCreated:Put",
         "userIdentity": {
           "principalId": "EXAMPLE"
         },
         "requestParameters": {
           "sourceIPAddress": "127.0.0.1"
         },
         "responseElements": {
           "x-amz-request-id": "EXAMPLE123456789",
           "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
         },
         "s3": {
           "s3SchemaVersion": "1.0",
           "configurationId": "testConfigRule",
           "bucket": {
             "name": "sam-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::sam-s3-demo-bucket"
           },
           "object": {
             "key": "test/key",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

## Gunakan peristiwa yang dihasilkan untuk pengujian lokal
<a name="using-sam-cli-local-generate-event-use"></a>

Simpan peristiwa yang Anda hasilkan secara lokal dan gunakan `sam local` subperintah lain untuk menguji.

**Untuk menyimpan acara yang Anda hasilkan secara lokal**
+ Jalankan hal berikut:

  ```
  $ sam local generate-event <service> <event> <event-option> > <filename.json>
  ```

  Berikut ini adalah contoh acara yang disimpan sebagai `s3.json` file di `events` folder proyek kami.

  ```
  sam-app$ sam local generate-event s3 put --bucket amzn-s3-demo-bucket > events/s3.json
  ```

**Untuk menggunakan peristiwa yang dihasilkan untuk pengujian lokal**
+ Lewati acara dengan `sam local` subperintah lain dengan menggunakan `--event` opsi.

  Berikut ini adalah contoh penggunaan `s3.json` acara untuk memanggil fungsi Lambda kami secara lokal:

  ```
  sam-app$ sam local invoke --event events/s3.json S3JsonLoggerFunction
  
  Invoking src/handlers/s3-json-logger.s3JsonLoggerHandler (nodejs18.x)
  Local image is up-to-date
  Using local image: public.ecr.aws/lambda/nodejs:18-rapid-x86_64.
  
  Mounting /Users/.../sam-app/.aws-sam/build/S3JsonLoggerFunction as /var/task:ro,delegated, inside runtime container
  START RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128 Version: $LATEST
  END RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128
  REPORT RequestId: f4f45b6d-2ec6-4235-bc7b-495ec2ae0128  Init Duration: 1.23 ms  Duration: 9371.93 ms      Billed Duration: 9372 ms        Memory Size: 128 MB     Max Memory Used: 128 MB
  ```

## Pelajari selengkapnya
<a name="using-sam-cli-local-generate-event-learn"></a>

Untuk daftar semua `sam local generate-event` opsi, lihat[sam local generate-event](sam-cli-command-reference-sam-local-generate-event.md).

Untuk demo penggunaan`sam local`, lihat [AWS SAM untuk pengembangan lokal. Menguji AWS Cloud sumber daya dari lingkungan pengembangan lokal](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) di *Sesi Tanah Tanpa Server dengan seri SAM aktif*. YouTube

# Pengantar pengujian dengan sam local invoke
<a name="using-sam-cli-local-invoke"></a>

Gunakan AWS Serverless Application Model `sam local invoke` subperintah Command Line Interface (AWS SAMCLI) untuk memulai pemanggilan satu kali fungsi secara lokal. AWS Lambda 
+ Untuk pengantar AWS SAMCLI, lihat [Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Untuk daftar opsi `sam local invoke` perintah, lihat[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).
+ Untuk contoh penggunaan `sam local invoke` selama alur kerja pengembangan tipikal, lihat[Langkah 7: (Opsional) Uji aplikasi Anda secara lokal](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**catatan**  
Tidak disarankan untuk menggunakan kemampuan pemanggilan lokal SAM CLI dalam kode yang tidak tepercaya. Untuk memiliki isolasi lengkap dari lingkungan lokal Anda, jalankan kode di layanan Lambda secara langsung.

**catatan**  
`sam local invoke`mendukung fungsi tahan lama dengan kemampuan checkpointing dan replay otomatis. Saat menjalankan fungsi tahan lama secara lokal, status eksekusi dikelola secara otomatis.

## Prasyarat
<a name="using-sam-cli-local-invoke-prerequisites"></a>

Untuk menggunakan`sam local invoke`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam local invoke`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).

## Memanggil fungsi Lambda secara lokal
<a name="using-sam-cli-local-invoke-use"></a>

Ketika Anda menjalankan`sam local invoke`, AWS SAMCLI mengasumsikan bahwa direktori kerja Anda saat ini adalah direktori root proyek Anda. Yang pertama AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam `.aws-sam` subfolder. Jika tidak ditemukan, AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam direktori kerja Anda saat ini.

**Untuk menjalankan fungsi Lambda secara lokal**

1. Dari direktori root proyek Anda, jalankan yang berikut ini:

   ```
   $ sam local invoke <options>
   ```

1. Jika aplikasi Anda berisi lebih dari satu fungsi, berikan ID logis fungsi tersebut. Berikut ini adalah contohnya:

   ```
   $ sam local invoke HelloWorldFunction
   ```

1.  AWS SAMCLIMembangun fungsi Anda dalam wadah lokal menggunakanDocker. Kemudian memanggil fungsi Anda dan mengeluarkan respons fungsi Anda.

   Berikut ini adalah contohnya:

   ```
   $ sam local invoke
   Invoking app.lambda_handler (python3.9)
   Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image
   Building image....................................................................................................................
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
   START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST
   END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df
   REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df  Init Duration: 1.09 ms  Duration: 608.42 ms       Billed Duration: 609 ms Memory Size: 128 MB     Max Memory Used: 128 MB
   {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
   ```

### Mengelola log
<a name="using-sam-cli-local-invoke-logs"></a>

Saat menggunakan`sam local invoke`, output runtime fungsi Lambda (misalnya, log) adalah output ke`stderr`, dan hasil fungsi Lambda adalah output ke. `stdout`

Berikut ini adalah contoh fungsi Lambda dasar:

```
def handler(event, context):
    print("some log") # this goes to stderr
    return "hello world" # this goes to stdout
```

Anda dapat menyimpan output standar ini. Berikut ini adalah contohnya:

```
$ sam local invoke 1> stdout.log
...

$ cat stdout.log
"hello world"

$ sam local invoke 2> stderr.log
...

$ cat stderr.log
Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST
some log
END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46
REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46  Init Duration: 0.91 ms  Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
```

Anda dapat menggunakan output standar ini untuk lebih mengotomatiskan proses pengembangan lokal Anda.

## Opsi
<a name="using-sam-cli-local-invoke-options"></a>

### Lulus acara khusus untuk menjalankan fungsi Lambda
<a name="using-sam-cli-local-invoke-options-events"></a>

Untuk meneruskan acara ke fungsi Lambda, gunakan opsi. `--event` Berikut ini adalah contohnya:

```
$ sam local invoke --event events/s3.json S3JsonLoggerFunction
```

Anda dapat membuat acara dengan `sam local generate-event` subperintah. Untuk mempelajari selengkapnya, lihat [Pengantar pengujian dengan sam local generate-event](using-sam-cli-local-generate-event.md).

### Lulus variabel lingkungan saat menjalankan fungsi Lambda Anda
<a name="using-sam-cli-local-invoke-options-env"></a>

Jika fungsi Lambda Anda menggunakan variabel lingkungan, Anda dapat meneruskannya selama pengujian lokal dengan opsi. `--env-vars` Ini adalah cara yang bagus untuk menguji fungsi Lambda secara lokal dengan layanan di aplikasi Anda yang sudah digunakan di cloud. Berikut ini adalah contohnya:

```
$ sam local invoke --env-vars locals.json
```

### Tentukan templat atau fungsi
<a name="using-sam-cli-local-invoke-options-specify"></a>

Untuk menentukan template untuk referensi AWS SAMCLI ke, gunakan `--template` opsi. AWS SAMCLIAkan memuat hanya AWS SAM template itu dan sumber daya yang ditunjukkannya.

Untuk memanggil fungsi aplikasi atau tumpukan bersarang, berikan aplikasi atau tumpukan ID logis bersama dengan ID logika fungsi. Berikut ini adalah contohnya:

```
$ sam local invoke StackLogicalId/FunctionLogicalId
```

### Uji fungsi Lambda dari proyek Anda Terraform
<a name="using-sam-cli-local-invoke-options-terraform"></a>

Gunakan `--hook-name` opsi untuk menguji fungsi Lambda secara lokal dari Terraform proyek Anda. Untuk mempelajari selengkapnya, lihat [Menggunakan AWS SAMCLI with Terraform untuk debugging dan pengujian lokal](using-samcli-terraform.md).

Berikut ini adalah contohnya:

```
$ sam local invoke --hook-name terraform --beta-features
```

## Praktik terbaik
<a name="using-sam-cli-local-invoke-best"></a>

Jika aplikasi Anda memiliki `.aws-sam` direktori dari berjalan`sam build`, pastikan untuk menjalankan `sam build` setiap kali Anda memperbarui kode fungsi Anda. Kemudian, jalankan `sam local invoke` untuk menguji kode fungsi Anda yang diperbarui secara lokal.

Pengujian lokal adalah solusi hebat untuk pengembangan dan pengujian cepat sebelum menerapkan ke cloud. Namun, pengujian lokal tidak memvalidasi semuanya, seperti izin antar sumber daya Anda di cloud. Sebisa mungkin, uji aplikasi Anda di cloud. Sebaiknya [gunakan `sam sync`](using-sam-cli-sync.md) untuk mempercepat alur kerja pengujian cloud Anda.

## Contoh
<a name="using-sam-cli-local-invoke-examples"></a>

### Buat contoh peristiwa Amazon API Gateway dan gunakan untuk menjalankan fungsi Lambda secara lokal
<a name="using-sam-cli-local-invoke-examples-api"></a>

Pertama, kami menghasilkan payload peristiwa API Gateway API API API dan menyimpannya ke `events` folder kami.

```
$ sam local generate-event apigateway http-api-proxy > events/apigateway_event.json
```

Selanjutnya, kami memodifikasi fungsi Lambda kami untuk mengembalikan nilai parameter dari acara tersebut.

```
def lambda_handler(event, context):
    print("HelloWorldFunction invoked")
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": event['queryStringParameters']['parameter2'],
        }),
    }
```

Selanjutnya, kami secara lokal memanggil fungsi Lambda kami dan menyediakan acara khusus kami.

```
$ sam local invoke --event events/apigateway_event.json

Invoking app.lambda_handler (python3.9)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"value\"}"}%
```

### Lulus variabel lingkungan saat menjalankan fungsi Lambda secara lokal
<a name="using-sam-cli-local-invoke-examples-env"></a>

Aplikasi ini memiliki fungsi Lambda yang menggunakan variabel lingkungan untuk nama tabel Amazon DynamoDB. Berikut ini adalah contoh fungsi yang didefinisikan dalam AWS SAM template:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
...
Resources:
  getAllItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: src/get-all-items.getAllItemsHandler
      Description: get all items
      Policies:
        - DynamoDBReadPolicy:
            TableName: !Ref SampleTable
      Environment:
        Variables:
          SAMPLE_TABLE: !Ref SampleTable
...
```

Kami ingin menguji fungsi Lambda kami secara lokal sambil berinteraksi dengan tabel DynamoDB kami di cloud. Untuk melakukan ini, kami membuat file variabel lingkungan kami dan menyimpannya di direktori root proyek kami sebagai`locals.json`. Nilai yang disediakan di sini untuk `SAMPLE_TABLE` referensi tabel DynamoDB kami di cloud.

```
{
    "getAllItemsFunction": {
        "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98"
    }
}
```

Selanjutnya, kita menjalankan `sam local invoke` dan meneruskan variabel lingkungan kita dengan `--env-vars` opsi.

```
$ sam local invoke getAllItemsFunction --env-vars locals.json

Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST
some log
END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8
REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8  Init Duration: 1.63 ms  Duration: 564.07 ms       Billed Duration: 565 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode":200,"body":"{}"}
```

## Pelajari selengkapnya
<a name="using-sam-cli-local-invoke-learn"></a>

Untuk daftar semua `sam local invoke` opsi, lihat[sam local invoke](sam-cli-command-reference-sam-local-invoke.md).

Untuk demo penggunaan`sam local`, lihat [AWS SAM untuk pengembangan lokal. Menguji AWS Cloud sumber daya dari lingkungan pengembangan lokal](https://www.youtube.com/watch?v=NzPqMrdgD1s&list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd&index=24) di *Sesi Tanah Tanpa Server dengan seri SAM aktif*. YouTube

# Pengantar pengujian dengan sam local start-api
<a name="using-sam-cli-local-start-api"></a>

Gunakan AWS Serverless Application Model `sam local start-api` subperintah Command Line Interface (AWS SAMCLI) untuk menjalankan AWS Lambda fungsi Anda secara lokal dan menguji melalui host server HTTP lokal. Jenis pengujian ini berguna untuk fungsi Lambda yang dipanggil oleh titik akhir Amazon API Gateway.
+ Untuk pengantar AWS SAMCLI, lihat [Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Untuk daftar opsi `sam local start-api` perintah, lihat[sam local start-api](sam-cli-command-reference-sam-local-start-api.md).
+ Untuk contoh penggunaan `sam local start-api` selama alur kerja pengembangan tipikal, lihat[Langkah 7: (Opsional) Uji aplikasi Anda secara lokal](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-test).

**catatan**  
`sam local start-api`mendukung fungsi tahan lama dengan kemampuan checkpointing dan replay otomatis. Fungsi tahan lama bekerja dengan mulus dengan titik akhir API Gateway lokal.

## Prasyarat
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Untuk menggunakan`sam local start-api`, instal AWS SAMCLI dengan menyelesaikan yang berikut:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam local start-api`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).

## Menggunakan sam local start-api
<a name="using-sam-cli-local-start-api-use"></a>

Ketika Anda menjalankan`sam local start-api`, AWS SAMCLI mengasumsikan bahwa direktori kerja Anda saat ini adalah direktori root proyek Anda. Yang pertama AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam `.aws-sam` subfolder. Jika tidak ditemukan, AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam direktori kerja Anda saat ini.

**Untuk memulai server HTTP lokal**

1. Dari direktori root proyek Anda, jalankan yang berikut ini:

   ```
   $ sam local start-api <options>
   ```

1.  AWS SAMCLIMembangun fungsi Lambda Anda dalam wadah Docker lokal. Kemudian output alamat lokal dari endpoint server HTTP Anda. Berikut ini adalah contohnya:

   ```
   $ sam local start-api
   
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
   You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
   2023-04-12 14:41:05 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3000
   ```

1. Anda dapat menjalankan fungsi Lambda Anda melalui browser atau command prompt. Berikut ini adalah contohnya:

   ```
   sam-app$ curl http://127.0.0.1:3000/hello
   {"message": "Hello world!"}%
   ```

1. Saat Anda membuat perubahan pada kode fungsi Lambda Anda, pertimbangkan hal berikut untuk menyegarkan server HTTP lokal Anda:
   + Jika aplikasi Anda tidak memiliki `.aws-sam` direktori dan fungsi Anda menggunakan bahasa yang ditafsirkan, AWS SAMCLI maka akan secara otomatis memperbarui fungsi Anda dengan membuat wadah baru dan menghostingnya.
   + Jika aplikasi Anda memiliki `.aws-sam` direktori, Anda perlu menjalankan `sam build` untuk memperbarui fungsi Anda. Kemudian jalankan `sam local start-api` lagi untuk meng-host fungsi.
   + Jika fungsi Anda menggunakan bahasa yang dikompilasi atau jika proyek Anda memerlukan dukungan pengemasan yang kompleks, jalankan solusi build Anda sendiri untuk memperbarui fungsi Anda. Kemudian jalankan `sam local start-api` lagi untuk meng-host fungsi.

### Fungsi Lambda yang menggunakan otorisasi Lambda
<a name="using-sam-cli-local-start-api-authorizers"></a>

**catatan**  
Fitur ini baru di AWS SAMCLI versi 1.80.0. Untuk meningkatkan, lihat [Upgrade AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Untuk fungsi Lambda yang menggunakan otorisasi Lambda, Lambda akan AWS SAMCLI secara otomatis memanggil otorisasi Lambda Anda sebelum menjalankan titik akhir fungsi Lambda Anda.

Berikut ini adalah contoh memulai server HTTP lokal untuk fungsi yang menggunakan otorisasi Lambda:

```
$ sam local start-api
2023-04-17 15:02:13 Attaching import module proxy for analyzing dynamic imports

AWS SAM CLI does not guarantee 100% fidelity between authorizers locally
and authorizers deployed on AWS. Any application critical behavior should
be validated thoroughly before deploying to production.

Testing application behaviour against authorizers deployed on AWS can be done using the sam sync command.

Mounting HelloWorldFunction at http://127.0.0.1:3000/authorized-request [GET]
You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template
2023-04-17 15:02:13 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:3000
2023-04-17 15:02:13 Press CTRL+C to quit
```

Saat Anda memanggil titik akhir fungsi Lambda Anda melalui server HTTP lokal, AWS SAMCLI yang pertama memanggil otorisasi Lambda Anda. Jika otorisasi berhasil, AWS SAMCLI akan memanggil titik akhir fungsi Lambda Anda. Berikut ini adalah contohnya:

```
$ curl http://127.0.0.1:3000/authorized-request --header "header:my_token"
{"message": "from authorizer"}%

Invoking app.authorizer_handler (python3.8)
Local image is up-to-date
Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64.

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0 Version: $LATEST
END RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0
REPORT RequestId: 38d3b472-a2c8-4ea6-9a77-9b386989bef0    Init Duration: 1.08 ms    Duration: 628.26 msBilled Duration: 629 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
Invoking app.request_handler (python3.8)
Using local image: public.ecr.aws/lambda/python:3.8-rapid-x86_64.

Mounting /Users/.../sam-app/... as /var/task:ro,delegated, inside runtime container
START RequestId: fdc12255-79a3-4365-97e9-9459d06446ff Version: $LATEST
END RequestId: fdc12255-79a3-4365-97e9-9459d06446ff
REPORT RequestId: fdc12255-79a3-4365-97e9-9459d06446ff    Init Duration: 0.95 ms    Duration: 659.13 msBilled Duration: 660 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
No Content-Type given. Defaulting to 'application/json'.
2023-04-17 15:03:03 127.0.0.1 - - [17/Apr/2023 15:03:03] "GET /authorized-request HTTP/1.1" 200 -
```

## Opsi
<a name="using-sam-cli-local-start-api-options"></a>

### Terus menggunakan kembali kontainer untuk mempercepat pemanggilan fungsi lokal
<a name="using-sam-cli-local-start-api-options-warm"></a>

Secara default, AWS SAMCLI membuat wadah baru setiap kali fungsi Anda dipanggil melalui server HTTP lokal. Gunakan `--warm-containers` opsi untuk menggunakan kembali wadah Anda secara otomatis untuk pemanggilan fungsi. Ini mempercepat waktu yang dibutuhkan untuk mempersiapkan fungsi Lambda Anda AWS SAMCLI untuk pemanggilan lokal. Anda dapat menyesuaikan opsi ini lebih lanjut dengan memberikan `lazy` argumen `eager` atau.
+ `eager`— Wadah untuk semua fungsi dimuat saat startup dan bertahan di antara pemanggilan.
+ `lazy`— Kontainer hanya dimuat ketika setiap fungsi pertama kali dipanggil. Mereka kemudian bertahan untuk doa tambahan.

Berikut ini adalah contohnya:

```
$ sam local start-api --warm-containers eager
```

Saat menggunakan `--warm-containers` dan memodifikasi kode fungsi Lambda Anda:
+ Jika aplikasi Anda memiliki `.aws-sam` direktori, jalankan `sam build` untuk memperbarui kode fungsi Anda di artefak build aplikasi Anda.
+ Ketika perubahan kode terdeteksi, secara AWS SAMCLI otomatis menutup wadah fungsi Lambda.
+ Ketika Anda memanggil fungsi lagi, secara AWS SAMCLI otomatis membuat wadah baru.

### Tentukan gambar kontainer yang akan digunakan untuk fungsi Lambda Anda
<a name="using-sam-cli-local-start-api-options-specify"></a>

Secara default, AWS SAMCLI menggunakan gambar dasar Lambda dari Amazon Elastic Container Registry (Amazon ECR) Registry (Amazon ECR) untuk menjalankan fungsi Anda secara lokal. Gunakan `--invoke-image` opsi untuk mereferensikan gambar wadah khusus. Berikut ini adalah contohnya:

```
$ sam local start-api --invoke-image public.ecr.aws/sam/emu-python3.8
```

Anda dapat menentukan fungsi yang akan digunakan dengan gambar wadah khusus. Berikut ini adalah contohnya:

```
$ sam local start-api --invoke-image Function1=amazon/aws/sam-cli-emulation-image-python3.8
```

### Tentukan templat untuk diuji secara lokal
<a name="using-sam-cli-local-start-api-options-template"></a>

Untuk menentukan template untuk referensi AWS SAMCLI ke, gunakan `--template` opsi. AWS SAMCLIAkan memuat hanya AWS SAM template itu dan sumber daya yang ditunjukkannya. Berikut ini adalah contohnya:

```
$ sam local start-api --template myTemplate.yaml
```

### Tentukan lingkungan pengembangan host fungsi Lambda Anda
<a name="using-sam-cli-local-start-api-options-dev"></a>

Secara default, `sam local start-api` subperintah membuat server HTTP menggunakan `localhost` dengan alamat `127.0.0.1` IP. Anda dapat menyesuaikan nilai-nilai ini jika lingkungan pengembangan lokal Anda terisolasi dari mesin lokal Anda.

Gunakan `--container-host` opsi untuk menentukan host. Berikut ini adalah contohnya:

```
$ sam local start-api --container-host host.docker.internal
```

Gunakan `--container-host-interface` opsi untuk menentukan alamat IP jaringan host yang harus diikat oleh port kontainer. Berikut ini adalah contohnya:

```
$ sam local start-api --container-host-interface 0.0.0.0
```

## Praktik terbaik
<a name="using-sam-cli-local-start-api-best"></a>

Jika aplikasi Anda memiliki `.aws-sam` direktori dari berjalan`sam build`, pastikan untuk menjalankan `sam build` setiap kali Anda memperbarui kode fungsi Anda. Kemudian, jalankan `sam local start-api` untuk menguji kode fungsi Anda yang diperbarui secara lokal.

Pengujian lokal adalah solusi hebat untuk pengembangan dan pengujian cepat sebelum menerapkan ke cloud. Namun, pengujian lokal tidak memvalidasi semuanya, seperti izin antar sumber daya Anda di cloud. Sebisa mungkin, uji aplikasi Anda di cloud. Sebaiknya [gunakan `sam sync`](using-sam-cli-sync.md) untuk mempercepat alur kerja pengujian cloud Anda.

## Pelajari selengkapnya
<a name="using-sam-cli-local-start-api-learn"></a>

Untuk daftar semua `sam local start-api` opsi, lihat[sam local start-api](sam-cli-command-reference-sam-local-start-api.md).

# Pengantar pengujian dengan sam local start-lambda
<a name="using-sam-cli-local-start-lambda"></a>

Gunakan AWS SAMCLI subperintah `sam local start-lambda` untuk menjalankan fungsi Lambda Anda melalui dan. AWS CLI SDKs Perintah ini memulai endpoint lokal yang mengemulasi Lambda.
+ Untuk pengantar AWS SAMCLI, lihat [Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)
+ Untuk daftar opsi `sam local start-lambda` perintah, lihat[sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

**catatan**  
`sam local start-lambda`mendukung fungsi tahan lama dengan kemampuan checkpointing dan replay otomatis. Fungsi tahan lama bekerja dengan mulus dengan titik akhir Lambda lokal.

## Prasyarat
<a name="using-sam-cli-local-start-api-prerequisites"></a>

Untuk menggunakan`sam local start-lambda`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Sebelum menggunakan`sam local start-lambda`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).

## Menggunakan sam local start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

Ketika Anda menjalankan`sam local start-lambda`, AWS SAMCLI mengasumsikan bahwa direktori kerja Anda saat ini adalah direktori root proyek Anda. Yang pertama AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam `.aws-sam` subfolder. Jika tidak ditemukan, AWS SAMCLI akan mencari `template.[yaml|yml]` file dalam direktori kerja Anda saat ini.

**Untuk menggunakan sam local start-lambda**

1. Dari direktori root proyek Anda, jalankan yang berikut ini:

   ```
   $ sam local start-lambda <options>
   ```

1.  AWS SAMCLIMembangun fungsi Lambda Anda dalam wadah Docker lokal. Kemudian output alamat lokal ke endpoint server HTTP Anda. Berikut ini adalah contohnya:

   ```
   $ sam local start-lambda
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../sam-app/hello_world as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
   2023-04-13 07:25:43 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3001
   2023-04-13 07:25:43 Press CTRL+C to quit
   ```

1. Gunakan AWS CLI atau SDKs untuk menjalankan fungsi Lambda Anda secara lokal.

   Berikut ini adalah contoh menggunakan AWS CLI:

   ```
   $ aws lambda invoke --function-name "HelloWorldFunction" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt
       
   StatusCode: 200
   (END)
   ```

   Berikut ini adalah contoh menggunakan AWS SDK forPython:

   ```
   import boto3
   from botocore.config import Config
   from botocore import UNSIGNED
   
   lambda_client = boto3.client('lambda',
                                endpoint_url="http://127.0.0.1:3001",
                                use_ssl=False,
                                verify=False,
                                config=Config(signature_version=UNSIGNED,
                                              read_timeout=1,
                                              retries={'max_attempts': 0}
                                              )
                               )
   lambda_client.invoke(FunctionName="HelloWorldFunction")
   ```

## Opsi
<a name="using-sam-cli-local-start-lambda-options"></a>

### Tentukan templat
<a name="using-sam-cli-local-start-lambda-options-template"></a>

Untuk menentukan template untuk referensi AWS SAMCLI ke, gunakan `--template` opsi. AWS SAMCLIAkan memuat hanya AWS SAM template itu dan sumber daya yang ditunjukkannya. Berikut ini adalah contohnya:

```
$ sam local start-lambda --template myTemplate.yaml
```

Untuk informasi lebih lanjut tentang AWS SAM template, lihat[AWS SAM template anatomi](sam-specification-template-anatomy.md).

## Praktik terbaik
<a name="using-sam-cli-local-start-lambda-best"></a>

Jika aplikasi Anda memiliki `.aws-sam` direktori dari berjalan`sam build`, pastikan untuk menjalankan `sam build` setiap kali Anda memperbarui kode fungsi Anda. Kemudian, jalankan `sam local start-lambda` untuk menguji kode fungsi Anda yang diperbarui secara lokal.

Pengujian lokal adalah solusi hebat untuk pengembangan dan pengujian cepat sebelum menerapkan ke cloud. Namun, pengujian lokal tidak memvalidasi semuanya, seperti izin antar sumber daya Anda di cloud. Sebisa mungkin, uji aplikasi Anda di cloud. Sebaiknya [gunakan `sam sync`](using-sam-cli-sync.md) untuk mempercepat alur kerja pengujian cloud Anda.

## Pelajari selengkapnya
<a name="using-sam-cli-local-start-lambda-learn"></a>

Untuk daftar semua `sam local start-lambda` opsi, lihat[sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md).

# Memanggil fungsi Lambda secara lokal dengan AWS SAM
<a name="serverless-sam-cli-using-invoke"></a>

Memanggil fungsi Lambda secara lokal sebelum menguji atau menerapkan di cloud dapat memiliki berbagai manfaat. Ini memungkinkan Anda untuk menguji logika fungsi Anda lebih cepat. Pengujian secara lokal terlebih dahulu mengurangi kemungkinan mengidentifikasi masalah saat pengujian di cloud atau selama penerapan, yang dapat membantu Anda menghindari biaya yang tidak perlu. Selain itu, pengujian lokal membuat debugging lebih mudah dilakukan.

Anda dapat memanggil fungsi Lambda Anda secara lokal dengan menggunakan [sam local invoke](sam-cli-command-reference-sam-local-invoke.md) perintah dan memberikan ID logis fungsi dan file peristiwa. **sam local invoke**juga menerima `stdin` sebagai acara. Untuk informasi selengkapnya tentang peristiwa, lihat [Peristiwa](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-event) di *Panduan Developer AWS Lambda *. Untuk informasi tentang format pesan acara dari berbagai AWS layanan, lihat [Menggunakan AWS Lambda dengan layanan lain](https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html) di *Panduan AWS Lambda Pengembang*.

**catatan**  
Tidak disarankan untuk menggunakan kemampuan pemanggilan lokal SAM CLI dalam kode yang tidak tepercaya. Untuk memiliki isolasi lengkap dari lingkungan lokal Anda, jalankan kode di layanan Lambda secara langsung.

**catatan**  
**sam local invoke**Perintah sesuai dengan perintah AWS Command Line Interface (AWS CLI) [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html). Anda dapat menggunakan salah satu perintah untuk menjalankan fungsi Lambda.

Anda harus menjalankan **sam local invoke** perintah di direktori proyek yang berisi fungsi yang ingin Anda panggil.

 Contoh:

```
# Invoking function with event file
$ sam local invoke "Ratings" -e event.json

# Invoking function with event via stdin
$ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings"

# For more options
$ sam local invoke --help
```

## File variabel lingkungan
<a name="serverless-sam-cli-using-invoke-environment-file"></a>

Untuk mendeklarasikan variabel lingkungan secara lokal yang mengesampingkan nilai yang ditentukan dalam template Anda, lakukan hal berikut:

1. Buat JSON atau `.env` file yang berisi variabel lingkungan untuk ditimpa.

1. Gunakan `--env-vars` argumen untuk mengganti nilai yang ditentukan dalam template Anda.

`--env-vars`Opsi ini mendukung dua format file. Format file secara otomatis terdeteksi berdasarkan konten file.

### Mendeklarasikan variabel lingkungan dengan JSON
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Untuk mendeklarasikan variabel lingkungan yang berlaku secara global ke semua sumber daya, tentukan `Parameters` objek seperti berikut:

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Untuk mendeklarasikan variabel lingkungan yang berbeda untuk setiap sumber daya, tentukan objek untuk setiap sumber daya seperti berikut:

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Saat menentukan objek untuk setiap sumber daya, Anda dapat menggunakan pengidentifikasi berikut, yang terdaftar dalam urutan prioritas tertinggi hingga terendah:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Pengidentifikasi jalur lengkap

Anda dapat menggunakan kedua metode sebelumnya untuk mendeklarasikan variabel lingkungan bersama-sama dalam satu file. Saat melakukannya, variabel lingkungan yang Anda sediakan untuk sumber daya tertentu lebih diutamakan daripada variabel lingkungan global.

Simpan variabel lingkungan Anda dalam file JSON, seperti`env.json`.

### Mendeklarasikan variabel lingkungan dengan file.env
<a name="serverless-sam-cli-using-invoke-environment-file-dotenv"></a>

Anda juga dapat menggunakan `.env` file untuk mendeklarasikan variabel lingkungan. Variabel yang dideklarasikan dalam `.env` file berlaku secara global ke semua fungsi, setara dengan `Parameters` objek dalam format JSON.

```
TABLE_NAME=localtable
BUCKET_NAME=amzn-s3-demo-bucket
STAGE=dev
```

`.env`Format ini mendukung komentar (baris dimulai dengan`#`) dan nilai yang dikutip.

**catatan**  
`.env`Format ini hanya mendukung variabel lingkungan global. Untuk mendeklarasikan variabel lingkungan khusus fungsi, gunakan format JSON.

### Mengesampingkan nilai variabel lingkungan
<a name="serverless-sam-cli-using-invoke-environment-file-override"></a>

Untuk mengganti variabel lingkungan dengan yang didefinisikan dalam file variabel lingkungan Anda, gunakan `--env-vars` argumen dengan **start-api** perintah **invoke** or. Contoh:

```
# Using a JSON file
sam local invoke --env-vars env.json

# Using a .env file
sam local invoke --env-vars .env
```

## Lapisan
<a name="serverless-sam-cli-using-invoke-layers"></a>

Jika aplikasi Anda menyertakan lapisan, untuk informasi tentang cara men-debug masalah dengan lapisan pada host lokal Anda, lihat[Tingkatkan efisiensi menggunakan lapisan Lambda dengan AWS SAM](serverless-sam-cli-layers.md).

## Pelajari selengkapnya
<a name="serverless-sam-cli-using-invoke-learn"></a>

*Untuk contoh langsung menjalankan fungsi secara lokal, lihat [Modul 2 - Jalankan secara lokal di The Complete Workshop](https://s12d.com/sam-ws-en-local). AWS SAM *

# Jalankan API Gateway secara lokal dengan AWS SAM
<a name="serverless-sam-cli-using-start-api"></a>

Menjalankan Amazon API Gateway secara lokal dapat memiliki berbagai manfaat. Misalnya, menjalankan API Gateway secara lokal memungkinkan Anda menguji titik akhir API secara lokal sebelum penerapan ke cloud. AWS Jika Anda menguji secara lokal terlebih dahulu, Anda sering dapat mengurangi pengujian dan pengembangan di cloud, yang dapat membantu mengurangi biaya. Selain itu, menjalankan secara lokal membuat debugging lebih mudah. 

Untuk memulai instance lokal API Gateway yang dapat Anda gunakan untuk menguji fungsionalitas permintaan/respons HTTP, gunakan perintah tersebut. `sam local start-api` AWS SAMCLI Fungsionalitas ini memiliki fitur hot reload sehingga Anda dapat dengan cepat mengembangkan dan mengulangi fungsi Anda.

**catatan**  
*Hot reload* adalah ketika hanya file yang diubah yang di-refresh, dan status aplikasi tetap sama. Sebaliknya, *live reload* adalah ketika seluruh aplikasi di-refresh, dan status aplikasi hilang.

Untuk petunjuk tentang penggunaan `sam local start-api` perintah, lihat[Pengantar pengujian dengan sam local start-api](using-sam-cli-local-start-api.md).

Secara default, AWS SAM menggunakan integrasi AWS Lambda proxy dan mendukung keduanya `HttpApi` dan jenis `Api` sumber daya. Untuk informasi selengkapnya tentang integrasi proxy untuk jenis `HttpApi` sumber daya, lihat [Bekerja dengan integrasi AWS Lambda proxy untuk HTTP APIs di Panduan](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) *Pengembang API Gateway*. Untuk informasi selengkapnya tentang integrasi proxy dengan tipe `Api` sumber daya, lihat [Memahami integrasi proxy API Gateway Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-create-api-as-simple-proxy) di Panduan Pengembang *API Gateway*.

**Contoh:**

```
$ sam local start-api
```

AWS SAM secara otomatis menemukan fungsi apa pun dalam AWS SAM template Anda yang memiliki `HttpApi` atau sumber `Api` peristiwa yang ditentukan. Kemudian, ia memasang fungsi pada jalur HTTP yang ditentukan.

Pada contoh `Api` berikut, fungsi `Ratings` memasang `ratings.py:handler()` di `/ratings` untuk permintaan `GET`:

```
Ratings:
  Type: AWS::Serverless::Function
  Properties:
    Handler: ratings.handler
    Runtime: python3.9
    Events:
      Api:
        Type: Api
        Properties:
          Path: /ratings
          Method: get
```

Berikut adalah contoh respons `Api`:

```
// Example of a Proxy Integration response
exports.handler = (event, context, callback) => {
    callback(null, {
        statusCode: 200,
        headers: { "x-custom-header" : "my custom header value" },
        body: "hello world"
    });
}
```

Jika Anda memodifikasi kode fungsi Anda, jalankan `sam build` perintah `sam local start-api` untuk mendeteksi perubahan Anda.

## File variabel lingkungan
<a name="serverless-sam-cli-using-start-api-environment-variable"></a>

Untuk mendeklarasikan variabel lingkungan secara lokal yang mengesampingkan nilai yang ditentukan dalam template Anda, lakukan hal berikut:

1. Buat file JSON yang berisi variabel lingkungan untuk diganti.

1. Gunakan `--env-vars` argumen untuk mengganti nilai yang ditentukan dalam template Anda.

### Mendeklarasikan variabel lingkungan
<a name="serverless-sam-cli-using-invoke-environment-file-declaring"></a>

Untuk mendeklarasikan variabel lingkungan yang berlaku secara global ke semua sumber daya, tentukan `Parameters` objek seperti berikut:

```
{
    "Parameters": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
        "STAGE": "dev"
    }
}
```

Untuk mendeklarasikan variabel lingkungan yang berbeda untuk setiap sumber daya, tentukan objek untuk setiap sumber daya seperti berikut:

```
{
    "MyFunction1": {
        "TABLE_NAME": "localtable",
        "BUCKET_NAME": "amzn-s3-demo-bucket",
    },
    "MyFunction2": {
        "TABLE_NAME": "localtable",
        "STAGE": "dev"
    }
}
```

Saat menentukan objek untuk setiap sumber daya, Anda dapat menggunakan pengidentifikasi berikut, yang terdaftar dalam urutan prioritas tertinggi hingga terendah:

1. `logical_id`

1. `function_id`

1. `function_name`

1. Pengidentifikasi jalur lengkap

Anda dapat menggunakan kedua metode sebelumnya untuk mendeklarasikan variabel lingkungan bersama-sama dalam satu file. Saat melakukannya, variabel lingkungan yang Anda sediakan untuk sumber daya tertentu lebih diutamakan daripada variabel lingkungan global.

Simpan variabel lingkungan Anda dalam file JSON, seperti`env.json`.

### Mengesampingkan nilai variabel lingkungan
<a name="serverless-sam-cli-using-start-api-environment-file-override"></a>

Untuk mengganti variabel lingkungan dengan yang ditentukan dalam file JSON Anda, gunakan `--env-vars` argumen dengan perintah **invoke** or**start-api**. Contoh:

```
$ sam local start-api --env-vars env.json
```

## Lapisan
<a name="serverless-sam-cli-using-start-api-layers"></a>

Jika aplikasi Anda menyertakan lapisan, untuk informasi tentang cara men-debug masalah dengan lapisan pada host lokal Anda, lihat[Tingkatkan efisiensi menggunakan lapisan Lambda dengan AWS SAM](serverless-sam-cli-layers.md).

# Pengantar pengujian cloud dengan sam remote test-event
<a name="using-sam-cli-remote-test-event"></a>

Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAM CLI) `sam remote test-event` untuk mengakses dan mengelola peristiwa pengujian yang dapat dibagikan untuk AWS Lambda fungsi Anda.

Untuk mempelajari lebih lanjut tentang peristiwa pengujian yang dapat dibagikan, lihat [Acara pengujian yang dapat dibagikan](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) di Panduan *AWS Lambda Pengembang*.

**Topics**
+ [Siapkan AWS SAMCLI untuk digunakan sam remote test-event](#using-sam-cli-remote-test-event-setup)
+ [Menggunakan sam remote test-event perintah](#using-sam-cli-remote-test-event-use)
+ [Menggunakan acara uji yang dapat dibagikan](#using-sam-cli-remote-test-event-invoke)
+ [Mengelola acara uji yang dapat dibagikan](#using-sam-cli-remote-test-event-manage)

## Prasyarat
<a name="using-sam-cli-remote-test-event-prerequisites"></a>

Untuk menggunakan`sam remote test-event`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Jika Anda sudah AWS SAM CLI menginstal, kami sarankan untuk meningkatkan ke versi terbaru dari AWS SAMCLI versi. Untuk mempelajari selengkapnya, lihat [Upgrade AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Sebelum menggunakan`sam remote test-event`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).
+ [Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud](using-sam-cli-sync.md).

## Siapkan AWS SAMCLI untuk digunakan sam remote test-event
<a name="using-sam-cli-remote-test-event-setup"></a>

Selesaikan langkah-langkah pengaturan berikut untuk menggunakan AWS SAM CLI `sam remote test-event` perintah:

1. **Konfigurasikan AWS SAM CLI untuk menggunakan Akun AWS** - Acara pengujian yang dapat dibagikan untuk Lambda dapat diakses dan dikelola oleh pengguna dalam hal yang sama. Akun AWS Untuk mengkonfigurasi AWS SAM CLI untuk menggunakan Anda Akun AWS, lihat[Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).

1. **Konfigurasikan izin untuk acara pengujian yang dapat dibagikan — Untuk mengakses dan mengelola peristiwa** pengujian yang dapat dibagikan, Anda harus memiliki izin yang tepat. Untuk mempelajari selengkapnya, lihat [Acara pengujian yang dapat dibagikan](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) di *Panduan AWS Lambda Pengembang*.

## Menggunakan sam remote test-event perintah
<a name="using-sam-cli-remote-test-event-use"></a>

 AWS SAM CLI`sam remote test-event`Perintah ini menyediakan subperintah berikut yang dapat Anda gunakan untuk mengakses dan mengelola peristiwa pengujian yang dapat dibagikan:
+ `delete`— Hapus acara pengujian yang dapat dibagikan dari registri EventBridge skema Amazon.
+ `get`— Dapatkan acara uji yang dapat dibagikan dari registri EventBridge skema.
+ `list`— Buat daftar peristiwa pengujian yang dapat dibagikan untuk fungsi dari registri EventBridge skema.
+ `put`— Simpan acara dari file lokal ke registri EventBridge skema.

Untuk membuat daftar subperintah ini menggunakan AWS SAM CLI, jalankan yang berikut ini:

```
$ sam remote test-event --help
```

### Menghapus acara pengujian yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-use-delete"></a>

Anda dapat menghapus peristiwa pengujian yang dapat dibagikan dengan menggunakan `delete` subperintah bersama dengan yang berikut:
+ Berikan nama acara pengujian yang dapat dibagikan untuk dihapus.
+ Berikan ID yang dapat diterima dari fungsi Lambda yang terkait dengan acara tersebut.
+ Jika Anda memberikan ID logis fungsi Lambda, Anda juga harus memberikan nama AWS CloudFormation tumpukan yang terkait dengan fungsi Lambda.

Berikut ini adalah contohnya:

```
$ sam remote test-event delete HelloWorldFunction --stack-name sam-app --name demo-event
```

Untuk daftar opsi yang akan digunakan dengan `delete` subperintah, lihat[sam remote test-event delete](sam-cli-command-reference-remote-test-event-delete.md). Anda juga dapat menjalankan yang berikut ini dari AWS SAM CLI:

```
$ sam remote test-event delete --help
```

### Mendapatkan acara uji yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-use-get"></a>

Anda bisa mendapatkan acara pengujian yang dapat dibagikan dari registri EventBridge skema dengan menggunakan `get` subperintah bersama dengan yang berikut:
+ Berikan nama acara uji yang dapat dibagikan untuk didapatkan.
+ Berikan ID yang dapat diterima dari fungsi Lambda yang terkait dengan acara tersebut.
+ Jika Anda memberikan ID logis fungsi Lambda, Anda juga harus memberikan nama AWS CloudFormation tumpukan yang terkait dengan fungsi Lambda.

Berikut ini adalah contoh yang mendapatkan acara pengujian yang dapat dibagikan bernama `demo-event` yang terkait dengan fungsi `HelloWorldFunction` Lambda dari `sam-app` tumpukan. Perintah ini akan mencetak acara ke konsol Anda.

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event
```

Untuk mendapatkan acara pengujian yang dapat dibagikan dan menyimpannya ke mesin lokal Anda, gunakan `--output-file` opsi dan berikan jalur dan nama file. Berikut ini adalah contoh yang menyimpan `demo-event` seperti `demo-event.json` pada direktori kerja saat ini:

```
$ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
```

Untuk daftar opsi yang akan digunakan dengan `get` subperintah, lihat[sam remote test-event get](sam-cli-command-reference-remote-test-event-get.md). Anda juga dapat menjalankan yang berikut ini dari AWS SAM CLI:

```
$ sam remote test-event get --help
```

### Daftar acara uji yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-use-list"></a>

Anda dapat mencantumkan semua peristiwa pengujian yang dapat dibagikan untuk fungsi Lambda tertentu dari registri skema. Gunakan `list` subperintah bersama dengan yang berikut ini:
+ Berikan ID yang dapat diterima dari fungsi Lambda yang terkait dengan peristiwa.
+ Jika Anda memberikan ID logis fungsi Lambda, Anda juga harus memberikan nama CloudFormation tumpukan yang terkait dengan fungsi Lambda.

Berikut ini adalah contoh yang memperoleh daftar semua peristiwa pengujian yang dapat dibagikan yang terkait dengan fungsi `HelloWorldFunction` Lambda dari tumpukan: `sam-app`

```
$ sam remote test-event list HelloWorldFunction --stack-name sam-app
```

Untuk daftar opsi yang akan digunakan dengan `list` subperintah, lihat[sam remote test-event list](sam-cli-command-reference-remote-test-event-list.md). Anda juga dapat menjalankan yang berikut ini dari AWS SAM CLI:

```
$ sam remote test-event list --help
```

### Menyimpan acara uji yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-use-put"></a>

Anda dapat menyimpan peristiwa pengujian yang dapat dibagikan ke registri EventBridge skema. Gunakan `put` subperintah bersama dengan yang berikut ini:
+ Berikan ID yang dapat diterima dari fungsi Lambda yang terkait dengan peristiwa pengujian yang dapat dibagikan.
+ Berikan nama untuk acara pengujian yang dapat dibagikan.
+ Berikan jalur file dan nama ke acara lokal untuk diunggah.

Berikut ini adalah contoh yang menyimpan `demo-event.json` acara lokal sebagai `demo-event` dan mengaitkannya dengan fungsi `HelloWorldFunction` Lambda dari `sam-app` tumpukan:

```
$ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json
```

Jika peristiwa pengujian yang dapat dibagikan dengan nama yang sama ada di registri EventBridge skema, AWS SAM CLI maka tidak akan menimpa. Untuk menimpa, tambahkan `--force` opsi ke perintah Anda.

Untuk daftar opsi yang akan digunakan dengan `put` subperintah, lihat[sam remote test-event put](sam-cli-command-reference-remote-test-event-put.md). Anda juga dapat menjalankan yang berikut ini dari AWS SAM CLI:

```
$ sam remote test-event put --help
```

## Menggunakan acara uji yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-invoke"></a>

Gunakan peristiwa pengujian yang dapat dibagikan untuk menguji fungsi Lambda Anda di dengan AWS Cloud `sam remote invoke` perintah. Untuk mempelajari selengkapnya, lihat [Lulus peristiwa pengujian yang dapat dibagikan ke fungsi Lambda di cloud](using-sam-cli-remote-invoke.md#using-sam-cli-remote-invoke-shareable).

## Mengelola acara uji yang dapat dibagikan
<a name="using-sam-cli-remote-test-event-manage"></a>

Topik ini berisi contoh bagaimana Anda dapat mengelola dan menggunakan peristiwa pengujian yang dapat dibagikan.

### Dapatkan acara pengujian yang dapat dibagikan, modifikasi, dan gunakan
<a name="using-sam-cli-remote-test-event-manage-example1"></a>

Anda bisa mendapatkan acara pengujian yang dapat dibagikan dari registri EventBridge skema, memodifikasinya secara lokal, dan menggunakan peristiwa pengujian lokal dengan fungsi Lambda Anda di. AWS Cloud Berikut ini adalah contohnya:

1. **Mengambil peristiwa pengujian yang dapat dibagikan - Gunakan `sam remote test-event get` subperintah untuk mengambil peristiwa pengujian** yang dapat dibagikan untuk fungsi Lambda tertentu dan menyimpannya secara lokal:

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Ubah acara pengujian yang dapat dibagikan** - Gunakan editor teks pilihan Anda untuk memodifikasi acara pengujian yang dapat dibagikan.

1. **Gunakan acara pengujian yang dapat dibagikan** - Gunakan `sam remote invoke` perintah dan berikan jalur file dan nama acara dengan`--event-file`:

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
   ```

### Dapatkan acara pengujian yang dapat dibagikan, modifikasi, unggah, dan gunakan
<a name="using-sam-cli-remote-test-event-manage-example2"></a>

Anda bisa mendapatkan acara pengujian yang dapat dibagikan dari registri EventBridge skema, memodifikasinya secara lokal, dan mengunggahnya. Kemudian, Anda dapat lulus acara pengujian yang dapat dibagikan langsung ke fungsi Lambda Anda di. AWS Cloud Berikut ini adalah contohnya:

1. **Mengambil peristiwa pengujian yang dapat dibagikan - Gunakan `sam remote test-event get` subperintah untuk mengambil peristiwa pengujian** yang dapat dibagikan untuk fungsi Lambda tertentu dan menyimpannya secara lokal:

   ```
   $ sam remote test-event get HelloWorldFunction --stack-name sam-app --name demo-event --output-file demo-event.json
   ```

1. **Ubah acara pengujian yang dapat dibagikan** - Gunakan editor teks pilihan Anda untuk memodifikasi acara pengujian yang dapat dibagikan.

1. **Unggah peristiwa pengujian yang dapat dibagikan** — Gunakan `sam remote test-event put` subperintah untuk mengunggah dan menyimpan peristiwa pengujian yang dapat dibagikan ke registri skema. EventBridge Dalam contoh ini, kami menggunakan `--force` opsi untuk menimpa versi lama dari pengujian kami yang dapat dibagikan:

   ```
   $ sam remote test-event put HelloWorldFunction --stack-name sam-app --name demo-event --file demo-event.json --force
   ```

1. **Lulus peristiwa pengujian yang dapat dibagikan ke fungsi Lambda Anda** — Gunakan `sam remote invoke` perintah untuk meneruskan peristiwa pengujian yang dapat dibagikan langsung ke fungsi Lambda Anda di: AWS Cloud

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
   ```

# Pengantar pengujian di cloud dengan sam remote invoke
<a name="using-sam-cli-remote-invoke"></a>

Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAM CLI) `sam remote invoke` untuk berinteraksi dengan AWS sumber daya yang didukung di AWS Cloud. Anda dapat menggunakan `sam remote invoke` untuk memanggil sumber daya berikut:
+ **Amazon Kinesis Data** Streams — Mengirim catatan data ke aplikasi Kinesis Data Streams.
+ **AWS Lambda**— Memanggil dan meneruskan acara ke fungsi Lambda Anda.
+ **Amazon Simple Queue Service (Amazon Simple Service) — Kirim pesan ke antrian Amazon** SQS.
+ **AWS Step Functions**— Memanggil mesin status Step Functions untuk memulai eksekusi.

Untuk pengantar AWS SAMCLI, lihat [Apa itu AWS SAMCLI?](what-is-sam-overview.md#what-is-sam-cli)

Untuk contoh penggunaan `sam remote invoke` selama alur kerja pengembangan tipikal, lihat[Langkah 5: Berinteraksi dengan fungsi Anda di AWS Cloud](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-remote-invoke).

**Topics**
+ [Menggunakan perintah sam remote invoke](#using-sam-cli-remote-invoke-use)
+ [Menggunakan opsi perintah panggilan jarak jauh sam](#using-sam-cli-remote-invoke-options)
+ [Konfigurasikan file konfigurasi proyek Anda](#using-sam-cli-remote-invoke-configure)
+ [Contoh](#using-sam-cli-remote-invoke-examples)
+ [Tautan terkait](#using-sam-cli-remote-invoke-links)

## Prasyarat
<a name="using-sam-cli-remote-invoke-prerequisites"></a>

Untuk menggunakan`sam remote invoke`, instal AWS SAMCLI dengan menyelesaikan yang berikut ini:
+ [AWS SAM prasyarat](prerequisites.md).
+ [Instal AWS SAMCLI](install-sam-cli.md).

Kami juga merekomendasikan untuk meningkatkan ke versi terbaru dari. AWS SAMCLI Untuk mempelajari selengkapnya, lihat [Upgrade AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

Sebelum menggunakan`sam remote invoke`, kami merekomendasikan pemahaman dasar tentang hal-hal berikut:
+ [Mengkonfigurasi AWS SAMCLI](using-sam-cli-configure.md).
+ [Buat aplikasi Anda di AWS SAM](using-sam-cli-init.md).
+ [Pengantar bangunan dengan AWS SAM](using-sam-cli-build.md).
+ [Pengantar penerapan dengan AWS SAM](using-sam-cli-deploy.md).
+ [Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud](using-sam-cli-sync.md).

## Menggunakan perintah sam remote invoke
<a name="using-sam-cli-remote-invoke-use"></a>

Sebelum menggunakan perintah ini, sumber daya Anda harus dikerahkan ke file. AWS Cloud

Gunakan struktur perintah berikut dan jalankan dari direktori root proyek Anda:

```
$ sam remote invoke <arguments> <options>
```

**catatan**  
Halaman ini akan menampilkan opsi yang disediakan di command prompt. Anda juga dapat mengonfigurasi opsi dalam file konfigurasi proyek Anda alih-alih meneruskannya di prompt perintah. Untuk mempelajari lebih lanjut,[Konfigurasikan pengaturan proyek](using-sam-cli-configure.md#using-sam-cli-configure-project).

Untuk deskripsi `sam remote invoke` argumen dan opsi, lihat[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Menggunakan dengan Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-use-kinesis"></a>

Anda dapat mengirim catatan data ke aplikasi Kinesis Data Streams. Ini AWS SAM CLI akan mengirim catatan data Anda dan mengembalikan ID pecahan dan nomor urut. Berikut ini adalah contohnya:

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world
	
	Putting record to Kinesis data stream KinesisStream                                                             
	Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
	a JSON string as event                                                                                          
	{
	  "ShardId": "shardId-000000000000",
	  "SequenceNumber": "49646251411914806775980850790050483811301135051202232322"
	}%
```

**Untuk mengirim catatan data**

1. Berikan nilai ID sumber daya sebagai argumen untuk aplikasi Kinesis Data Streams Anda. Untuk informasi tentang sumber daya yang valid IDs, lihat [ID Sumber Daya](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Berikan catatan data sebagai acara untuk dikirim ke aplikasi Kinesis Data Streams Anda. Anda dapat memberikan acara di baris perintah menggunakan `--event` opsi, atau dari file yang menggunakan`--event-file`. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

### Menggunakan dengan fungsi Lambda
<a name="using-sam-cli-remote-invoke-use-lambda"></a>

Anda dapat menjalankan fungsi Lambda di cloud dan meneruskan acara kosong atau memberikan acara di baris perintah atau dari file. Ini AWS SAM CLI akan memanggil fungsi Lambda Anda dan mengembalikan responsnya. Berikut ini adalah contohnya:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app

Invoking Lambda Function HelloWorldFunction                                       
START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST
END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9
REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9  Duration: 6.62 ms       Billed Duration: 7 ms     Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 164.06 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

**Untuk menjalankan fungsi Lambda**

1. Berikan nilai ID sumber daya sebagai argumen untuk fungsi Lambda Anda. Untuk informasi tentang sumber daya yang valid IDs, lihat [ID Sumber Daya](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Berikan acara untuk dikirim ke fungsi Lambda Anda. Anda dapat memberikan acara di baris perintah menggunakan `--event` opsi, atau dari file yang menggunakan`--event-file`. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

#### Fungsi Lambda dikonfigurasi dengan streaming respons
<a name="using-sam-cli-remote-invoke-invoke-stream"></a>

`sam remote invoke`Perintah ini mendukung fungsi Lambda yang dikonfigurasi untuk mengalirkan respons. Anda dapat mengonfigurasi fungsi Lambda untuk mengalirkan respons menggunakan `FunctionUrlConfig` properti di templat Anda AWS SAM . Saat Anda menggunakan`sam remote invoke`, AWS SAMCLI akan secara otomatis mendeteksi konfigurasi Lambda Anda dan memanggil dengan streaming respons.

Sebagai contoh, lihat [Memanggil fungsi Lambda yang dikonfigurasi untuk mengalirkan respons](#using-sam-cli-remote-invoke-examples-lambda-stream).

#### Lulus peristiwa pengujian yang dapat dibagikan ke fungsi Lambda di cloud
<a name="using-sam-cli-remote-invoke-shareable"></a>

Acara uji yang dapat dibagikan adalah acara uji yang dapat Anda bagikan dengan orang lain dalam hal yang sama Akun AWS. Untuk mempelajari selengkapnya, lihat [Acara pengujian yang dapat dibagikan](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html#creating-shareable-events) di *Panduan AWS Lambda Pengembang*.

##### Mengakses dan mengelola acara pengujian yang dapat dibagikan
<a name="using-sam-cli-remote-invoke-shareable-access"></a>

Anda dapat menggunakan AWS SAM CLI `sam remote test-event` perintah untuk mengakses dan mengelola peristiwa pengujian yang dapat dibagikan. Misalnya, Anda dapat menggunakan `sam remote test-event` untuk melakukan hal berikut:
+ Ambil peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema Amazon.
+ Ubah peristiwa pengujian yang dapat dibagikan secara lokal dan unggah ke registri EventBridge skema.
+ Hapus peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema.

Untuk mempelajari selengkapnya, lihat [Pengantar pengujian cloud dengan sam remote test-event](using-sam-cli-remote-test-event.md).

##### Lulus acara pengujian yang dapat dibagikan ke fungsi Lambda di cloud
<a name="using-sam-cli-remote-invoke-shareable-pass"></a>

Untuk meneruskan peristiwa pengujian yang dapat dibagikan dari registri EventBridge skema ke fungsi Lambda Anda di cloud, gunakan `--test-event-name` opsi dan berikan nama acara pengujian yang dapat dibagikan. Berikut ini adalah contohnya:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --test-event-name demo-event
```

Jika Anda menyimpan peristiwa pengujian yang dapat dibagikan secara lokal, Anda dapat menggunakan `--event-file` opsi dan memberikan jalur file dan nama acara pengujian lokal. Berikut ini adalah contohnya:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file demo-event.json
```

### Menggunakan dengan Amazon SQS
<a name="using-sam-cli-remote-invoke-use-sqs"></a>

Anda dapat mengirim pesan ke antrian Amazon SQS. AWS SAM CLIPengembalian berikut ini:
+ ID Pesan
+ MD5 dari badan pesan
+ Metadata respons

 Berikut ini adalah contohnya:

```
$ sam remote invoke MySqsQueue --stack-name sqs-example -event hello

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "5d41402abc4b2a76b9719d911017c592",
  "MessageId": "05c7af65-9ae8-4014-ae28-809d6d8ec652"
}%
```

**Untuk mengirim pesan**

1. Berikan nilai ID sumber daya sebagai argumen untuk antrean Amazon SQS. Untuk informasi tentang sumber daya yang valid IDs, lihat [ID Sumber Daya](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Berikan acara untuk dikirim ke antrean Amazon SQS Anda. Anda dapat memberikan acara di baris perintah menggunakan `--event` opsi, atau dari file yang menggunakan`--event-file`. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

### Menggunakan dengan Step Functions
<a name="using-sam-cli-remote-invoke-use-sf"></a>

Anda dapat memanggil mesin status Step Functions untuk memulai eksekusi. AWS SAM CLIAkan menunggu alur kerja mesin negara selesai dan mengembalikan output dari langkah terakhir dalam eksekusi. Berikut ini adalah contohnya:

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example --event '{"is_developer": true}'

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello Developer World"%
```

**Untuk memanggil mesin negara**

1. Berikan nilai ID sumber daya sebagai argumen untuk mesin status Step Functions. Untuk informasi tentang sumber daya yang valid IDs, lihat [ID Sumber Daya](sam-cli-command-reference-remote-invoke.md#sam-cli-command-reference-remote-invoke-args-resource-id).

1. Berikan acara untuk dikirim ke mesin negara Anda. Anda dapat memberikan acara di baris perintah menggunakan `--event` opsi, atau dari file yang menggunakan`--event-file`. Jika Anda tidak memberikan acara, AWS SAM CLI mengirimkan acara kosong.

## Menggunakan opsi perintah panggilan jarak jauh sam
<a name="using-sam-cli-remote-invoke-options"></a>

Bagian ini mencakup beberapa opsi utama yang dapat Anda gunakan dengan `sam remote invoke` perintah. Untuk daftar lengkap opsi, lihat[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

### Lulus acara ke sumber daya Anda
<a name="using-sam-cli-remote-invoke-options-event"></a>

Gunakan opsi berikut untuk meneruskan acara ke sumber daya Anda di cloud:
+ `--event`— Lewati acara di baris perintah.
+ `--event-file`— Lulus acara dari file.

#### Contoh Lambda
<a name="using-sam-cli-remote-invoke-options-event-lambda-examples"></a>

**Gunakan `--event` untuk meneruskan acara di baris perintah sebagai nilai string:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event '{"message": "hello!"}'

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab Version: $LATEST
END RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab
REPORT RequestId: b992292d-1fac-4aa2-922a-c9dc5c6fceab  Duration: 16.41 ms      Billed Duration: 17 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 185.96 ms
{"statusCode":200,"body":"{\"message\":\"hello!\"}"}%
```

**Gunakan `--event-file` untuk meneruskan acara dari file dan memberikan path ke file:**

```
$ cat event.json
			
{"message": "hello from file"}%    
			
$ sam remote invoke HelloWorldFunction --stack-name sam-app --event-file event.json       

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9 Version: $LATEST
END RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9
REPORT RequestId: 3bc71f7d-153a-4b1e-8c9a-901d91b1bec9  Duration: 21.15 ms      Billed Duration: 22 ms  Memory Size: 128 MB     Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

**Lulus acara menggunakan`stdin`:**

```
$ cat event.json
			
{"message": "hello from file"}%    
                                                                       
$ cat event.json | sam remote invoke HelloWorldFunction --stack-name sam-app --event-file -

Reading event from stdin (you can also pass it from file with --event-file)                               
Invoking Lambda Function HelloWorldFunction                                                               
START RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a Version: $LATEST
END RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a
REPORT RequestId: 85ecc902-8ad0-4a2b-a8c8-9bb4f65f5a7a  Duration: 1.36 ms       Billed Duration: 2 ms   Memory Size: 128 MB       Max Memory Used: 67 MB
{"statusCode":200,"body":"{\"message\":\"hello from file\"}"}%
```

### Konfigurasikan output AWS SAMCLI respons
<a name="using-sam-cli-remote-invoke-options-output"></a>

Saat Anda memanggil sumber daya yang didukung`sam remote invoke`, akan AWS SAMCLI mengembalikan respons yang berisi berikut ini:
+ **Minta metadata** — Metadata yang terkait dengan permintaan. Ini termasuk ID permintaan dan waktu mulai permintaan.
+ **Respons sumber daya** — Respons dari sumber daya Anda setelah dipanggil di cloud.

Anda dapat menggunakan `--output` opsi untuk mengkonfigurasi respons AWS SAM CLI output. Nilai opsi berikut tersedia:
+ `json`— Metadata dan respon sumber daya dikembalikan dalam struktur. JSON Respons berisi SDK output penuh.
+ `text`— Metadata dikembalikan dalam struktur teks. Respons sumber daya dikembalikan dalam format output sumber daya.

Berikut ini adalah contoh dari `json` output:

```
$ sam remote invoke --stack-name sam-app --output json

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
{
  "ResponseMetadata": {
    "RequestId": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:15:46 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "3bdf9a30-776d-4a90-94a6-4cccc0fc7b41",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
      "x-amzn-trace-id": "root=1-64908d42-17dab270273fcc6b527dd6b8;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiAzYmRmOWEzMC03NzZkLTRhOTAtOTRhNi00Y2NjYzBmYzdiNDEKUkVQT1JUIFJlcXVlc3RJZDogM2JkZjlhMzAtNzc2ZC00YTkwLTk0YTYtNGNjY2MwZmM3YjQxCUR1cmF0aW9uOiA4LjIzIG1zCUJpbGxlZCBEdXJhdGlvbjogOSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjggTUIJCg==",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Saat Anda menentukan `json` output, seluruh respons dikembalikan ke`stdout`. Berikut ini adalah contohnya:

```
$ sam remote invoke --stack-name sam-app --output json 1> stdout.log

Invoking Lambda Function HelloWorldFunction           
                                                                                                                                                                                                          
$ cat stdout.log
			
{
  "ResponseMetadata": {
    "RequestId": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "date": "Mon, 19 Jun 2023 17:35:56 GMT",
      "content-type": "application/json",
      "content-length": "57",
      "connection": "keep-alive",
      "x-amzn-requestid": "d30d280f-8188-4372-bc94-ce0f1603b6bb",
      "x-amzn-remapped-content-length": "0",
      "x-amz-executed-version": "$LATEST",
      "x-amz-log-result": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
      "x-amzn-trace-id": "root=1-649091fc-771473c7778689627a6122b7;sampled=0;lineage=2301f8dc:0"
    },
    "RetryAttempts": 0
  },
  "StatusCode": 200,
  "LogResult": "U1RBUlQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiBkMzBkMjgwZi04MTg4LTQzNzItYmM5NC1jZTBmMTYwM2I2YmIKUkVQT1JUIFJlcXVlc3RJZDogZDMwZDI4MGYtODE4OC00MzcyLWJjOTQtY2UwZjE2MDNiNmJiCUR1cmF0aW9uOiA0LjE2IG1zCUJpbGxlZCBEdXJhdGlvbjogNSBtcwlNZW1vcnkgU2l6ZTogMTI4IE1CCU1heCBNZW1vcnkgVXNlZDogNjcgTUIJSW5pdCBEdXJhdGlvbjogMTU4LjM5IG1zCQo=",
  "ExecutedVersion": "$LATEST",
  "Payload": "{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}"
}%
```

Berikut ini adalah contoh dari `text` output:

```
$ sam remote invoke --stack-name sam-app --output text

Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6 Version: $LATEST
END RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6
REPORT RequestId: 4dbacc43-1ec6-47c2-982b-9dc4620144d6  Duration: 9.13 ms       Billed Duration: 10 ms  Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 165.50 ms
{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

Saat Anda menentukan `text` output, output runtime fungsi Lambda (misalnya, log) dikembalikan ke. `stderr` Payload fungsi Lambda dikembalikan ke. `stdout` Berikut ini adalah contohnya:

```
$ sam remote invoke --stack-name sam-app --output text 2> stderr.log

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}% 
                                                                                                                                                                                                     
$ cat stderr.log

Invoking Lambda Function HelloWorldFunction
START RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891 Version: $LATEST
END RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891
REPORT RequestId: 82273c3b-aa3a-4d16-8f1c-1d2ad3ace891  Duration: 40.62 ms      Billed Duration: 41 ms  Memory Size: 128 MB     Max Memory Used: 68 MB

$ sam remote invoke --stack-name sam-app --output text 1> stdout.log
 
Invoking Lambda Function HelloWorldFunction                                                                                                                                                                                                                     
START RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd Version: $LATEST
END RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd
REPORT RequestId: 74acaa9f-5b80-4a5c-b3b8-ffaccb84cbbd  Duration: 2.31 ms       Billed Duration: 3 ms   Memory Size: 128 MB     Max Memory Used: 67 MB

$ cat stdout.log

{"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
```

### Sesuaikan Boto3 parameter
<a name="using-sam-cli-remote-invoke-options-boto3"></a>

Untuk`sam remote invoke`, AWS SAM CLI menggunakan AWS SDK for Python (Boto3) untuk berinteraksi dengan sumber daya Anda di cloud. Anda dapat menggunakan `--parameter` opsi untuk menyesuaikan Boto3 parameter. Untuk daftar parameter yang didukung yang dapat Anda sesuaikan, lihat`--parameter`.

#### Contoh
<a name="using-sam-cli-remote-invoke-options-boto3-examples"></a>

**Memanggil fungsi Lambda untuk memvalidasi nilai parameter dan memverifikasi izin:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="DryRun"
```

**Gunakan `--parameter` opsi beberapa kali dalam satu perintah untuk menyediakan beberapa parameter:**

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app --parameter InvocationType="Event" --parameter LogType="None"
```

### Pilihan lain
<a name="using-sam-cli-remote-invoke-options-other"></a>

Untuk daftar lengkap `sam remote invoke` opsi, lihat[sam remote invoke](sam-cli-command-reference-remote-invoke.md).

## Konfigurasikan file konfigurasi proyek Anda
<a name="using-sam-cli-remote-invoke-configure"></a>

Untuk mengkonfigurasi `sam remote invoke` dalam file konfigurasi Anda, gunakan `remote_invoke` dalam tabel Anda. Berikut ini adalah contoh `samconfig.toml` file yang mengkonfigurasi nilai default untuk `sam remote invoke` perintah.

```
...
version =0.1

[default]
...
[default.remote_invoke.parameters]
stack_name = "cloud-app"
event = '{"message": "Hello!"}'
```

## Contoh
<a name="using-sam-cli-remote-invoke-examples"></a>

Untuk contoh dasar penggunaan`sam remote invoke`, lihat [Menguji AWS Lambda fungsi dengan AWS SAM remote](https://aws.amazon.com/blogs/compute/testing-aws-lambda-functions-with-aws-sam-remote-invoke/) di *AWS Compute Blog*.

### Contoh Kinesis Data Streams
<a name="using-sam-cli-remote-invoke-examples-kinesis"></a>

#### Contoh dasar
<a name="using-sam-cli-remote-invoke-examples-kinesis-basic"></a>

**Kirim catatan data ke aplikasi Kinesis Data Streams dari file. Aplikasi Kinesis Data Streams diidentifikasi dengan menyediakan ARN untuk ID sumber daya:**

```
$ sam remote invoke arn:aws:kinesis:us-west-2:01234567890:stream/kinesis-example-KinesisStream-BgnLcAey4xUQ --event-file event.json
```

**Kirim acara yang disediakan di baris perintah ke aplikasi Kinesis Data Streams:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event hello-world

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello-world' into JSON '"hello-world"'. If you don't want auto-conversion, please provide
a JSON string as event                                                                                          
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980903986194508740483329854174920706"
}%
```

**Dapatkan ID fisik dari aplikasi Kinesis Data Streams. Kemudian, berikan acara di baris perintah:**

```
$ sam list resources --stack-name kinesis-example --output json

[
  {
    "LogicalResourceId": "KinesisStream",
    "PhysicalResourceId": "kinesis-example-KinesisStream-ZgnLcQey4xUQ"
  }
]

$ sam remote invoke kinesis-example-KinesisStream-ZgnLcQey4xUQ --event hello

Putting record to Kinesis data stream KinesisStream                                                             
Auto converting value 'hello' into JSON '"hello"'. If you don't want auto-conversion, please provide a JSON     
string as event                                                                                                 
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904340716841045751814812900261890"
}%
```

**Berikan string JSON di baris perintah sebagai acara:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"method": "GET", "body": ""}'                      

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904492868617924990209230536441858"
}%
```

**Kirim acara kosong ke aplikasi Kinesis Data Streams:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980904866469008589597168190416224258"
}%
```

**Kembalikan AWS SAM CLI respons dalam format JSON:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json

Putting record to Kinesis data stream KinesisStream                                                             
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980905078409420803696667195489648642",
  "ResponseMetadata": {
    "RequestId": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "ebbbd307-3e9f-4431-b67c-f0715e9e353e",
      "x-amz-id-2": "Q3yBcgTwtPaQTV26IKclbECmZikUYOzKY+CzcxA84ZHgCkc5T2N/ITWg6RPOQcWw8Gn0tNPcEJBEHyVVqboJAPgCritqsvCu",
      "date": "Thu, 09 Nov 2023 18:13:10 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

**Kembalikan output JSON ke stdout:**

```
$ sam remote invoke KinesisStream --stack-name kinesis-example --event '{"hello": "world"}' --output json 1> stdout.log

Putting record to Kinesis data stream KinesisStream                                                             

$ cat stdout.log
{
  "ShardId": "shardId-000000000000",
  "SequenceNumber": "49646251411914806775980906397777867595039988349006774274",
  "ResponseMetadata": {
    "RequestId": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "f4290006-d84b-b1cd-a9ee-28306eeb2939",
      "x-amz-id-2": "npCqz+IBKpoL4sQ1ClbUmxuJlbeA24Fx1UgpIrS6mm2NoIeV2qdZSN5AhNurdssykXajBrXaC9anMhj2eG/h7Hnbf+bPuotU",
      "date": "Thu, 09 Nov 2023 18:33:26 GMT",
      "content-type": "application/x-amz-json-1.1",
      "content-length": "110"
    },
    "RetryAttempts": 0
  }
}%
```

### Contoh Lambda
<a name="using-sam-cli-remote-invoke-examples-lambda"></a>

#### Contoh dasar
<a name="using-sam-cli-remote-invoke-examples-lambda-basic"></a>

**Memanggil fungsi Lambda dengan menyediakan ARN sebagai ID sumber daya:**

```
$ sam remote invoke arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-ohRFEn2RuAvp
```

**Memanggil fungsi Lambda dengan memberikan ID logis sebagai ID sumber daya:**

Anda juga harus memberikan nama CloudFormation tumpukan menggunakan `--stack-name` opsi. Berikut ini adalah contohnya:

```
$ sam remote invoke HelloWorldFunction --stack-name sam-app
```

Jika aplikasi Anda berisi satu fungsi Lambda, Anda tidak perlu menentukan ID logisnya. Anda hanya dapat memberikan `--stack-name` opsi. Berikut ini adalah contohnya:

```
$ sam remote invoke --stack-name sam-app
```

**Memanggil fungsi Lambda dengan memberikan ID fisik sebagai ID sumber daya:**

ID fisik akan dibuat saat Anda menerapkan menggunakan CloudFormation.

```
$ sam remote invoke sam-app-HelloWorldFunction-TZvxQRFNv0k4
```

**Memanggil fungsi Lambda dari tumpukan anak:**

Untuk contoh ini, aplikasi kami berisi struktur direktori berikut:

```
lambda-example
├── childstack
│   ├── function
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── template.yaml
├── events
│   └── event.json
├── samconfig.toml
└── template.yaml
```

Untuk memanggil fungsi Lambda `childstack` kami, kami menjalankan yang berikut:

```
$ sam remote invoke ChildStack/HelloWorldFunction --stack-name lambda-example

Invoking Lambda Function HelloWorldFunction                                                                     
START RequestId: 207a864b-e67c-4307-8478-365b004d4bcd Version: $LATEST
END RequestId: 207a864b-e67c-4307-8478-365b004d4bcd
REPORT RequestId: 207a864b-e67c-4307-8478-365b004d4bcd  Duration: 1.27 ms       Billed Duration: 2 ms   Memory Size: 128 MB     Max Memory Used: 36 MB  Init Duration: 111.07 ms
{"statusCode": 200, "body": "{\"message\": \"Hello\", \"received_event\": {}}"}%
```

#### Memanggil fungsi Lambda yang dikonfigurasi untuk mengalirkan respons
<a name="using-sam-cli-remote-invoke-examples-lambda-stream"></a>

Dalam contoh ini, kita menggunakan AWS SAMCLI untuk menginisialisasi aplikasi tanpa server baru yang berisi fungsi Lambda yang dikonfigurasi untuk mengalirkan responsnya. Kami menyebarkan aplikasi kami ke AWS Cloud dan menggunakan `sam remote invoke` untuk berinteraksi dengan fungsi kami di cloud.

Kita mulai dengan menjalankan `sam init` perintah untuk membuat aplikasi tanpa server baru. Kami memilih template mulai cepat **Lambda Response Streaming** dan memberi nama aplikasi kami. **lambda-streaming-nodejs-app**

```
$ sam init
	
	You can preselect a particular runtime or package type when using the `sam init` experience.
	Call `sam init --help` to learn more.
	
	Which template source would you like to use?
	        1 - AWS Quick Start Templates
	        2 - Custom Template Location
	Choice: 1
	
	Choose an AWS Quick Start application template
	        1 - Hello World Example
	        ...
	        9 - Lambda Response Streaming
	        ...
	        15 - Machine Learning
	Template: 9
	
	Which runtime would you like to use?
	        1 - go (provided.al2)
	        2 - nodejs18.x
	        3 - nodejs16.x
	Runtime: 2
	
	Based on your selections, the only Package type available is Zip.
	We will proceed to selecting the Package type as Zip.
	
	Based on your selections, the only dependency manager available is npm.
	We will proceed copying the template using npm.
	
	Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER
	
	Would you like to enable monitoring using CloudWatch Application Insights?
	For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER
	
	Project name [sam-app]: lambda-streaming-nodejs-app
	
	    -----------------------
	    Generating application:
	    -----------------------
	    Name: lambda-streaming-nodejs-app
	    Runtime: nodejs18.x
	    Architectures: x86_64
	    Dependency Manager: npm
	    Application Template: response-streaming
	    Output Directory: .
	    Configuration file: lambda-streaming-nodejs-app/samconfig.toml
	    
	    Next steps can be found in the README file at lambda-streaming-nodejs-app/README.md
	        
	
	Commands you can use next
	=========================
	[*] Create pipeline: cd lambda-streaming-nodejs-app && sam pipeline init --bootstrap
	[*] Validate SAM template: cd lambda-streaming-nodejs-app && sam validate
	[*] Test Function in the Cloud: cd lambda-streaming-nodejs-app && sam sync --stack-name {stack-name} --watch
```

 AWS SAMCLIIni menciptakan proyek kami dengan struktur berikut:

```
lambda-streaming-nodejs-app
	├── README.md
	├── __tests__
	│   └── unit
	│       └── index.test.js
	├── package.json
	├── samconfig.toml
	├── src
	│   └── index.js
	└── template.yaml
```

Berikut ini adalah contoh kode fungsi Lambda kami:

```
exports.handler = awslambda.streamifyResponse(
	  async (event, responseStream, context) => {
	    const httpResponseMetadata = {
	      statusCode: 200,
	      headers: {
	        "Content-Type": "text/html",
	        "X-Custom-Header": "Example-Custom-Header"
	      }
	    };
	
	    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
	    // It's recommended to use a `pipeline` over the `write` method for more complex use cases.
	    // Learn more: https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html
	    responseStream.write("<html>");
	    responseStream.write("<p>First write!</p>");
	
	    responseStream.write("<h1>Streaming h1</h1>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h2>Streaming h2</h2>");
	    await new Promise(r => setTimeout(r, 1000));
	    responseStream.write("<h3>Streaming h3</h3>");
	    await new Promise(r => setTimeout(r, 1000));
	
	    // Long strings will be streamed
	    const loremIpsum1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.";
	    responseStream.write(`<p>${loremIpsum1}</p>`);
	    await new Promise(r => setTimeout(r, 1000));
	
	    responseStream.write("<p>DONE!</p>");
	    responseStream.write("</html>");
	    responseStream.end();
	  }
	);
```

Berikut ini adalah contoh `template.yaml` file kami. Streaming respons untuk fungsi Lambda kami dikonfigurasi menggunakan properti. `FunctionUrlConfig`

```
AWSTemplateFormatVersion: '2010-09-09'
	Transform: AWS::Serverless-2016-10-31
	
	Description: >
	  Sample SAM Template for lambda-streaming-nodejs-app
	  
	Resources:
	  StreamingFunction:
	    Type: AWS::Serverless::Function
	    Properties:
	      CodeUri: src/
	      Handler: index.handler
	      Runtime: nodejs18.x
	      Architectures:
	        - x86_64
	      Timeout: 10
	      FunctionUrlConfig:
	        AuthType: AWS_IAM
	        InvokeMode: RESPONSE_STREAM
	
	Outputs:
	  StreamingFunction:
	    Description: "Streaming Lambda Function ARN"
	    Value: !GetAtt StreamingFunction.Arn
	  StreamingFunctionURL:
	    Description: "Streaming Lambda Function URL"
	    Value: !GetAtt StreamingFunctionUrl.FunctionUrl
```

Biasanya, Anda dapat menggunakan `sam build` dan `sam deploy --guided` untuk membangun dan menyebarkan aplikasi produksi. Dalam contoh ini, kita akan mengasumsikan lingkungan pengembangan dan menggunakan `sam sync` perintah untuk membangun dan menyebarkan aplikasi kita.

**catatan**  
`sam sync`Perintah ini direkomendasikan untuk lingkungan pengembangan. Untuk mempelajari selengkapnya, lihat [Pengantar penggunaan sam sync untuk menyinkronkan ke AWS Cloud](using-sam-cli-sync.md).

Sebelum menjalankan`sam sync`, kami memverifikasi bahwa proyek kami dikonfigurasi dengan benar di `samconfig.toml` file kami. Yang terpenting, kami memverifikasi nilai untuk `stack_name` dan`watch`. Dengan nilai-nilai ini ditentukan dalam file konfigurasi kami, kami tidak harus menyediakannya di baris perintah.

```
version = 0.1
	
	[default]
	[default.global.parameters]
	stack_name = "lambda-streaming-nodejs-app"
	
	[default.build.parameters]
	cached = true
	parallel = true
	
	[default.validate.parameters]
	lint = true
	
	[default.deploy.parameters]
	capabilities = "CAPABILITY_IAM"
	confirm_changeset = true
	resolve_s3 = true
	s3_prefix = "lambda-streaming-nodejs-app"
	region = "us-west-2"
	image_repositories = []
	
	[default.package.parameters]
	resolve_s3 = true
	
	[default.sync.parameters]
	watch = true
	
	[default.local_start_api.parameters]
	warm_containers = "EAGER"
	
	[default.local_start_lambda.parameters]
	warm_containers = "EAGER"
```

Selanjutnya, kita jalankan `sam sync` untuk membangun dan menyebarkan aplikasi kita. Karena `--watch` opsi dikonfigurasi dalam file konfigurasi kami, AWS SAMCLI akan membangun aplikasi kami, menyebarkan aplikasi kami, dan melihat perubahan.

```
$ sam sync
	
	The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code   
	without                                                                                                   
	performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.               
	**The sync command should only be used against a development stack**.                                     
	                                                                                                          
	Queued infra sync. Waiting for in progress code syncs to complete...                                      
	Starting infra sync.                                                                                      
	Building codeuri:                                                                                         
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture: x86_64 functions: StreamingFunction  
	package.json file not found. Continuing the build without dependencies.                                   
	Running NodejsNpmBuilder:CopySource                                                                       
	
	Build Succeeded
	
	Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp.
	Execute the following command to deploy the packaged template
	sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpavrzdhgp --stack-name <YOUR STACK NAME>
	
	
	        Deploying with following values
	        ===============================
	        Stack name                   : lambda-streaming-nodejs-app
	        Region                       : us-west-2
	        Disable rollback             : False
	        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
	        Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
	        Parameter overrides          : {}
	        Signing Profiles             : null
	
	Initiating deployment
	=====================
	
	
	2023-06-20 12:11:16 - Waiting for stack create/update to complete
	
	CloudFormation events from stack operations (refresh every 0.5 seconds)
	-----------------------------------------------------------------------------------------------------
	ResourceStatus            ResourceType              LogicalResourceId         ResourceStatusReason    
	-----------------------------------------------------------------------------------------------------
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   lambda-streaming-         Transformation          
	                          ack                       nodejs-app                succeeded               
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::IAM::Role            StreamingFunctionRole     Resource creation       
	                                                                              Initiated               
	CREATE_IN_PROGRESS        AWS::CloudFormation::St   AwsSamAutoDependencyLay   Resource creation       
	                          ack                       erNestedStack             Initiated               
	CREATE_COMPLETE           AWS::IAM::Role            StreamingFunctionRole     -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   AwsSamAutoDependencyLay   -                       
	                          ack                       erNestedStack                                     
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Function     StreamingFunction         Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Function     StreamingFunction         -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_IN_PROGRESS        AWS::Lambda::Url          StreamingFunctionUrl      Resource creation       
	                                                                              Initiated               
	CREATE_COMPLETE           AWS::Lambda::Url          StreamingFunctionUrl      -                       
	CREATE_COMPLETE           AWS::CloudFormation::St   lambda-streaming-         -                       
	                          ack                       nodejs-app                                        
	-----------------------------------------------------------------------------------------------------
	
	CloudFormation outputs from deployed stack
	-------------------------------------------------------------------------------------------------------
	Outputs                                                                                               
	-------------------------------------------------------------------------------------------------------
	Key                 StreamingFunction                                                                 
	Description         Streaming Lambda Function ARN                                                     
	Value               arn:aws:lambda:us-west-2:012345678910:function:lambda-streaming-nodejs-app-       
	StreamingFunction-gUmhO833A0vZ                                                                        
	
	Key                 StreamingFunctionURL                                                              
	Description         Streaming Lambda Function URL                                                     
	Value               https://wxgkcc2dyntgtrwhf2dgdcvylu0rnnof.lambda-url.us-west-2.on.aws/             
	-------------------------------------------------------------------------------------------------------
	
	                                                                                                          
	Stack creation succeeded. Sync infra completed.                                                           
	                                                                                                          
	Infra sync completed.
```

Sekarang fungsi kita diterapkan ke cloud, kita dapat menggunakan `sam remote invoke` untuk berinteraksi dengan fungsi kita. AWS SAMCLISecara otomatis mendeteksi bahwa fungsi kami dikonfigurasi untuk streaming respons dan segera mulai mengeluarkan respons streaming dari fungsi kami secara real time.

```
$ sam remote invoke StreamingFunction
	
	Invoking Lambda Function StreamingFunction                                              
	{"statusCode":200,"headers":{"Content-Type":"text/html","X-Custom-Header":"Example-Custom-Header"}}<html><p>First write!</p><h1>Streaming h1</h1><h2>Streaming h2</h2><h3>Streaming h3</h3><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae mi tincidunt tellus ultricies dignissim id et diam. Morbi pharetra eu nisi et finibus. Vivamus diam nulla, vulputate et nisl cursus, pellentesque vehicula libero. Cras imperdiet lorem ante, non posuere dolor sollicitudin a. Vestibulum ipsum lacus, blandit nec augue id, lobortis dictum urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi auctor orci eget tellus aliquam, non maximus massa porta. In diam ante, pulvinar aliquam nisl non, elementum hendrerit sapien. Vestibulum massa nunc, mattis non congue vitae, placerat in quam. Nam vulputate lectus metus, et dignissim erat varius a.</p><p>DONE!</p></html>START RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4 Version: $LATEST
	END RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4
	REPORT RequestId: 1e4cdf04-60de-4769-b3a2-c1481982deb4  Duration: 4088.66 ms    Billed Duration: 4089 ms        Memory Size: 128 MB     Max Memory Used: 68 MB  Init Duration: 168.45 ms
```

Ketika kita memodifikasi kode fungsi kita, AWS SAMCLI langsung mendeteksi dan segera menyebarkan perubahan kita. Berikut adalah contoh AWS SAMCLI output setelah perubahan dilakukan pada kode fungsi kami:

```
Syncing Lambda Function StreamingFunction...                                             
	Building codeuri:                                                                        
	/Users/.../lambda-streaming-nodejs-app/src runtime: nodejs18.x metadata: {} architecture:    
	x86_64 functions: StreamingFunction                                                      
	package.json file not found. Continuing the build without dependencies.                  
	Running NodejsNpmBuilder:CopySource                                                      
	Finished syncing Lambda Function StreamingFunction.                                      
	Syncing Layer StreamingFunctione9cfe924DepLayer...                                       
	SyncFlow [Layer StreamingFunctione9cfe924DepLayer]: Skipping resource update as the      
	content didn't change                                                                    
	Finished syncing Layer StreamingFunctione9cfe924DepLayer.
```

Kita sekarang dapat menggunakan `sam remote invoke` lagi untuk berinteraksi dengan fungsi kita di cloud dan menguji perubahan kita.

### Contoh SQS
<a name="using-sam-cli-remote-invoke-examples-sqs"></a>

#### Contoh dasar
<a name="using-sam-cli-remote-invoke-examples-sqs-basic"></a>

**Memanggil antrian Amazon SQS dengan memberikan ARN sebagai ID sumber daya:**

```
$ sam remote invoke arn:aws:sqs:us-west-2:01234567890:sqs-example-4DonhBsjsW1b --event '{"hello": "world"}' --output json

Sending message to SQS queue MySqsQueue                                                                         
{
  "MD5OfMessageBody": "49dfdd54b01cbcd2d2ab5e9e5ee6b9b9",
  "MessageId": "4f464cdd-15ef-4b57-bd72-3ad225d80adc",
  "ResponseMetadata": {
    "RequestId": "95d39377-8323-5ef0-9223-ceb198bd09bd",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "95d39377-8323-5ef0-9223-ceb198bd09bd",
      "date": "Wed, 08 Nov 2023 23:27:26 GMT",
      "content-type": "application/x-amz-json-1.0",
      "content-length": "106",
      "connection": "keep-alive"
    },
    "RetryAttempts": 0
  }
}%
```

### Contoh Step Functions
<a name="using-sam-cli-remote-invoke-examples-sf"></a>

#### Contoh dasar
<a name="using-sam-cli-remote-invoke-examples-sf-basic"></a>

**Memanggil mesin status dengan memberikan ID fisiknya sebagai ID sumber daya:**

Pertama, kami gunakan `sam list resources` untuk mendapatkan ID fisik kami:

```
$ sam list resources --stack-name state-machine-example --output json

[
  {
    "LogicalResourceId": "HelloWorldStateMachine",
    "PhysicalResourceId": "arn:aws:states:us-west-2:513423067560:stateMachine:HelloWorldStateMachine-z69tFEUx0F66"
  },
  {
    "LogicalResourceId": "HelloWorldStateMachineRole",
    "PhysicalResourceId": "simple-state-machine-HelloWorldStateMachineRole-PduA0BDGuFXw"
  }
]
```

Selanjutnya, kami memanggil mesin negara kami menggunakan ID fisik sebagai ID sumber daya. Kami lulus dalam suatu acara di baris perintah dengan `--event` opsi:

```
$ sam remote invoke arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66 --event '{"is_developer": true}'

Invoking Step Function arn:aws:states:us-west-2:01234567890:stateMachine:HelloWorldStateMachine-z69tFEUx0F66   
"Hello Developer World"%
```

**Memanggil mesin status dengan melewatkan acara kosong:**

```
$ sam remote invoke HelloWorldStateMachine --stack-name state-machine-example

Invoking Step Function HelloWorldStateMachine                                                                   
"Hello World"%
```

## Tautan terkait
<a name="using-sam-cli-remote-invoke-links"></a>

Untuk dokumentasi yang terkait dengan `sam remote invoke` dan menggunakan AWS SAMCLI, lihat berikut ini:
+ [sam remote invoke](sam-cli-command-reference-remote-invoke.md)
+ [AWS SAMCLIpemecahan masalah](sam-cli-troubleshooting.md)

# Otomatiskan pengujian integrasi lokal dengan AWS SAM
<a name="serverless-sam-cli-using-automated-tests"></a>

Meskipun dapat digunakan [Pengantar pengujian dengan sam local invoke](using-sam-cli-local-invoke.md) untuk menguji kode secara manual, Anda AWS SAM juga dapat menguji kode menggunakan pengujian integrasi otomatis. Pengujian integrasi membantu Anda mendeteksi masalah di awal siklus pengembangan, meningkatkan kualitas kode Anda, dan menghemat waktu sekaligus mengurangi biaya.

Untuk membuat pengujian integrasi otomatis AWS SAM, pertama-tama Anda menjalankan pengujian terhadap fungsi Lambda lokal sebelum menerapkan ke Cloud. AWS [Pengantar pengujian dengan sam local start-lambda](using-sam-cli-local-start-lambda.md)Perintah memulai titik akhir lokal yang mengemulasi titik akhir pemanggilan Lambda. Anda dapat memanggilnya dari uji otomatis Anda. Karena titik akhir ini mengemulasi titik akhir pemanggilan Lambda, Anda dapat menulis pengujian sekali, lalu menjalankannya (tanpa modifikasi apa pun) terhadap fungsi Lambda lokal, atau terhadap fungsi Lambda yang diterapkan. Anda juga dapat menjalankan pengujian yang sama terhadap AWS SAM tumpukan yang diterapkan di CI/CD pipeline Anda. 

Beginilah cara kerjanya:

1. Mulai titik akhir Lambda lokal.

   Mulai endpoint Lambda lokal dengan menjalankan perintah berikut di direktori yang berisi template Anda: AWS SAM 

   ```
   sam local start-lambda
   ```

   Perintah ini memulai titik akhir lokal di `http://127.0.0.1:3001` yang mengemulasi AWS Lambda. Anda dapat menjalankan tes otomatis Anda pada titik akhir Lambda lokal ini. Saat Anda memanggil titik akhir ini menggunakan AWS CLI atau SDK, itu secara lokal mengeksekusi fungsi Lambda yang ditentukan dalam permintaan, dan menampilkan respons.

1. Jalankan uji integrasi terhadap titik akhir Lambda lokal.

   Dalam pengujian integrasi, Anda dapat menggunakan AWS SDK untuk menjalankan fungsi Lambda dengan data pengujian, menunggu respons, dan memverifikasi bahwa respons sesuai dengan yang Anda harapkan. Untuk menjalankan uji integrasi secara lokal, Anda harus mengonfigurasi SDK AWS untuk mengirim Lambda lalu memanggil panggilan API guna meminta titik akhir Lambda lokal yang telah Anda mulai pada langkah sebelumnya.

   Berikut ini adalah contoh Python ( AWS SDKs untuk bahasa lain memiliki konfigurasi serupa):

   ```
   import boto3
   import botocore
   
   # Set "running_locally" flag if you are running the integration test locally
   running_locally = True
   
   if running_locally:
   
       # Create Lambda SDK client to connect to appropriate Lambda endpoint
       lambda_client = boto3.client('lambda',
           region_name="us-west-2",
           endpoint_url="http://127.0.0.1:3001",
           use_ssl=False,
           verify=False,
           config=botocore.client.Config(
               signature_version=botocore.UNSIGNED,
               read_timeout=15,
               retries={'max_attempts': 0},
           )
       )
   else:
       lambda_client = boto3.client('lambda')
   
   
   # Invoke your Lambda function as you normally usually do. The function will run
   # locally if it is configured to do so
   response = lambda_client.invoke(FunctionName="HelloWorldFunction")
   
   # Verify the response
   assert response == "Hello World"
   ```

   Anda dapat menggunakan kode ini untuk menguji fungsi Lambda yang di-deploy dengan mengatur `running_locally` ke `False`. Ini mengatur AWS SDK untuk terhubung AWS Lambda di AWS Cloud.

# Hasilkan contoh muatan acara dengan AWS SAM
<a name="serverless-sam-cli-using-generate-event"></a>

Untuk menguji fungsi Lambda Anda, Anda dapat membuat dan menyesuaikan contoh payload peristiwa yang meniru data yang akan diterima fungsi Lambda Anda saat dipicu oleh layanan lain. AWS Ini termasuk layanan seperti API Gateway CloudFormation, Amazon S3, dan banyak lagi.

Menghasilkan muatan peristiwa sampel membantu Anda menguji perilaku fungsi Lambda Anda dengan berbagai input berbeda tanpa perlu bekerja di lingkungan langsung. Pendekatan ini juga menghemat waktu jika dibandingkan dengan membuat sampel acara AWS layanan secara manual untuk menguji fungsi. 

Untuk daftar lengkap layanan tempat Anda dapat membuat muatan peristiwa sampel, gunakan perintah ini:

```
sam local generate-event --help
```

Untuk daftar opsi yang dapat Anda gunakan untuk layanan tertentu, gunakan perintah ini:

```
sam local generate-event [SERVICE] --help
```

Contoh:

```
#Generates the event from S3 when a new object is created
sam local generate-event s3 put

# Generates the event from S3 when an object is deleted
sam local generate-event s3 delete
```

# Menguji dan men-debug fungsi tahan lama
<a name="test-and-debug-durable-functions"></a>

Menguji dan men-debug fungsi tahan lama secara lokal bekerja mirip dengan fungsi Lambda biasa, dengan dukungan otomatis untuk checkpointing dan replay. Panduan ini mencakup skenario pengujian umum dan teknik pemecahan masalah.

## Alur kerja pengujian lokal
<a name="test-and-debug-durable-functions-workflow"></a>

Saat menguji fungsi tahan lama secara lokal, alur kerja berbeda dari fungsi Lambda biasa:

**Alur kerja pengujian fungsi yang tahan lama**

1. Bangun aplikasi Anda:

   ```
   $ sam build
   ```

1. Panggil fungsi tahan lama Anda:

   ```
   $ sam local invoke MyDurableFunction --durable-execution-name test 
   ```

1. Periksa riwayat eksekusi jika diperlukan:

   ```
   $ sam local execution history execution-id
   ```

## Skenario pengujian umum
<a name="test-and-debug-durable-functions-scenarios"></a>

### Menguji perilaku checkpointing
<a name="test-and-debug-durable-functions-scenarios-checkpoints"></a>

Untuk menguji apakah fungsi Anda dengan benar status pos pemeriksaan:

```
# Example Python durable function
def handler(event, context):
    # This will create a checkpoint
    context.wait(10)  # Wait 10 seconds
    
    # Function resumes here after wait
    return {"message": "Function resumed after wait"}
```

Saat Anda menjalankan fungsi ini secara lokal, periode tunggu ditangani secara otomatis.

### Menguji skenario panggilan balik
<a name="test-and-debug-durable-functions-scenarios-callbacks"></a>

Untuk fungsi yang menunggu callback eksternal:

1. Mulai fungsi tahan lama Anda yang menunggu panggilan balik

1. Di terminal lain, selesaikan panggilan balik:

   ```
   $ sam local callback succeed callback-id
   ```

1. Amati fungsi melanjutkan eksekusi

## Pemecahan masalah
<a name="test-and-debug-durable-functions-troubleshooting"></a>

### Fungsi tahan lama tidak dijalankan dengan benar
<a name="test-and-debug-durable-functions-troubleshooting-config"></a>

**Masalah:** Fungsi tidak berperilaku sebagai fungsi yang tahan lama.

**Solusi:**
+ Verifikasi yang `DurableConfig` diatur dalam template SAM Anda
+ Pastikan kode fungsi Anda menggunakan metode SDK fungsi yang tahan lama (mis.,`context.wait()`)
+ Periksa apakah Anda menggunakan runtime yang didukung (TypeScript, JavaScript, Python)

### Tidak dapat mengambil riwayat eksekusi
<a name="test-and-debug-durable-functions-troubleshooting-history"></a>

**Masalah:** `local execution history` Perintah tidak mengembalikan hasil.

**Solusi:**
+ Verifikasi bahwa ID eksekusi sudah benar
+ Periksa apakah fungsi telah dipanggil setidaknya sekali

### Perintah callback tidak berfungsi
<a name="test-and-debug-durable-functions-troubleshooting-callbacks"></a>

**Masalah:** Perintah callback tidak menyelesaikan operasi yang tertunda.

**Solusi:**
+ Verifikasi ID callback sudah benar
+ Pastikan fungsi tersebut benar-benar menunggu panggilan balik
+ Verifikasi bahwa Anda menggunakan sintaks perintah callback yang benar

## Kiat debugging
<a name="test-and-debug-durable-functions-debugging"></a>
+ **Gunakan riwayat eksekusi** - Tinjau riwayat eksekusi untuk memahami alur fungsi tahan lama Anda
+ **Uji secara bertahap** - Mulailah dengan operasi tunggu sederhana sebelum menambahkan logika kompleks
+ **Gunakan pencatatan verbose** - Aktifkan pencatatan terperinci untuk melacak alur eksekusi

## Pelajari selengkapnya
<a name="test-and-debug-durable-functions-learn"></a>

Untuk informasi selengkapnya tentang pengujian dan debugging, lihat:
+ [Pengantar pengujian dengan sam local invoke](using-sam-cli-local-invoke.md)- Dokumentasi panggilan lokal
+ [sam local execution history](sam-cli-command-reference-sam-local-execution-history.md)- Riwayat eksekusi