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 Anda menambahkan file gambar ke bucket Anda, Amazon S3 memanggil fungsi Lambda Anda. Fungsi ini kemudian membuat versi thumbnail gambar dan mengeluarkannya ke bucket Amazon S3 yang berbeda.
Untuk menyelesaikan tutorial ini, Anda melakukan langkah-langkah berikut:
-
Buat bucket Amazon S3 sumber dan tujuan dan unggah gambar sampel.
-
Buat fungsi Lambda yang mengubah ukuran gambar dan mengeluarkan thumbnail ke bucket Amazon S3.
-
Konfigurasikan pemicu Lambda yang memanggil fungsi Anda saat objek diunggah ke bucket sumber Anda.
-
Uji fungsi Anda, pertama dengan peristiwa dummy, dan kemudian dengan mengunggah gambar ke bucket sumber Anda.
Dengan menyelesaikan langkah-langkah ini, Anda akan belajar cara menggunakan Lambda untuk melakukan 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 memanggil fungsi Lambda.
Prasyarat
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.
Jika Anda belum menginstal AWS Command Line Interface, ikuti langkah-langkah di Meng instal atau memperbarui versi terbaru AWS CLI untuk menginstalnya.
Tutorial ini membutuhkan terminal baris perintah atau shell untuk menjalankan perintah. Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (sepertizip) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan Windows-integrated versi Ubuntu dan Bash, instal Subsistem Windows untuk Linux.
Buat dua bucket Amazon S3
Pertama buat dua bucket Amazon S3. Bucket pertama adalah bucket sumber tempat Anda mengunggah gambar Anda. Bucket kedua digunakan oleh Lambda untuk menyimpan thumbnail yang diubah ukurannya saat Anda memanggil fungsi Anda.
- Konsol Manajemen AWS
-
Untuk membuat bucket Amazon S3 (konsol)
-
Buka konsol Amazon S3 dan pilih halaman bucket tujuan umum.
-
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.
-
Pilih Buat bucket.
-
Pada Konfigurasi umum, lakukan hal berikut:
-
Untuk tipe Bucket, pastikan tujuan umum dipilih.
-
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 (-).
-
Biarkan semua opsi lain diatur ke nilai defaultnya dan pilih Buat bucket.
-
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)
-
Jalankan perintah CLI berikut untuk membuat bucket sumber Anda. Nama yang Anda pilih untuk bucket Anda harus unik secara global dan mengikuti aturan penamaan Amazon S3 Bucket. Nama hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-). Untuk region danLocationConstraint, pilih yang Wilayah AWS terdekat 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 buat catatan wilayah yang Anda pilih.
-
Jalankan perintah berikut untuk membuat bucket tujuan Anda. Untuk nama bucket, Anda harus menggunakanamzn-s3-demo-source-bucket-resized, amzn-s3-demo-source-bucket dimana nama bucket sumber yang Anda buat pada langkah 1. Untuk region danLocationConstraint, pilih yang sama 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
Mengunggah gambar uji ke bucket sumber Anda
Kemudian dalam tutorial, Anda akan menguji fungsi Lambda Anda dengan memanggilnya menggunakan AWS CLI atau konsol Lambda. Untuk mengonfirmasi bahwa fungsi Anda beroperasi dengan benar, bucket sumber Anda harus berisi gambar uji. Gambar ini dapat berupa file JPG atau PNG apa pun yang Anda pilih.
- Konsol Manajemen AWS
-
Untuk mengunggah gambar uji ke bucket sumber Anda (konsol)
-
Buka halaman Bucket di konsol Amazon S3.
-
Pilih bucket sumber yang Anda buat pada langkah sebelumnya.
-
Pilih Unggah.
-
Pilih Tambahkan file dan gunakan pemilih file untuk memilih objek yang ingin Anda unggah.
-
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
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 menulis ke Amazon CloudWatch Log.
- Konsol Manajemen AWS
-
Untuk membuat kebijakan (konsol)
-
Buka halaman Kebijakan konsol AWS Identity and Access Management (IAM).
-
Pilih Buat kebijakan.
-
Pilih tab JSON, lalu tempel kebijakan kustom 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:::*/*"
}
]
}
-
Pilih Berikutnya.
-
Di bawah Detail kebijakan, untuk Nama kebijakan, masukkanLambdaS3Policy.
-
Pilih Buat kebijakan.
- AWS CLI
-
Untuk membuat kebijakan (AWS CLI)
-
Simpan JSON berikut 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:::*/*"
}
]
}
-
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
Peran eksekusi adalah peran IAM yang memberikan izin fungsi Lambda untuk mengakses Layanan AWS dan sumber daya. Untuk memberikan fungsi akses baca dan tulis ke bucket Amazon S3, Anda melampirkan kebijakan izin yang Anda buat pada langkah sebelumnya.
- Konsol Manajemen AWS
-
Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda (konsol)
-
Buka halaman Peran pada konsol (IAM).
-
Pilih Buat peran.
-
Untuk tipe entitas tepercaya, pilih Layanan AWS, dan untuk kasus penggunaan, pilih Lambda.
-
Pilih Berikutnya.
-
Tambahkan kebijakan izin yang Anda buat pada langkah sebelumnya dengan melakukan hal berikut:
-
Dalam kotak pencarian kebijakan, masukkan LambdaS3Policy.
-
Di hasil pencarian, pilih kotak centang untukLambdaS3Policy.
-
Pilih Berikutnya.
-
Di bawah Detail peran, untuk nama Peran masukkanLambdaS3Role.
-
Pilih Buat peran.
- AWS CLI
-
Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda (AWS CLI)
-
Simpan JSON berikut dalam file bernamatrust-policy.json. Kebijakan kepercayaan ini memungkinkan Lambda menggunakan izin peran dengan memberikan lambda.amazonaws.com izin utama layanan untuk memanggil AssumeRole tindakan AWS Security Token Service (AWS STS).
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
-
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
-
Untuk melampirkan kebijakan izin yang Anda buat pada langkah sebelumnya, jalankan perintah CLI berikut. Ganti Akun AWS nomor di ARN polis dengan nomor rekening Anda sendiri.
aws iam attach-role-policy --role-name LambdaS3Role --policy-arn arn:aws:iam::123456789012:policy/LambdaS3Policy
Buat paket penerapan fungsi
Untuk membuat fungsi Anda, Anda membuat paket penerapan yang berisi kode fungsi Anda dan dependensinya. Untuk CreateThumbnail fungsi ini, kode fungsi Anda menggunakan pustaka terpisah untuk mengubah ukuran gambar. Ikuti petunjuk untuk bahasa yang Anda pilih untuk membuat paket penerapan yang berisi pustaka yang diperlukan.
- Node.js
-
Untuk membuat paket penerapan (Node.js)
-
Buat direktori bernama lambda-s3 kode fungsi dan dependensi Anda dan navigasikan ke dalamnya.
mkdir lambda-s3
cd lambda-s3
-
Buat Node.js proyek baru dengannpm. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekanEnter.
npm init
-
Simpan kode fungsi berikut dalam file bernamaindex.mjs. Pastikan untuk mengganti us-east-1 dengan Wilayah AWS tempat Anda membuat bucket 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);
};
-
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
Perintah npm install 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
-
Buat paket penerapan.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 penerapan (Python)
-
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))
-
Di direktori yang sama di mana Anda membuat lambda_function.py file Anda, buat direktori baru bernama package dan instal pust aka Pillow (PIL) dan AWS SDK untuk Python (Boto3). Meskipun runtime Lambda Python menyertakan versi Boto3 SDK, kami sarankan Anda menambahkan semua dependensi fungsi Anda ke paket penerapan Anda, bahkan jika mereka disertakan dalam runtime. Untuk informasi selengkapnya, lihat Dependensi Runtime di Python.
mkdir package
pip install \
--platform manylinux2014_x86_64 \
--target=package \
--implementation cp \
--python-version 3.12 \
--only-binary=:all: --upgrade \
pillow boto3
Perpustakaan Pillow berisi kode C/C ++. Dengan menggunakan --only-binary=:all: opsi --platform manylinux_2014_x86_64 dan, pip mengunduh dan menginstal versi Pillow yang berisi binari pra-kompilasi yang kompatibel dengan sistem operasi Amazon Linux 2. Ini memastikan bahwa paket penerapan Anda berfungsi di lingkungan eksekusi Lambda, terlepas dari sistem operasi dan arsitektur mesin build lokal Anda.
-
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 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
Anda dapat membuat fungsi Lambda menggunakan konsol 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.
-
Buka halaman Fungsi di konsol Lambda.
-
Pastikan Anda bekerja di tempat yang sama dengan Wilayah AWS tempat Anda membuat bucket Amazon S3 Anda. Anda dapat mengubah wilayah Anda menggunakan daftar drop-down di bagian atas layar.
-
Pilih Buat fungsi.
-
Pilih Penulis dari scratch.
-
Di bagian Informasi dasar, lakukan hal berikut:
-
Untuk Nama fungsi, masukkan CreateThumbnail.
-
Untuk Runtime, pilih Node.js 22.x atau Python 3.12 sesuai dengan bahasa yang Anda pilih untuk fungsi Anda.
-
Untuk Arsitektur, pilih x86_64.
-
Di tab Ubah peran eksekusi default, lakukan hal berikut:
-
Perluas tab, lalu pilih Gunakan peran yang ada.
-
Pilih yang LambdaS3Role Anda buat sebelumnya.
-
Pilih Buat fungsi.
Untuk mengunggah kode fungsi (konsol)
-
Di panel sumber kode, pilih Unggah dari.
-
Pilih fil e.zip.
-
Pilih Unggah.
-
Di pemilih file, pilih file.zip Anda dan pilih Buka.
-
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 parameter, ganti us-east-1 dengan wilayah tempat Anda membuat bucket Amazon S3 Anda.
-
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 lambda_function.zip file Anda.
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
Agar fungsi Lambda Anda berjalan saat Anda mengunggah gambar ke bucket sumber Anda, Anda perlu mengonfigurasi pemicu untuk fungsi Anda. Anda dapat mengonfigurasi pemicu Amazon S3 menggunakan konsol atau AWS CLI.
Prosedur ini mengonfigurasi bucket Amazon S3 untuk memanggil fungsi Anda setiap kali objek dibuat di bucket. Pastikan untuk mengkonfigurasi ini hanya pada bucket sumber. Jika fungsi Lambda Anda membuat objek dalam bucket yang sama yang memanggilnya, fungsi Anda dapat dipang gil terus menerus dalam sebuah loop. Hal ini dapat mengakibatkan tagihan yang tidak diharapkan ditagih kepada Anda Akun AWS.
- Konsol Manajemen AWS
-
Untuk mengkonfigurasi pemicu Amazon S3 (konsol)
-
Buka halaman Functions pada konsol Lambda dan pilih fungsi Anda (CreateThumbnail).
-
Pilih Tambahkan pemicu.
-
Pilih S3.
-
Di bawah Bucket, pilih bucket sumber Anda.
-
Di bawah Jenis peristiwa, pilih Semua objek membuat peristiwa.
-
Di bawah Pemanggilan rekursif, pilih kotak centang untuk mengakui bahwa menggunakan bucket Amazon S3 yang sama untuk input dan output tidak disarankan. Anda dapat mempelajari lebih lanjut tentang pola pemanggilan rekursif di Lambda dengan membaca Pola Rekursif yang menyebabkan fungsi Lambda yang melarikan diri di Serverless Land.
-
Pilih Tambahkan.
Saat Anda membuat pemicu menggunakan konsol Lambda, Lambda secara otomatis membuat kebijakan berbasis sumber daya untuk memberikan izin layanan yang Anda pilih untuk memanggil fungsi Anda.
- AWS CLI
-
Untuk mengkonfigurasi pemicu Amazon S3 (AWS CLI)
-
Agar bucket sumber Amazon S3 Anda dapat memanggil fungsi Anda saat menambahkan file gambar, Anda harus terlebih dahulu mengonfigurasi izin untuk fungsi Anda menggunakan kebijakan berbasis sumber daya. Pernyataan kebijakan berbasis sumber daya memberikan Layanan AWS izin lain untuk memanggil fungsi Anda. Untuk memberikan izin Amazon S3 untuk memanggil 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 memanggil fungsi Anda hanya ketika tindakan terjadi pada bucket sumber Anda.
Meskipun nama bucket Amazon S3 unik secara global, saat menggunakan kebijakan berbasis sumber daya, praktik terbaik adalah menentukan bahwa bucket harus milik akun Anda. Ini karena jika Anda menghapus bucket, dimungkinkan bagi yang lain Akun AWS untuk membuat bucket dengan Nama Sumber Daya Amazon (ARN) yang sama.
-
Simpan JSON berikut dalam file bernamanotification.json. Ketika diterapkan ke bucket sumber Anda, JSON ini mengonfigurasi bucket untuk mengirim pemberitahuan 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" ]
}
]
}
-
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 di Referensi Perintah CLI. AWS
Uji fungsi Lambda Anda dengan 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 peristiwa dummy. Peristiwa di Lambda adalah JSON-formatted dokumen yang berisi data untuk diproses fungsi Anda. Ketika fungsi Anda dipanggil oleh Amazon S3, peristiwa yang dikirim ke fungsi Anda berisi informasi seperti nama bucket, bucket ARN, dan kunci objek.
- Konsol Manajemen AWS
-
Untuk menguji fungsi Lambda Anda dengan peristiwa dummy (konsol)
-
Buka halaman Functions pada konsol Lambda dan pilih fungsi Anda (CreateThumbnail).
-
Pilih tab Tes.
-
Untuk membuat acara pengujian Anda, di panel Uji acara, lakukan hal berikut:
-
Di bawah Tindakan acara uji, pilih Buat acara baru.
-
Untuk Nama peristiwa, masukkan myTestEvent.
-
Untuk Template, pilih S3 Put.
-
Ganti nilai untuk parameter berikut dengan nilai Anda sendiri.
-
UntukawsRegion, ganti us-east-1 dengan bucket Amazon S3 yang Wilayah AWS Anda buat di dalamnya.
-
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 Anda di langkah iniMengunggah 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"
}
}
}
]
}
-
Pilih Simpan.
-
Di panel Uji acara, pilih U ji.
-
Untuk memeriksa apakah fungsi Anda telah membuat versi gambar yang diubah ukurannya dan menyimpannya di bucket Amazon S3 target Anda, lakukan hal berikut:
-
Buka halaman Buc ket di konsol Amazon S3.
-
Pilih bucket target Anda dan konfirmasikan bahwa file yang diubah ukurannya terdaftar di panel Ob jek.
- AWS CLI
-
Untuk menguji fungsi Lambda Anda dengan peristiwa dummy (AWS CLI)
-
Simpan JSON berikut 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 di dalamnya.
-
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 Anda di langkah iniMengunggah 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"
}
}
}
]
}
-
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 menentukan RequestResponse 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
Opsi cli-binary-format 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.
-
Pastikan 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. KeyParameter menunjukkan nama file dari file gambar 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
Sekarang setelah Anda mengonfirmasi fungsi Lambda Anda beroperasi dengan benar, Anda siap untuk menguji pengaturan lengkap Anda dengan menambahkan file gambar ke bucket sumber Amazon S3 Anda. Saat Anda menambahkan gambar Anda ke bucket sumber, fungsi Lambda Anda harus dipanggil secara otomatis. Fungsi Anda membuat versi file yang diubah ukurannya dan menyimpannya di bucket target Anda.
- Konsol Manajemen AWS
-
Untuk menguji fungsi Lambda menggunakan pemicu Amazon S3 (konsol)
-
Untuk mengunggah gambar ke bucket Amazon S3 Anda, lakukan hal berikut:
-
Buka halaman Buckets di konsol Amazon S3 dan pilih bucket sumber Anda.
-
Pilih Unggah.
-
Pilih Tambahkan file dan gunakan pemilih file untuk memilih file gambar yang ingin Anda unggah. Objek gambar Anda dapat berupa file.jpg atau.png.
-
Pilih Buka, lalu pilih Unggah.
-
Pastikan Lambda telah menyimpan versi file gambar yang diubah ukurannya di bucket target Anda dengan melakukan hal berikut:
-
Arahkan kembali ke https://console.aws.amazon.com/s3/buckets halaman Buckets di konsol Amazon S3 dan pilih bucket tujuan Anda.
-
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)
-
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
-
Pastikan 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
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 biaya yang tidak perlu kepada Anda Akun AWS.
Untuk menghapus fungsi Lambda
-
Buka halaman Fungsi di konsol Lambda.
-
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Ketik confirm di bidang input teks dan pilih H apus.
Untuk menghapus kebijakan yang Anda buat.
-
Buka halaman Kebijakan konsol IAM.
-
Pilih kebijakan yang Anda buat (AWSLambdaS3Policy).
-
Pilih Tindakan kebijakan, Hapus.
-
Pilih Hapus.
Untuk menghapus peran eksekusi
-
Buka halaman Peran dari konsol IAM.
-
Pilih peran eksekusi yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama peran di bidang input teks dan pilih H apus.
Untuk menghapus bucket S3
-
Buka konsol Amazon S3.
-
Pilih bucket yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama bucket di bidang input teks.
-
Pilih Hapus bucket.