

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

# Tutorial: Menggunakan pemicu Amazon S3 untuk membuat gambar thumbnail
<a name="with-s3-tutorial"></a>

Dalam tutorial ini, Anda membuat dan mengonfigurasi fungsi Lambda yang mengubah ukuran gambar yang ditambahkan ke bucket Amazon Simple Storage Service (Amazon S3). Saat Anda menambahkan file gambar ke bucket, Amazon S3 akan memanggil fungsi Lambda Anda. Fungsi tersebut kemudian membuat versi thumbnail gambar dan mengeluarkannya ke bucket Amazon S3 yang berbeda.

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_resources.png)


Untuk menyelesaikan tutorial ini, Anda melakukan langkah-langkah berikut:

1. Buat bucket Amazon S3 sumber dan tujuan dan unggah gambar sampel.

1. Buat fungsi Lambda yang mengubah ukuran gambar dan mengeluarkan thumbnail ke bucket Amazon S3.

1. Konfigurasikan pemicu Lambda yang memanggil fungsi Anda saat objek diunggah ke bucket sumber Anda.

1. Uji fungsi Anda, pertama dengan acara dummy, lalu dengan mengunggah gambar ke bucket sumber Anda.

Dengan menyelesaikan langkah-langkah ini, Anda akan mempelajari cara menggunakan Lambda untuk menjalankan tugas pemrosesan file pada objek yang ditambahkan ke bucket Amazon S3. Anda dapat menyelesaikan tutorial ini menggunakan AWS Command Line Interface (AWS CLI) atau Konsol Manajemen AWS.

Jika Anda mencari contoh sederhana untuk mempelajari cara mengonfigurasi pemicu Amazon S3 untuk Lambda, Anda dapat mencoba [Tutorial: Menggunakan pemicu Amazon S3 untuk](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) menjalankan fungsi Lambda.

**Topics**
+ [Prasyarat](#with-s3-example-prereqs)
+ [Buat dua ember Amazon S3](#with-s3-tutorial-prepare-create-buckets)
+ [Unggah gambar uji ke bucket sumber Anda](#with-s3-tutorial-test-image)
+ [Membuat kebijakan izin](#with-s3-tutorial-create-policy)
+ [Membuat peran eksekusi](#with-s3-tutorial-create-execution-role)
+ [Buat paket penerapan fungsi](#with-s3-tutorial-create-function-package)
+ [Buat fungsi Lambda](#with-s3-tutorial-create-function-createfunction)
+ [Konfigurasikan Amazon S3 untuk menjalankan fungsi](#with-s3-tutorial-configure-s3-trigger)
+ [Uji fungsi Lambda Anda dengan acara dummy](#with-s3-tutorial-dummy-test)
+ [Uji fungsi Anda menggunakan pemicu Amazon S3](#with-s3-tutorial-test-s3)
+ [Bersihkan sumber daya Anda](#s3-tutorial-cleanup)

## Prasyarat
<a name="with-s3-example-prereqs"></a>

Jika Anda ingin menggunakan AWS CLI untuk menyelesaikan tutorial, instal [versi terbaru dari AWS Command Line Interface]().

Untuk kode fungsi Lambda Anda, Anda dapat menggunakan Python atau Node.js. Instal alat dukungan bahasa dan manajer paket untuk bahasa yang ingin Anda gunakan. 

### Instal AWS Command Line Interface
<a name="install_aws_cli"></a>

Jika Anda belum menginstal AWS Command Line Interface, ikuti langkah-langkah di [Menginstal atau memperbarui versi terbaru AWS CLI untuk menginstalnya](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Tutorial ini membutuhkan terminal baris perintah atau shell untuk menjalankan perintah. Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.

**catatan**  
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (`zip`seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, [instal Windows Subsystem untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) Linux. 

## Buat dua ember Amazon S3
<a name="with-s3-tutorial-prepare-create-buckets"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps1.png)


Pertama buat dua ember Amazon S3. Bucket pertama adalah bucket sumber tempat Anda akan mengunggah gambar Anda. Bucket kedua digunakan oleh Lambda untuk menyimpan thumbnail yang diubah ukurannya saat Anda menjalankan fungsi.

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat bucket Amazon S3 (konsol)**

1. Buka [konsol Amazon S3](https://console.aws.amazon.com/s3) dan pilih halaman **Bucket tujuan umum**.

1. Pilih yang Wilayah AWS paling dekat dengan lokasi geografis Anda. Anda dapat mengubah wilayah Anda menggunakan daftar drop-down di bagian atas layar. Kemudian dalam tutorial, Anda harus membuat fungsi Lambda Anda di Wilayah yang sama.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/console_region_select.png)

1. Pilih **Buat bucket**.

1. Pada **Konfigurasi umum**, lakukan hal berikut:

   1. Untuk **jenis Bucket**, pastikan **Tujuan umum** dipilih.

   1. Untuk **nama Bucket**, masukkan nama unik global yang memenuhi aturan [penamaan Amazon S3 Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html). Nama bucket hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-).

1. Biarkan semua opsi lain disetel ke nilai defaultnya dan pilih **Buat bucket**.

1. Ulangi langkah 1 hingga 5 untuk membuat bucket tujuan Anda. Untuk **nama Bucket**`amzn-s3-demo-source-bucket-resized`, masukkan, di `amzn-s3-demo-source-bucket` mana nama bucket sumber yang baru saja Anda buat.

------
#### [ AWS CLI ]

**Untuk membuat bucket Amazon S3 ()AWS CLI**

1. Jalankan perintah CLI berikut untuk membuat bucket sumber Anda. Nama yang Anda pilih untuk bucket Anda harus unik secara global dan ikuti aturan [penamaan Amazon S3 Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html). Nama hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-). Untuk `region` dan`LocationConstraint`, pilih yang paling [Wilayah AWS](https://docs.aws.amazon.com/general/latest/gr/lambda-service.html)dekat dengan lokasi geografis Anda.

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-source-bucket --region us-east-1 \
   --create-bucket-configuration LocationConstraint=us-east-1
   ```

   Kemudian dalam tutorial, Anda harus membuat fungsi Lambda Anda Wilayah AWS sama dengan bucket sumber Anda, jadi catat wilayah yang Anda pilih.

1. Jalankan perintah berikut untuk membuat bucket tujuan Anda. Untuk nama bucket, Anda harus menggunakan`amzn-s3-demo-source-bucket-resized`, di `amzn-s3-demo-source-bucket` mana nama bucket sumber yang Anda buat di langkah 1. Untuk `region` dan`LocationConstraint`, pilih yang sama dengan yang Wilayah AWS Anda gunakan untuk membuat bucket sumber Anda.

   ```
   aws s3api create-bucket --bucket amzn-s3-demo-source-bucket-resized --region us-east-1 \
   --create-bucket-configuration LocationConstraint=us-east-1
   ```

------

## Unggah gambar uji ke bucket sumber Anda
<a name="with-s3-tutorial-test-image"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps2.png)


Kemudian dalam tutorial, Anda akan menguji fungsi Lambda Anda dengan memanggilnya menggunakan atau konsol Lambda. AWS CLI Untuk mengonfirmasi bahwa fungsi Anda beroperasi dengan benar, bucket sumber Anda harus berisi gambar uji. Gambar ini dapat berupa file JPG atau PNG yang Anda pilih.

------
#### [ Konsol Manajemen AWS ]

**Untuk mengunggah gambar uji ke bucket sumber Anda (konsol)**

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

1. Pilih bucket sumber yang Anda buat di langkah sebelumnya.

1. Pilih **Unggah**.

1. Pilih **Tambahkan file** dan gunakan pemilih file untuk memilih objek yang ingin Anda unggah.

1. Pilih **Buka**, lalu pilih **Unggah**.

------
#### [ AWS CLI ]

**Untuk mengunggah gambar uji ke bucket sumber Anda (AWS CLI)**
+ Dari direktori yang berisi gambar yang ingin Anda unggah, jalankan perintah CLI berikut. Ganti `--bucket` parameter dengan nama bucket sumber Anda. Untuk `--body` parameter `--key` dan, gunakan nama file gambar pengujian Anda.

  ```
  aws s3api put-object --bucket amzn-s3-demo-source-bucket --key HappyFace.jpg --body ./HappyFace.jpg
  ```

------

## Membuat kebijakan izin
<a name="with-s3-tutorial-create-policy"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps3.png)


Langkah pertama dalam membuat fungsi Lambda Anda adalah membuat kebijakan izin. Kebijakan ini memberi fungsi Anda izin yang diperlukan untuk mengakses AWS sumber daya lain. Untuk tutorial ini, kebijakan memberikan izin baca dan tulis Lambda untuk bucket Amazon S3 dan memungkinkannya untuk menulis ke Amazon Log. CloudWatch 

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat kebijakan (konsol)**

1. Buka halaman [Kebijakan](https://console.aws.amazon.com/iamv2/home#policies) konsol AWS Identity and Access Management (IAM).

1. Pilih **Buat kebijakan**.

1. Pilih tab **JSON**, lalu tempelkan kebijakan khusus berikut ke editor JSON.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream"
               ],
               "Resource": "arn:aws:logs:*:*:*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::*/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::*/*"
           }
       ]
   }
   ```

1. Pilih **Berikutnya**.

1. Di bawah **Detail kebijakan**, untuk **nama Kebijakan**, masukkan`LambdaS3Policy`.

1. Pilih **Buat kebijakan**.

------
#### [ AWS CLI ]

**Untuk membuat kebijakan (AWS CLI)**

1. Simpan JSON berikut dalam file bernama`policy.json`.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream"
               ],
               "Resource": "arn:aws:logs:*:*:*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": "arn:aws:s3:::*/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::*/*"
           }
       ]
   }
   ```

1. Dari direktori tempat Anda menyimpan dokumen kebijakan JSON, jalankan perintah CLI berikut.

   ```
   aws iam create-policy --policy-name LambdaS3Policy --policy-document file://policy.json
   ```

------

## Membuat peran eksekusi
<a name="with-s3-tutorial-create-execution-role"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps4.png)


Peran eksekusi adalah peran IAM yang memberikan izin fungsi Lambda untuk mengakses dan sumber daya. Layanan AWS Untuk memberikan akses baca dan tulis fungsi ke bucket Amazon S3, Anda melampirkan kebijakan izin yang Anda buat di langkah sebelumnya.

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda (konsol)**

1. Buka halaman [Peran](https://console.aws.amazon.com/iamv2/home#roles) konsol (IAM).

1. Pilih **Buat peran**.

1. Untuk **jenis entitas Tepercaya**, pilih **Layanan AWS**, dan untuk **kasus Penggunaan**, pilih **Lambda**.

1. Pilih **Berikutnya**.

1. Tambahkan kebijakan izin yang Anda buat di langkah sebelumnya dengan melakukan hal berikut:

   1. Dalam kotak pencarian kebijakan, masukkan `LambdaS3Policy`.

   1. Dalam hasil pencarian, pilih kotak centang untuk`LambdaS3Policy`.

   1. Pilih **Berikutnya**.

1. Di bawah **Rincian peran**, untuk **nama Peran** masuk`LambdaS3Role`.

1. Pilih **Buat peran**.

------
#### [ AWS CLI ]

**Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda ()AWS CLI**

1. Simpan JSON berikut dalam file bernama`trust-policy.json`. Kebijakan kepercayaan ini memungkinkan Lambda untuk menggunakan izin peran dengan memberikan `lambda.amazonaws.com` izin utama layanan untuk memanggil tindakan AWS Security Token Service ()AWS STS. `AssumeRole`  
****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. Dari direktori tempat Anda menyimpan dokumen kebijakan kepercayaan JSON, jalankan perintah CLI berikut untuk membuat peran eksekusi.

   ```
   aws iam create-role --role-name LambdaS3Role --assume-role-policy-document file://trust-policy.json
   ```

1. Untuk melampirkan kebijakan izin yang Anda buat pada langkah sebelumnya, jalankan perintah CLI berikut. Ganti Akun AWS nomor di ARN polis dengan nomor akun Anda sendiri.

   ```
   aws iam attach-role-policy --role-name LambdaS3Role --policy-arn arn:aws:iam::123456789012:policy/LambdaS3Policy
   ```

------

## Buat paket penerapan fungsi
<a name="with-s3-tutorial-create-function-package"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps5.png)


Untuk membuat fungsi Anda, Anda membuat *paket deployment* yang berisi kode fungsi dan dependensinya. Untuk `CreateThumbnail` fungsi ini, kode fungsi Anda menggunakan pustaka terpisah untuk mengubah ukuran gambar. Ikuti instruksi untuk bahasa yang Anda pilih untuk membuat paket penyebaran yang berisi pustaka yang diperlukan.

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

**Untuk membuat paket penyebaran (Node.js)**

1. Buat direktori bernama `lambda-s3` untuk kode fungsi dan dependensi Anda dan navigasikan ke dalamnya.

   ```
   mkdir lambda-s3
   cd lambda-s3
   ```

1. Buat proyek Node.js baru dengan`npm`. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan`Enter`.

   ```
   npm init
   ```

1. Simpan kode fungsi berikut dalam file bernama`index.mjs`. Pastikan untuk mengganti `us-east-1` dengan Wilayah AWS di mana Anda membuat ember sumber dan tujuan Anda sendiri.

   ```
   // dependencies
   import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
   
   import { Readable } from 'stream';
   
   import sharp from 'sharp';
   import util from 'util';
   
   
   // create S3 client
   const s3 = new S3Client({region: 'us-east-1'});
   
   // define the handler function
   export const handler = async (event, context) => {
   
   // Read options from the event parameter and get the source bucket
   console.log("Reading options from event:\n", util.inspect(event, {depth: 5}));
     const srcBucket = event.Records[0].s3.bucket.name;
     
   // Object key may have spaces or unicode non-ASCII characters
   const srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
   const dstBucket = srcBucket + "-resized";
   const dstKey    = "resized-" + srcKey;
   
   // Infer the image type from the file suffix
   const typeMatch = srcKey.match(/\.([^.]*)$/);
   if (!typeMatch) {
     console.log("Could not determine the image type.");
     return;
   }
   
   // Check that the image type is supported
   const imageType = typeMatch[1].toLowerCase();
   if (imageType != "jpg" && imageType != "png") {
     console.log(`Unsupported image type: ${imageType}`);
     return;
   }
   
   // Get the image from the source bucket. GetObjectCommand returns a stream.
   try {
     const params = {
       Bucket: srcBucket,
       Key: srcKey
     };
     var response = await s3.send(new GetObjectCommand(params));
     var stream = response.Body;
     
   // Convert stream to buffer to pass to sharp resize function.
     if (stream instanceof Readable) {
       var content_buffer = Buffer.concat(await stream.toArray());
       
     } else {
       throw new Error('Unknown object stream type');
     }
   
   
   } catch (error) {
     console.log(error);
     return;
   }
   
     
   // set thumbnail width. Resize will set the height automatically to maintain aspect ratio.
   const width  = 200;
   
   // Use the sharp module to resize the image and save in a buffer.
   try {    
     var output_buffer = await sharp(content_buffer).resize(width).toBuffer();
   
   } catch (error) {
     console.log(error);
     return;
   }
   
   // Upload the thumbnail image to the destination bucket
   try {
     const destparams = {
       Bucket: dstBucket,
       Key: dstKey,
       Body: output_buffer,
       ContentType: "image"
     };
   
     const putResult = await s3.send(new PutObjectCommand(destparams));
   
     } catch (error) {
       console.log(error);
       return;
     }
   
     console.log('Successfully resized ' + srcBucket + '/' + srcKey +
       ' and uploaded to ' + dstBucket + '/' + dstKey);
     };
   ```

1. Di `lambda-s3` direktori Anda, instal perpustakaan tajam menggunakan npm. Perhatikan bahwa versi terbaru dari sharp (0.33) tidak kompatibel dengan Lambda. Instal versi 0.32.6 untuk menyelesaikan tutorial ini.

   ```
   npm install sharp@0.32.6
   ```

   `install`Perintah npm membuat `node_modules` direktori untuk modul Anda. Setelah langkah ini, struktur direktori Anda akan terlihat seperti berikut.

   ```
   lambda-s3
   |- index.mjs
   |- node_modules
   |  |- base64js
   |  |- bl
   |  |- buffer
   ...
   |- package-lock.json
   |- package.json
   ```

1. Buat paket deployment .zip yang berisi kode fungsi Anda dan dependensinya. Di macOS dan Linux, jalankan perintah berikut.

   ```
   zip -r function.zip .
   ```

   Di Windows, gunakan utilitas zip pilihan Anda untuk membuat file.zip. Pastikan bahwa `package-lock.json` file `index.mjs``package.json`, dan `node_modules` direktori Anda semuanya berada di root file.zip Anda.

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

**Untuk membuat paket penyebaran (Python)**

1. Simpan kode contoh sebagai file bernama `lambda_function.py`.

   ```
   import boto3
   import os
   import sys
   import uuid
   from urllib.parse import unquote_plus
   from PIL import Image
   import PIL.Image
               
   s3_client = boto3.client('s3')
               
   def resize_image(image_path, resized_path):
     with Image.open(image_path) as image:
       image.thumbnail(tuple(x / 2 for x in image.size))
       image.save(resized_path)
               
   def lambda_handler(event, context):
     for record in event['Records']:
       bucket = record['s3']['bucket']['name']
       key = unquote_plus(record['s3']['object']['key'])
       tmpkey = key.replace('/', '')
       download_path = '/tmp/{}{}'.format(uuid.uuid4(), tmpkey)
       upload_path = '/tmp/resized-{}'.format(tmpkey)
       s3_client.download_file(bucket, key, download_path)
       resize_image(download_path, upload_path)
       s3_client.upload_file(upload_path, '{}-resized'.format(bucket), 'resized-{}'.format(key))
   ```

1. Di direktori yang sama di mana Anda membuat `lambda_function.py` file Anda, buat direktori baru bernama `package` dan instal pustaka [Pillow (PIL)](https://pypi.org/project/Pillow/) dan AWS SDK untuk Python (Boto3). Meskipun runtime Lambda Python menyertakan versi Boto3 SDK, kami menyarankan agar Anda menambahkan semua dependensi fungsi Anda ke paket penerapan Anda, meskipun mereka disertakan dalam runtime. Untuk informasi selengkapnya, lihat [Dependensi runtime](https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies) dengan Python.

   ```
   mkdir package
   pip install \
   --platform manylinux2014_x86_64 \
   --target=package \
   --implementation cp \
   --python-version 3.12 \
   --only-binary=:all: --upgrade \
   pillow boto3
   ```

   Pustaka Pillow berisi kode C/C \$1\$1. Dengan menggunakan `--only-binary=:all:` opsi `--platform manylinux_2014_x86_64` dan, pip akan mengunduh dan menginstal versi Pillow yang berisi binari pra-kompilasi yang kompatibel dengan sistem operasi Amazon Linux 2. Ini memastikan bahwa paket penerapan Anda akan berfungsi di lingkungan eksekusi Lambda, terlepas dari sistem operasi dan arsitektur mesin build lokal Anda.

1. Buat file.zip yang berisi kode aplikasi Anda dan pustaka Pillow dan Boto3. Di Linux atau macOS, jalankan perintah berikut dari antarmuka baris perintah Anda.

   ```
   cd package
   zip -r ../lambda_function.zip .
   cd ..
   zip lambda_function.zip lambda_function.py
   ```

    Di Windows, gunakan alat zip pilihan Anda untuk membuat file `lambda_function.zip`. Pastikan bahwa `lambda_function.py` file Anda dan folder yang berisi dependensi Anda semuanya berada di root file.zip.

Anda juga dapat membuat paket deployment menggunakan lingkungan virtual Python. Lihat [Bekerja dengan arsip file.zip untuk fungsi Python Lambda](python-package.md)

------

## Buat fungsi Lambda
<a name="with-s3-tutorial-create-function-createfunction"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps6.png)


Anda dapat membuat fungsi Lambda menggunakan konsol Lambda AWS CLI atau Lambda. Ikuti instruksi untuk bahasa yang Anda pilih untuk membuat fungsi.

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat fungsi (konsol)**

Untuk membuat fungsi Lambda menggunakan konsol, pertama-tama Anda membuat fungsi dasar yang berisi beberapa kode 'Hello world'. Anda kemudian mengganti kode ini dengan kode fungsi Anda sendiri dengan mengunggah file the.zip atau JAR yang Anda buat pada langkah sebelumnya.

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

1. Pastikan Anda bekerja di tempat yang sama dengan saat Wilayah AWS Anda membuat bucket Amazon S3. Anda dapat mengubah wilayah Anda menggunakan daftar drop-down di bagian atas layar.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/console_region_select.png)

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari scratch**.

1. Di bagian **Informasi dasar**, lakukan hal berikut:

   1. Untuk **Nama fungsi**, masukkan `CreateThumbnail`.

   1. Untuk **Runtime**, pilih **Node.js 22.x** atau **Python 3.12** sesuai dengan bahasa yang Anda pilih untuk fungsi Anda.

   1. Untuk **Arsitektur**, pilih **x86\$164**.

1. Di tab **Ubah peran eksekusi default**, lakukan hal berikut:

   1. Perluas tab, lalu pilih **Gunakan peran yang ada**.

   1. Pilih yang `LambdaS3Role` Anda buat sebelumnya.

1. Pilih **Buat fungsi**.

**Untuk mengunggah kode fungsi (konsol)**

1. Di panel **Sumber kode**, pilih **Unggah dari**.

1. Pilih **file.zip**. 

1. Pilih **Unggah**.

1. **Di pemilih file, pilih file.zip Anda dan pilih Buka.**

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

**Untuk membuat fungsi (AWS CLI)**
+ Jalankan perintah CLI untuk bahasa yang Anda pilih. Untuk `role` parameter, pastikan untuk mengganti `123456789012` dengan Akun AWS ID Anda sendiri. Untuk `region` parameternya, ganti `us-east-1` dengan wilayah tempat Anda membuat bucket Amazon S3.
  + Untuk **Node.js**, jalankan perintah berikut dari direktori yang berisi `function.zip` file Anda.

    ```
    aws lambda create-function --function-name CreateThumbnail \
    --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \
    --timeout 10 --memory-size 1024 \
    --role arn:aws:iam::123456789012:role/LambdaS3Role --region us-east-1
    ```
  + Untuk **Python**, jalankan perintah berikut dari direktori yang berisi file Anda`lambda_function.zip`.

    ```
    aws lambda create-function --function-name CreateThumbnail \
    --zip-file fileb://lambda_function.zip --handler lambda_function.lambda_handler \
    --runtime python3.14 --timeout 10 --memory-size 1024 \
    --role arn:aws:iam::123456789012:role/LambdaS3Role --region us-east-1
    ```

------

## Konfigurasikan Amazon S3 untuk menjalankan fungsi
<a name="with-s3-tutorial-configure-s3-trigger"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps7.png)


Agar fungsi Lambda dapat berjalan saat mengunggah gambar ke bucket sumber, Anda perlu mengonfigurasi pemicu untuk fungsi Anda. Anda dapat mengonfigurasi pemicu Amazon S3 menggunakan konsol atau. AWS CLI

**penting**  
Prosedur ini mengonfigurasi bucket Amazon S3 untuk menjalankan fungsi Anda setiap kali objek dibuat di bucket. Pastikan untuk mengonfigurasi ini hanya di bucket sumber. Jika fungsi Lambda Anda membuat objek dalam bucket yang sama yang memanggilnya, fungsi Anda dapat [dipanggil terus menerus](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/recursive-runaway) dalam satu loop. Hal ini dapat mengakibatkan biaya yang tidak diharapkan ditagih ke Anda Akun AWS.

------
#### [ Konsol Manajemen AWS ]

**Untuk mengonfigurasi pemicu Amazon S3 (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) konsol Lambda dan pilih fungsi Anda ()`CreateThumbnail`.

1. Pilih **Tambahkan pemicu**.

1. Pilih **S3**.

1. Di bawah **Bucket**, pilih bucket sumber Anda.

1. Di bawah **Jenis acara**, pilih **Semua objek membuat acara**.

1. Di bawah **Pemanggilan rekursif**, pilih kotak centang untuk mengetahui bahwa tidak disarankan menggunakan bucket Amazon S3 yang sama untuk input dan output. Anda dapat mempelajari lebih lanjut tentang pola pemanggilan rekursif di Lambda dengan membaca [pola rekursif yang menyebabkan fungsi Lambda yang tidak terkendali](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/recursive-runaway) di Tanah Tanpa Server.

1. Pilih **Tambahkan**.

   Saat Anda membuat pemicu menggunakan konsol Lambda, Lambda secara otomatis membuat [kebijakan berbasis sumber daya](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) untuk memberikan layanan yang Anda pilih izin untuk menjalankan fungsi Anda. 

------
#### [ AWS CLI ]

**Untuk mengonfigurasi pemicu Amazon S3 ()AWS CLI**

1. [Agar bucket sumber Amazon S3 menjalankan fungsi saat menambahkan file gambar, pertama-tama Anda harus mengonfigurasi izin untuk fungsi menggunakan kebijakan berbasis sumber daya.](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) Pernyataan kebijakan berbasis sumber daya memberikan Layanan AWS izin lain untuk menjalankan fungsi Anda. Untuk memberikan izin Amazon S3 untuk menjalankan fungsi Anda, jalankan perintah CLI berikut. Pastikan untuk mengganti `source-account` parameter dengan Akun AWS ID Anda sendiri dan menggunakan nama bucket sumber Anda sendiri.

   ```
   aws lambda add-permission --function-name CreateThumbnail \
   --principal s3.amazonaws.com --statement-id s3invoke --action "lambda:InvokeFunction" \
   --source-arn arn:aws:s3:::amzn-s3-demo-source-bucket \
   --source-account 123456789012
   ```

   Kebijakan yang Anda tetapkan dengan perintah ini memungkinkan Amazon S3 untuk menjalankan fungsi Anda hanya ketika tindakan dilakukan di bucket sumber Anda.
**catatan**  
Meskipun nama bucket Amazon S3 unik secara global, saat menggunakan kebijakan berbasis sumber daya, praktik terbaik adalah menentukan bahwa bucket harus menjadi milik akun Anda. Ini karena jika Anda menghapus bucket, Anda dapat membuat bucket dengan Amazon Resource Name (ARN) yang sama. Akun AWS 

1. Simpan JSON berikut dalam file bernama`notification.json`. Saat diterapkan ke bucket sumber Anda, JSON ini mengonfigurasi bucket untuk mengirim notifikasi ke fungsi Lambda Anda setiap kali objek baru ditambahkan. Ganti Akun AWS nomor dan Wilayah AWS dalam fungsi Lambda ARN dengan nomor akun dan wilayah Anda sendiri.

   ```
   {
   "LambdaFunctionConfigurations": [
       {
         "Id": "CreateThumbnailEventConfiguration",
         "LambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:CreateThumbnail",
         "Events": [ "s3:ObjectCreated:Put" ]
       }
     ]
   }
   ```

1. Jalankan perintah CLI berikut untuk menerapkan pengaturan notifikasi dalam file JSON yang Anda buat ke bucket sumber Anda. Ganti `amzn-s3-demo-source-bucket` dengan nama bucket sumber Anda sendiri.

   ```
   aws s3api put-bucket-notification-configuration --bucket amzn-s3-demo-source-bucket \
   --notification-configuration file://notification.json
   ```

   Untuk mempelajari lebih lanjut tentang `put-bucket-notification-configuration` perintah dan `notification-configuration` opsi, lihat [put-bucket-notification-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-notification-configuration.html)di Referensi *Perintah AWS CLI*.

------

## Uji fungsi Lambda Anda dengan acara dummy
<a name="with-s3-tutorial-dummy-test"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps8.png)


Sebelum menguji seluruh penyiapan dengan menambahkan file gambar ke bucket sumber Amazon S3, Anda menguji apakah fungsi Lambda berfungsi dengan benar dengan memanggilnya dengan acara dummy. Peristiwa di Lambda adalah dokumen berformat JSON yang berisi data untuk diproses fungsi Anda. Saat fungsi Anda dipanggil oleh Amazon S3, peristiwa yang dikirim ke fungsi berisi informasi seperti nama bucket, ARN bucket, dan kunci objek.

------
#### [ Konsol Manajemen AWS ]

**Untuk menguji fungsi Lambda Anda dengan acara dummy (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) konsol Lambda dan pilih fungsi Anda ()`CreateThumbnail`.

1. Pilih tab **Uji**.

1. Untuk membuat acara pengujian, di panel **acara Uji**, lakukan hal berikut:

   1. Di bawah **Uji tindakan peristiwa**, pilih **Buat acara baru**.

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

   1. Untuk **Template**, pilih **S3 Put**.

   1. Ganti nilai untuk parameter berikut dengan nilai Anda sendiri.
      + Untuk`awsRegion`, ganti `us-east-1` dengan bucket Amazon S3 yang Wilayah AWS Anda buat.
      + Untuk`name`, ganti `amzn-s3-demo-bucket` dengan nama bucket sumber Amazon S3 Anda sendiri.
      + Untuk`key`, ganti `test%2Fkey` dengan nama file objek pengujian yang Anda unggah ke bucket sumber di langkah tersebut. [Unggah gambar uji ke bucket sumber Anda](#with-s3-tutorial-test-image)

      ```
      {
        "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": "amzn-s3-demo-bucket",
                "ownerIdentity": {
                  "principalId": "EXAMPLE"
                },
                "arn": "arn:aws:s3:::amzn-s3-demo-bucket"
              },
              "object": {
                "key": "test%2Fkey",
                "size": 1024,
                "eTag": "0123456789abcdef0123456789abcdef",
                "sequencer": "0A1B2C3D4E5F678901"
              }
            }
          }
        ]
      }
      ```

   1. Pilih **Simpan**.

1. Di panel **acara Uji**, pilih **Uji**.

1. Untuk memeriksa fungsi Anda telah membuat verison yang diubah ukurannya dari gambar Anda dan menyimpannya di bucket Amazon S3 target Anda, lakukan hal berikut:

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

   1. Pilih bucket target Anda dan konfirmasikan bahwa file yang diubah ukurannya tercantum di panel **Objects**.

------
#### [ AWS CLI ]

**Untuk menguji fungsi Lambda Anda dengan acara dummy ()AWS CLI**

1. Simpan JSON berikut dalam file bernama`dummyS3Event.json`. Ganti nilai untuk parameter berikut dengan nilai Anda sendiri:
   + Untuk`awsRegion`, ganti `us-east-1` dengan bucket Amazon S3 yang Wilayah AWS Anda buat.
   + Untuk`name`, ganti `amzn-s3-demo-bucket` dengan nama bucket sumber Amazon S3 Anda sendiri.
   + Untuk`key`, ganti `test%2Fkey` dengan nama file objek pengujian yang Anda unggah ke bucket sumber di langkah tersebut. [Unggah gambar uji ke bucket sumber Anda](#with-s3-tutorial-test-image)

   ```
   {
     "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": "amzn-s3-demo-bucket",
             "ownerIdentity": {
               "principalId": "EXAMPLE"
             },
             "arn": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           "object": {
             "key": "test%2Fkey",
             "size": 1024,
             "eTag": "0123456789abcdef0123456789abcdef",
             "sequencer": "0A1B2C3D4E5F678901"
           }
         }
       }
     ]
   }
   ```

1. Dari direktori tempat Anda menyimpan `dummyS3Event.json` file Anda, panggil fungsi dengan menjalankan perintah CLI berikut. Perintah ini memanggil fungsi Lambda Anda secara sinkron dengan `RequestResponse` menentukan sebagai nilai parameter tipe pemanggilan. [Untuk mempelajari lebih lanjut tentang pemanggilan sinkron dan asinkron, lihat Memanggil fungsi Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)

   ```
   aws lambda invoke --function-name CreateThumbnail \
   --invocation-type RequestResponse --cli-binary-format raw-in-base64-out \
   --payload file://dummyS3Event.json outputfile.txt
   ```

    cli-binary-formatOpsi ini diperlukan jika Anda menggunakan versi 2 dari AWS CLI. Untuk menjadikan ini pengaturan default, jalankan`aws configure set cli-binary-format raw-in-base64-out`. Untuk informasi selengkapnya, lihat [opsi baris perintah global yang AWS CLI didukung](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list).

1. Verifikasi bahwa fungsi Anda telah membuat versi thumbnail gambar Anda dan menyimpannya ke bucket Amazon S3 target Anda. Jalankan perintah CLI berikut, ganti `amzn-s3-demo-source-bucket-resized` dengan nama bucket tujuan Anda sendiri.

   ```
   aws s3api list-objects-v2 --bucket amzn-s3-demo-source-bucket-resized
   ```

   Anda akan melihat output seperti yang berikut ini. `Key`Parameter menunjukkan nama file file gambar Anda yang diubah ukurannya.

   ```
   {
       "Contents": [
           {
               "Key": "resized-HappyFace.jpg",
               "LastModified": "2023-06-06T21:40:07+00:00",
               "ETag": "\"d8ca652ffe83ba6b721ffc20d9d7174a\"",
               "Size": 2633,
               "StorageClass": "STANDARD"
           }
       ]
   }
   ```

------

## Uji fungsi Anda menggunakan pemicu Amazon S3
<a name="with-s3-tutorial-test-s3"></a>

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/services-s3-tutorial/s3thumb_tut_steps9.png)


Sekarang setelah Anda mengonfirmasi bahwa fungsi Lambda Anda beroperasi dengan benar, Anda siap untuk menguji penyiapan lengkap Anda dengan menambahkan file gambar ke bucket sumber Amazon S3 Anda. Saat Anda menambahkan gambar ke bucket sumber, fungsi Lambda Anda akan dipanggil secara otomatis. Fungsi Anda membuat versi file yang diubah ukurannya dan menyimpannya di bucket target Anda.

------
#### [ Konsol Manajemen AWS ]

**Untuk menguji fungsi Lambda Anda menggunakan pemicu Amazon S3 (konsol)**

1. Untuk mengunggah gambar ke bucket Amazon S3 Anda, lakukan hal berikut:

   1. Buka halaman [Bucket di](https://console.aws.amazon.com/s3/buckets) konsol Amazon S3 dan pilih bucket sumber Anda.

   1. Pilih **Unggah**.

   1. Pilih **Tambahkan file** dan gunakan pemilih file untuk memilih file gambar yang ingin Anda unggah. Objek gambar Anda dapat berupa file.jpg atau.png.

   1. Pilih **Buka**, lalu pilih **Unggah**.

1. Verifikasi bahwa Lambda telah menyimpan versi file gambar yang diubah ukurannya di bucket target dengan melakukan hal berikut:

   1. Arahkan kembali ke halaman [Bucket di](https://console.aws.amazon.com/s3/buckets) konsol Amazon S3 dan pilih bucket tujuan Anda.

   1. Di panel **Objects**, Anda sekarang akan melihat dua file gambar yang diubah ukurannya, satu dari setiap pengujian fungsi Lambda Anda. Untuk mengunduh gambar yang diubah ukurannya, pilih file, lalu pilih **Unduh**.

------
#### [ AWS CLI ]

**Untuk menguji fungsi Lambda Anda menggunakan pemicu Amazon S3 ()AWS CLI**

1. Dari direktori yang berisi gambar yang ingin Anda unggah, jalankan perintah CLI berikut. Ganti `--bucket` parameter dengan nama bucket sumber Anda. Untuk `--body` parameter `--key` dan, gunakan nama file gambar pengujian Anda. Gambar uji Anda dapat berupa file.jpg atau.png.

   ```
   aws s3api put-object --bucket amzn-s3-demo-source-bucket --key SmileyFace.jpg --body ./SmileyFace.jpg
   ```

1. Verifikasi bahwa fungsi Anda telah membuat versi thumbnail gambar Anda dan menyimpannya ke bucket Amazon S3 target Anda. Jalankan perintah CLI berikut, ganti `amzn-s3-demo-source-bucket-resized` dengan nama bucket tujuan Anda sendiri.

   ```
   aws s3api list-objects-v2 --bucket amzn-s3-demo-source-bucket-resized
   ```

   Jika fungsi Anda berjalan dengan sukses, Anda akan melihat output yang mirip dengan berikut ini. Bucket target Anda sekarang harus berisi dua file yang diubah ukurannya.

   ```
   {
       "Contents": [
           {
               "Key": "resized-HappyFace.jpg",
               "LastModified": "2023-06-07T00:15:50+00:00",
               "ETag": "\"7781a43e765a8301713f533d70968a1e\"",
               "Size": 2763,
               "StorageClass": "STANDARD"
           },
           {
               "Key": "resized-SmileyFace.jpg",
               "LastModified": "2023-06-07T00:13:18+00:00",
               "ETag": "\"ca536e5a1b9e32b22cd549e18792cdbc\"",
               "Size": 1245,
               "StorageClass": "STANDARD"
           }
       ]
   }
   ```

------

## Bersihkan sumber daya Anda
<a name="s3-tutorial-cleanup"></a>

Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.

**Untuk menghapus fungsi Lambda**

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

1. Pilih fungsi yang Anda buat.

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

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

**Untuk menghapus kebijakan yang Anda buat.**

1. Buka [halaman Kebijakan](https://console.aws.amazon.com/iam/home#/policies) konsol IAM.

1. Pilih kebijakan yang Anda buat (**AWSLambdaS3Policy**).

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

1. Pilih **Hapus**.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.

**Untuk menghapus bucket S3**

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

1. Pilih bucket yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama ember di bidang input teks.

1. Pilih **Hapus bucket**.