Tutorial: Menggunakan pemicu Amazon S3 untuk membuat gambar thumbnail - AWS Lambda

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

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

Aliran data antara bucket S3, fungsi Lambda, dan bucket S3 lainnya

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

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

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

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

  4. 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 AWS Management Console.

Jika Anda mencari contoh sederhana untuk mempelajari cara mengonfigurasi pemicu Amazon S3 untuk Lambda, Anda dapat mencoba Tutorial: Menggunakan pemicu Amazon S3 untuk menjalankan fungsi Lambda.

Prasyarat

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

Untuk mendaftar untuk Akun AWS
  1. Buka https://portal.aws.amazon.com/billing/pendaftaran.

  2. Ikuti petunjuk online.

    Bagian dari prosedur pendaftaran melibatkan tindakan menerima panggilan telepon dan memasukkan kode verifikasi di keypad telepon.

    Saat Anda mendaftar untuk sebuah Akun AWS, sebuah Pengguna root akun AWSdibuat. Pengguna root memiliki akses ke semua Layanan AWS dan sumber daya di akun. Sebagai praktik keamanan terbaik, tetapkan akses administratif ke pengguna, dan gunakan hanya pengguna root untuk melakukan tugas yang memerlukan akses pengguna root.

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

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

Amankan Anda Pengguna root akun AWS
  1. Masuk ke AWS Management Consolesebagai pemilik akun dengan memilih pengguna Root dan memasukkan alamat Akun AWS email Anda. Di laman berikutnya, masukkan kata sandi.

    Untuk bantuan masuk dengan menggunakan pengguna root, lihat Masuk sebagai pengguna root di AWS Sign-In Panduan Pengguna.

  2. Aktifkan autentikasi multi-faktor (MFA) untuk pengguna root Anda.

    Untuk petunjuk, lihat Mengaktifkan MFA perangkat virtual untuk pengguna Akun AWS root (konsol) Anda di Panduan IAM Pengguna.

Buat pengguna dengan akses administratif
  1. Aktifkan Pusat IAM Identitas.

    Untuk mendapatkan petunjuk, silakan lihat Mengaktifkan AWS IAM Identity Center di Panduan Pengguna AWS IAM Identity Center .

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

    Untuk tutorial tentang menggunakan Direktori Pusat Identitas IAM sebagai sumber identitas Anda, lihat Mengkonfigurasi akses pengguna dengan default Direktori Pusat Identitas IAM di Panduan AWS IAM Identity Center Pengguna.

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

    Untuk bantuan masuk menggunakan pengguna Pusat IAM Identitas, lihat Masuk ke portal AWS akses di Panduan AWS Sign-In Pengguna.

Tetapkan akses ke pengguna tambahan
  1. Di Pusat IAM Identitas, buat set izin yang mengikuti praktik terbaik menerapkan izin hak istimewa paling sedikit.

    Untuk petunjuknya, lihat Membuat set izin di Panduan AWS IAM Identity Center Pengguna.

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

    Untuk petunjuk, lihat Menambahkan grup di Panduan AWS IAM Identity Center Pengguna.

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.

Buat dua ember Amazon S3

Langkah pertama: Buat ember S3

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.

AWS Management Console
Untuk membuat bucket Amazon S3 (konsol)
  1. Buka halaman Bucket konsol Amazon S3.

  2. Pilih Buat bucket.

  3. Pada Konfigurasi umum, lakukan hal berikut:

    1. Untuk nama Bucket, masukkan nama unik global yang memenuhi aturan penamaan Amazon S3 Bucket. Nama bucket hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-).

    2. Untuk Wilayah AWS, pilih yang paling Wilayah AWSdekat dengan lokasi geografis Anda. Kemudian dalam tutorial, Anda harus membuat fungsi Lambda Anda dalam hal yang sama Wilayah AWS, jadi catat wilayah yang Anda pilih.

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

  5. Ulangi langkah 1 hingga 4 untuk membuat bucket tujuan Anda. Untuk nama Bucketamzn-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 CLI perintah berikut untuk membuat bucket sumber Anda. Nama yang Anda pilih untuk bucket Anda harus unik secara global dan ikuti aturan penamaan Amazon S3 Bucket. Nama hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-). Untuk region danLocationConstraint, pilih yang paling Wilayah AWSdekat 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.

  2. Jalankan perintah berikut untuk membuat bucket tujuan Anda. Untuk nama bucket, Anda harus menggunakanamzn-s3-demo-source-bucket-resized, di amzn-s3-demo-source-bucket mana nama bucket sumber yang Anda buat di langkah 1. Untuk region danLocationConstraint, 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

Langkah selanjutnya: Unggah objek uji

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 PNG file JPG atau apa saja yang Anda pilih.

AWS Management Console
Untuk mengunggah gambar uji ke bucket sumber Anda (konsol)
  1. Buka halaman Bucket konsol Amazon S3.

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

  3. Pilih Unggah.

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

  5. 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 CLI perintah 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

Langkah selanjutnya: Buat kebijakan izin

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

AWS Management Console
Untuk membuat kebijakan (konsol)
  1. Buka halaman Kebijakan pada konsol AWS Identity and Access Management (IAM).

  2. Pilih Buat kebijakan.

  3. Pilih JSONtab, lalu tempelkan kebijakan khusus berikut ke JSON editor.

    { "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:::*/*" } ] }
  4. Pilih Berikutnya.

  5. Di bawah Detail kebijakan, untuk nama Kebijakan, masukkanLambdaS3Policy.

  6. Pilih Buat kebijakan.

AWS CLI
Untuk membuat kebijakan (AWS CLI)
  1. Simpan yang berikut ini JSON dalam file bernamapolicy.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:::*/*" } ] }
  2. Dari direktori tempat Anda menyimpan dokumen JSON kebijakan, jalankan CLI perintah berikut.

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

Membuat peran eksekusi

Langkah selanjutnya: Buat peran eksekusi

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

AWS Management Console
Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda (konsol)
  1. Buka halaman Peran pada konsol (IAM).

  2. Pilih Buat peran.

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

  4. Pilih Berikutnya.

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

    1. Dalam kotak pencarian kebijakan, masukkan LambdaS3Policy.

    2. Dalam hasil pencarian, pilih kotak centang untukLambdaS3Policy.

    3. Pilih Berikutnya.

  6. Di bawah Rincian peran, untuk nama Peran masukLambdaS3Role.

  7. Pilih Buat peran.

AWS CLI
Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda ()AWS CLI
  1. Simpan yang berikut ini JSON dalam file bernamatrust-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" } ] }
  2. Dari direktori tempat Anda menyimpan dokumen kebijakan JSON kepercayaan, jalankan CLI perintah berikut untuk membuat peran eksekusi.

    aws iam create-role --role-name LambdaS3Role --assume-role-policy-document file://trust-policy.json
  3. Untuk melampirkan kebijakan izin yang Anda buat pada langkah sebelumnya, jalankan CLI perintah berikut. Ganti Akun AWS nomor dalam polis ARN 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

Langkah selanjutnya: Buat paket penyebaran

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
  2. Buat proyek Node.js baru dengannpm. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekanEnter.

    npm init
  3. Simpan kode fungsi berikut dalam file bernamaindex.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); };
  4. 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

    installPerintah 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
  5. 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.mjspackage.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))
  2. Di direktori yang sama di mana Anda membuat lambda_function.py file Anda, buat direktori baru bernama package dan instal pustaka Pillow (PIL) dan file AWS SDK for Python (Boto3). Meskipun runtime Lambda Python menyertakan versi Boto3SDK, kami menyarankan Anda menambahkan semua dependensi fungsi Anda ke paket penerapan Anda, bahkan jika mereka disertakan dalam runtime. Untuk informasi selengkapnya, lihat Dependensi runtime 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 ++. 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.

  3. 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

Buat fungsi Lambda

Langkah selanjutnya: Buat fungsi

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

AWS Management Console
Untuk membuat fungsi (konsol)

Untuk membuat fungsi Lambda Anda 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 the.zip atau JAR file yang Anda buat pada langkah sebelumnya.

  1. Buka halaman Fungsi di konsol Lambda.

  2. 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.

    Gambar yang menunjukkan menu wilayah drop-down di konsol Lambda
  3. Pilih Buat fungsi.

  4. Pilih Penulis dari scratch.

  5. Di bagian Informasi dasar, lakukan hal berikut:

    1. Untuk Nama fungsi, masukkan CreateThumbnail.

    2. Untuk Runtime pilih Node.js 20.x atau Python 3.12 sesuai dengan bahasa yang Anda pilih untuk fungsi Anda.

    3. Untuk Arsitektur, pilih x86_64.

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

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

    2. Pilih yang LambdaS3Role Anda buat sebelumnya.

  7. Pilih Buat fungsi.

Untuk mengunggah kode fungsi (konsol)
  1. Di panel Sumber kode, pilih Unggah dari.

  2. Pilih file.zip.

  3. Pilih Unggah.

  4. Di pemilih file, pilih file.zip Anda dan pilih Buka.

  5. Pilih Simpan.

AWS CLI
Untuk membuat fungsi (AWS CLI)
  • Jalankan CLI perintah 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 nodejs20.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 Andalambda_function.zip.

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

Konfigurasikan Amazon S3 untuk menjalankan fungsi

Langkah selanjutnya: Buat pemicu Amazon S3

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 dalam satu loop. Hal ini dapat mengakibatkan biaya yang tidak diharapkan ditagih ke Anda Akun AWS.

AWS Management Console
Untuk mengonfigurasi pemicu Amazon S3 (konsol)
  1. Buka halaman Fungsi konsol Lambda dan pilih fungsi Anda ()CreateThumbnail.

  2. Pilih Tambahkan pemicu.

  3. Pilih S3.

  4. Di bawah Bucket, pilih bucket sumber Anda.

  5. Di bawah Jenis acara, pilih Semua objek membuat acara.

  6. 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 di Tanah Tanpa Server.

  7. Pilih Tambahkan.

    Saat Anda membuat pemicu menggunakan konsol Lambda, Lambda secara otomatis membuat kebijakan berbasis sumber daya 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. 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 berikut. CLI 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

  2. Simpan yang berikut ini JSON dalam file bernamanotification.json. Saat diterapkan ke bucket sumber Anda, ini akan JSON 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" ] } ] }
  3. Jalankan CLI perintah berikut untuk menerapkan pengaturan notifikasi dalam JSON file 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-configurationdi Referensi AWS CLI Perintah.

Uji fungsi Lambda Anda dengan acara dummy

Langkah selanjutnya: Buat acara dummy

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 JSON berformat -yang berisi data untuk fungsi Anda untuk diproses. Saat fungsi Anda dipanggil oleh Amazon S3, peristiwa yang dikirim ke fungsi berisi informasi seperti nama bucket, ARN bucket, dan kunci objek.

AWS Management Console
Untuk menguji fungsi Lambda Anda dengan acara dummy (konsol)
  1. Buka halaman Fungsi konsol Lambda dan pilih fungsi Anda ()CreateThumbnail.

  2. Pilih tab Uji.

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

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

    2. Untuk Nama peristiwa, masukkan myTestEvent.

    3. Untuk Template, pilih S3 Put.

    4. Ganti nilai untuk parameter berikut dengan nilai Anda sendiri.

      • UntukawsRegion, ganti us-east-1 dengan bucket Amazon S3 yang Wilayah AWS Anda buat.

      • Untukname, ganti amzn-s3-demo-bucket dengan nama bucket sumber Amazon S3 Anda sendiri.

      • Untukkey, ganti test%2Fkey dengan nama file objek pengujian yang Anda unggah ke bucket sumber di langkah tersebut. Unggah gambar uji ke bucket sumber Anda

      { "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" } } } ] }
    5. Pilih Simpan.

  4. Di panel acara Uji, pilih Uji.

  5. 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 konsol Amazon S3.

    2. 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 yang berikut ini JSON dalam file bernamadummyS3Event.json. Ganti nilai untuk parameter berikut dengan nilai Anda sendiri:

    • UntukawsRegion, ganti us-east-1 dengan bucket Amazon S3 yang Wilayah AWS Anda buat.

    • Untukname, ganti amzn-s3-demo-bucket dengan nama bucket sumber Amazon S3 Anda sendiri.

    • Untukkey, ganti test%2Fkey dengan nama file objek pengujian yang Anda unggah ke bucket sumber di langkah tersebut. Unggah gambar uji ke bucket sumber Anda

    { "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" } } } ] }
  2. Dari direktori tempat Anda menyimpan dummyS3Event.json file Anda, panggil fungsi dengan menjalankan CLI perintah 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.

    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, jalankanaws configure set cli-binary-format raw-in-base64-out. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung.

  3. Verifikasi bahwa fungsi Anda telah membuat versi thumbnail gambar Anda dan menyimpannya ke bucket Amazon S3 target Anda. Jalankan CLI perintah 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. KeyParameter 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

Langkah selanjutnya: Uji fungsinya

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.

AWS Management Console
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 konsol Amazon S3 dan pilih bucket sumber Anda.

    2. Pilih Unggah.

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

    4. Pilih Buka, lalu pilih Unggah.

  2. 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 konsol Amazon S3 dan pilih bucket tujuan Anda.

    2. 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 CLI perintah 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
  2. Verifikasi bahwa fungsi Anda telah membuat versi thumbnail gambar Anda dan menyimpannya ke bucket Amazon S3 target Anda. Jalankan CLI perintah 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

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 di konsol Lambda.

  2. Pilih fungsi yang Anda buat.

  3. Pilih Tindakan, Hapus.

  4. Ketik delete kolom input teks dan pilih Hapus.

Untuk menghapus kebijakan yang Anda buat.
  1. Buka halaman Kebijakan IAM konsol.

  2. Pilih kebijakan yang Anda buat (AWSLambdaS3Policy).

  3. Pilih Tindakan kebijakan, Hapus.

  4. Pilih Hapus.

Untuk menghapus peran eksekusi
  1. Buka halaman Peran IAM konsol.

  2. Pilih peran eksekusi yang Anda buat.

  3. Pilih Hapus.

  4. Masukkan nama peran di bidang input teks dan pilih Hapus.

Untuk menghapus bucket S3
  1. Buka konsol Amazon S3.

  2. Pilih bucket yang Anda buat.

  3. Pilih Hapus.

  4. Masukkan nama ember di bidang input teks.

  5. Pilih Hapus bucket.