

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

# 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).