

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

# Membangun default dengan AWS SAM
<a name="serverless-sam-cli-using-build"></a>

Untuk membangun aplikasi nirserver Anda, gunakan perintah `sam build`. Perintah ini juga mengumpulkan artefak bangunan dependensi aplikasi Anda dan menempatkannya dalam format dan lokasi yang tepat untuk langkah berikutnya, seperti pengujian lokal, pengemasan, dan deployment.

Anda menentukan dependensi aplikasi dalam file manifes, seperti `requirements.txt` (Python) atau `package.json` (Node.js), atau dengan menggunakan properti `Layers` dari sumber daya fungsi. Properti `Layers` berisi daftar sumber daya [lapisan AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) yang fungsi Lambda-nya bergantung pada lapisan tersebut.

Format artefak bangunan aplikasi Anda bergantung pada setiap fungsi properti `PackageType`. Opsi untuk properti ini adalah:
+ **`Zip`** - Arsip file .zip yang berisi kode aplikasi Anda dan dependensinya. Jika Anda mengemas kode Anda sebagai arsip file .zip, Anda harus menentukan waktu aktif Lambda untuk fungsi Anda.
+ **`Image`** – Citra kontainer termasuk sistem operasi dasar, waktu aktif, dan ekstensi, selain kode aplikasi Anda dan dependensinya.

Untuk informasi selengkapnya tentang tipe paket Lambda, lihat [Paket deployment Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) di *Panduan Developer AWS Lambda *.

**Topics**
+ [Membangun arsip file .zip](#build-zip-archive)
+ [Membangun citra kontainer](#build-container-image)
+ [File variabel lingkungan kontainer](#serverless-sam-cli-using-container-environment-file)
+ [Mempercepat waktu pembuatan dengan membangun proyek Anda di folder sumber](#serverless-sam-cli-using-build-in-source)
+ [Contoh](#building-applications-examples)
+ [Membangun fungsi di luar AWS SAM](#building-applications-skip)

## Membangun arsip file .zip
<a name="build-zip-archive"></a>

Untuk membangun aplikasi nirserver Anda sebagai arsip file .zip, nyatakan `PackageType: Zip` untuk fungsi nirserver Anda.

AWS SAM membangun aplikasi Anda untuk [arsitektur](sam-resource-function.md#sam-function-architectures) yang Anda tentukan. Jika Anda tidak menentukan arsitektur, AWS SAM gunakan secara `x86_64` default.

Jika fungsi Lambda Anda bergantung pada paket yang telah dikompilasi secara native, gunakan bendera `--use-container`. Bendera ini secara lokal mengompilasi fungsi Anda dalam wadah yang berperilaku seperti lingkungan Lambda, sehingga mereka berada dalam format yang tepat saat Anda menerapkannya ke Cloud. AWS 

Saat Anda menggunakan `--use-container` opsi, secara default AWS SAM menarik gambar kontainer dari [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/public/what-is-ecr.html) Public. Jika Anda ingin menarik gambar kontainer dari repositori lain atau untuk versi AWS SAM CLI tertentu, Anda dapat menggunakan `--build-image` opsi dan memberikan URI gambar kontainer alternatif. Berikut adalah dua contoh perintah untuk membangun aplikasi menggunakan gambar kontainer dari versi AWS SAM CLI tertentu:

```
# Build a Node.js 20 application using a container image for a specific version of AWS SAM CLI (1.136.0)
sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0

# Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)(
sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0
```

Untuk contoh tambahan membangun aplikasi arsip file .zip, nanti Anda dapat melihatnya di bagian Contoh dalam topik ini.

## Membangun citra kontainer
<a name="build-container-image"></a>

Untuk membangun aplikasi nirserver Anda sebagai citra kontainer, nyatakan `PackageType: Image` untuk fungsi nirserver Anda. Anda juga harus menyatakan atribut sumber daya `Metadata` dengan entri berikut:

`Dockerfile`  
Nama Dockerfile yang berkaitan dengan fungsi Lambda.

`DockerContext`  
Lokasi Dockerfile.

`DockerTag`  
(Opsional) tanda untuk diterapkan pada citra yang dibangun.

`DockerBuildArgs`  
Bangun argumen untuk bangunan tersebut.  
 AWS SAMCLIItu tidak menyunting atau mengaburkan informasi apa pun yang Anda sertakan dalam argumen. `DockerBuildArgs` Kami sangat menyarankan Anda tidak menggunakan bagian ini untuk menyimpan informasi sensitif, seperti sandi atau rahasia.

Berikut ini adalah contoh bagian atribut sumber daya `Metadata`:

```
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: v1
```

Untuk mengunduh contoh aplikasi yang dikonfigurasi dengan jenis `Image` paket, lihat[Tutorial: Menyebarkan aplikasi Hello World dengan AWS SAM](serverless-getting-started-hello-world.md). Saat prompt mempertanyakan tipe paket yang ingin Anda instal, pilih `Image`.

**catatan**  
Jika Anda menentukan image dasar multi-arsitektur di Dockerfile Anda, AWS SAM buat image container Anda untuk arsitektur mesin host Anda. Untuk membangun arsitektur yang berbeda, tentukan gambar dasar yang menggunakan arsitektur target tertentu.

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

Untuk menyediakan file JSON yang berisi variabel lingkungan untuk kontainer bangunan, gunakan argumen `--container-env-var-file` dengan perintah `sam build`. Anda dapat memberikan variabel lingkungan tunggal yang berlaku untuk semua sumber daya nirserver, atau variabel lingkungan yang berbeda untuk setiap sumber daya.

### Format
<a name="serverless-sam-cli-using-container-environment-file-format"></a>

Format untuk meneruskan variabel lingkungan ke kontainer bangunan tergantung pada berapa banyak variabel lingkungan yang Anda berikan untuk sumber daya Anda.

Untuk menyediakan variabel lingkungan tunggal pada semua sumber daya, tentukan objek `Parameters` seperti berikut:

```
{
  "Parameters": {
    "GITHUB_TOKEN": "TOKEN_GLOBAL"
  }
}
```

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

```
{
  "MyFunction1": {
    "GITHUB_TOKEN": "TOKEN1"
  },
  "MyFunction2": {
    "GITHUB_TOKEN": "TOKEN2"
  }
}
```

Simpan variabel lingkungan Anda sebagai file, misalnya, dengan nama `env.json`. Perintah berikut ini menggunakan file ini untuk meneruskan variabel lingkungan Anda ke kontainer bangunan:

```
sam build --use-container --container-env-var-file env.json
```

### Precedence
<a name="serverless-sam-cli-using-container-environment-file-precedence"></a>
+ Variabel lingkungan yang Anda berikan untuk sumber daya tertentu lebih diutamakan daripada variabel lingkungan tunggal untuk semua sumber daya.
+ Variabel lingkungan yang Anda berikan pada baris perintah lebih diutamakan daripada variabel lingkungan dalam sebuah file.

## Mempercepat waktu pembuatan dengan membangun proyek Anda di folder sumber
<a name="serverless-sam-cli-using-build-in-source"></a>

Untuk runtime dan metode build yang didukung, Anda dapat menggunakan `--build-in-source` opsi untuk membangun proyek secara langsung di folder sumber. Secara default, AWS SAM CLI build dalam direktori sementara, yang melibatkan penyalinan kode sumber dan file proyek. Dengan`--build-in-source`, AWS SAM CLI build langsung di folder sumber Anda, yang mempercepat proses pembuatan dengan menghapus kebutuhan untuk menyalin file ke direktori sementara.

Untuk daftar runtime dan metode build yang didukung, lihat`--build-in-source`.

## Contoh
<a name="building-applications-examples"></a>

### Contoh 1: Arsip file .zip
<a name="examples-zip-archives"></a>

Perintah `sam build` berikut membangun arsip file .zip:

```
# Build all functions and layers, and their dependencies
sam build

# Run the build process inside a Docker container that functions like a Lambda environment
sam build --use-container

# Build a Node.js 20 application using a container image for a specific version of AWS SAM CLI (1.136.0)
sam build --use-container --build-image public.ecr.aws/sam/build-nodejs22.x:1.136.0

# Build a function resource using the Python 3.13 container image from a specific version of AWS SAM CLI (1.136.0)(
sam build --use-container --build-image Function1=public.ecr.aws/sam/build-python3.13:1.136.0

# Build and run your functions locally
sam build && sam local invoke

# For more options
sam build --help
```

### Contoh 2: Citra kontainer
<a name="examples-container-image-1"></a>

 AWS SAM Template berikut dibangun sebagai gambar kontainer:

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      ImageConfig:
        Command: ["app.lambda_handler"]
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: v1
```

Berikut ini adalah contoh Dockerfile:

```
FROM public.ecr.aws/lambda/python:3.12

COPY app.py requirements.txt ./

RUN python3.12 -m pip install -r requirements.txt

# Overwrite the command by providing a different command directly in the template.
CMD ["app.lambda_handler"]
```

### Contoh 3: npm ci
<a name="examples-npm-ci"></a>

Untuk aplikasi Node.js, Anda dapat menggunakan `npm ci` alih-alih `npm install` menginstal dependensi. Untuk menggunakan`npm ci`, tentukan `UseNpmCi: True` `BuildProperties` di bawah atribut `Metadata` sumber daya fungsi Lambda Anda. Untuk menggunakannya`npm ci`, aplikasi Anda harus memiliki `npm-shrinkwrap.json` file `package-lock.json` atau yang ada di fungsi `CodeUri` untuk Lambda Anda.

Contoh berikut digunakan `npm ci` untuk menginstal dependensi saat Anda menjalankan: `sam build`

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.handler
      Runtime: nodejs20.x
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get
    Metadata:
      BuildProperties:
        UseNpmCi: True
```

### Paket induk Python
<a name="building-applications-python-parent-packages"></a>

Untuk aplikasi Python, Anda dapat mempertahankan struktur paket Anda selama proses build untuk mengaktifkan impor absolut. Untuk mempertahankan struktur paket, tentukan `ParentPackageMode` `BuildProperties` di bawah atribut `Metadata` sumber daya fungsi Lambda Anda.

Contoh berikut mempertahankan struktur `app` paket saat Anda menjalankan`sam build`:

```
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello-world/
      Handler: app.main.handler
      Runtime: python3.12
      Architectures:
        - x86_64
    Metadata:
      BuildProperties:
        ParentPackageMode: explicit
        ParentPackages: app
```

Dengan konfigurasi ini, kode Anda dapat menggunakan impor absolut seperti `from app.utils import logger` alih-alih impor relatif seperti. `from .utils import logger`

## Membangun fungsi di luar AWS SAM
<a name="building-applications-skip"></a>

Secara default, saat Anda menjalankan**sam build**, AWS SAM membangun semua sumber daya fungsi Anda. Pilihan lain termasuk:
+ **Membangun semua sumber daya fungsi di luar AWS SAM** — Jika Anda membangun semua sumber daya fungsi Anda secara manual atau melalui alat lain, tidak **sam build** diperlukan. Anda dapat melewati **sam build** dan melanjutkan ke langkah berikutnya dalam proses Anda, seperti melakukan pengujian lokal atau menerapkan aplikasi Anda.
+ **Bangun beberapa sumber daya fungsi di luar AWS SAM** — Jika Anda AWS SAM ingin membangun beberapa sumber daya fungsi Anda sambil memiliki sumber daya fungsi lain yang dibangun di luar AWS SAM, Anda dapat menentukan ini di AWS SAM template Anda.

### Membangun beberapa sumber daya fungsi di luar AWS SAM
<a name="building-applications-skip-some"></a>

Untuk AWS SAM melewatkan fungsi saat menggunakan**sam build**, konfigurasikan yang berikut ini di AWS SAM template Anda:

1. Tambahkan properti `SkipBuild: True` metadata ke fungsi Anda.

1. Tentukan jalur ke sumber daya fungsi bawaan Anda.

Berikut adalah contoh, dengan `TestFunction` dikonfigurasi untuk dilewati. Sumber daya yang dibangun terletak di`built-resources/TestFunction.zip`.

```
TestFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: built-resources/TestFunction.zip
    Handler: TimeHandler::handleRequest
    Runtime: java11
  Metadata:
    SkipBuild: True
```

Sekarang, ketika Anda menjalankan**sam build**, AWS SAM akan melakukan hal berikut:

1. AWS SAM akan melewati fungsi yang dikonfigurasi dengan`SkipBuild: True`.

1. AWS SAM akan membangun semua sumber daya fungsi lainnya dan menyimpannya di direktori `.aws-sam` build.

1. Untuk fungsi yang dilewati, templatnya di direktori `.aws-sam` build akan diperbarui secara otomatis untuk mereferensikan jalur yang ditentukan ke sumber daya fungsi bawaan Anda.

   Berikut adalah contoh template cache untuk `TestFunction` di direktori `.aws-sam` build:

   ```
   TestFunction:
     Type: AWS::Serverless::Function
     Properties:
       CodeUri: ../../built-resources/TestFunction.zip
       Handler: TimeHandler::handleRequest
       Runtime: java11
     Metadata:
       SkipBuild: True
   ```