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.
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 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
Buka https://portal.aws.amazon.com/billing/pendaftaran.
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.
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
-
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.
-
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
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)
-
Buka halaman Bucket konsol Amazon S3.
-
Pilih Buat bucket.
-
Pada Konfigurasi umum, lakukan hal berikut:
-
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 (-).
-
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.
-
Biarkan semua opsi lain disetel ke nilai defaultnya dan pilih Buat bucket.
-
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
-
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.
-
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
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)
-
Buka halaman Bucket konsol Amazon S3.
-
Pilih bucket sumber yang Anda buat di 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 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 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)
-
Buka halaman Kebijakan pada konsol AWS Identity and Access Management (IAM).
-
Pilih Buat kebijakan.
-
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:::*/*"
}
]
}
-
Pilih Berikutnya.
-
Di bawah Detail kebijakan, untuk nama Kebijakan, masukkanLambdaS3Policy
.
-
Pilih Buat kebijakan.
- AWS CLI
-
Untuk membuat kebijakan (AWS CLI)
-
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:::*/*"
}
]
}
-
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
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)
-
Buka halaman Peran pada konsol (IAM).
-
Pilih Buat peran.
-
Untuk jenis entitas Tepercaya, pilih Layanan AWS, dan untuk kasus Penggunaan, pilih Lambda.
-
Pilih Berikutnya.
-
Tambahkan kebijakan izin yang Anda buat di langkah sebelumnya dengan melakukan hal berikut:
-
Dalam kotak pencarian kebijakan, masukkan LambdaS3Policy
.
-
Dalam hasil pencarian, pilih kotak centang untukLambdaS3Policy
.
-
Pilih Berikutnya.
-
Di bawah Rincian peran, untuk nama Peran masukLambdaS3Role
.
-
Pilih Buat peran.
- AWS CLI
-
Untuk membuat peran eksekusi dan melampirkan kebijakan izin Anda ()AWS CLI
-
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"
}
]
}
-
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
-
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
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)
-
Buat direktori bernama lambda-s3
untuk kode fungsi dan dependensi Anda dan navigasikan ke dalamnya.
mkdir lambda-s3
cd lambda-s3
-
Buat proyek Node.js 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 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);
};
-
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
-
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)
-
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 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.
-
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
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.
-
Buka halaman Fungsi di konsol Lambda.
-
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.
-
Pilih Buat fungsi.
-
Pilih Penulis dari scratch.
-
Di bagian Informasi dasar, lakukan hal berikut:
-
Untuk Nama fungsi, masukkan CreateThumbnail
.
-
Untuk Runtime pilih Node.js 20.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 file.zip.
-
Pilih Unggah.
-
Di pemilih file, pilih file.zip Anda dan pilih Buka.
-
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
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
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)
-
Buka halaman Fungsi konsol Lambda dan pilih fungsi Anda ()CreateThumbnail
.
-
Pilih Tambahkan pemicu.
-
Pilih S3.
-
Di bawah Bucket, pilih bucket sumber Anda.
-
Di bawah Jenis acara, pilih Semua objek membuat acara.
-
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.
-
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
-
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.
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
-
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" ]
}
]
}
-
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
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)
-
Buka halaman Fungsi konsol Lambda dan pilih fungsi Anda ()CreateThumbnail
.
-
Pilih tab Uji.
-
Untuk membuat acara pengujian, di panel acara Uji, lakukan hal berikut:
-
Di bawah Uji tindakan peristiwa, 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.
-
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"
}
}
}
]
}
-
Pilih Simpan.
-
Di panel acara Uji, pilih Uji.
-
Untuk memeriksa fungsi Anda telah membuat verison yang diubah ukurannya dari gambar Anda dan menyimpannya di bucket Amazon S3 target Anda, lakukan hal berikut:
-
Buka halaman Bucket konsol Amazon S3.
-
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
-
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"
}
}
}
]
}
-
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.
-
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. 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
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)
-
Untuk mengunggah gambar ke bucket Amazon S3 Anda, lakukan hal berikut:
-
Buka halaman Bucket 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.
-
Verifikasi bahwa Lambda telah menyimpan versi file gambar yang diubah ukurannya di bucket target dengan melakukan hal berikut:
-
Arahkan kembali ke halaman Bucket 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 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
-
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
-
Buka halaman Fungsi di konsol Lambda.
-
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Ketik delete
kolom input teks dan pilih Hapus.
Untuk menghapus kebijakan yang Anda buat.
-
Buka halaman Kebijakan IAM konsol.
-
Pilih kebijakan yang Anda buat (AWSLambdaS3Policy).
-
Pilih Tindakan kebijakan, Hapus.
-
Pilih Hapus.
Untuk menghapus peran eksekusi
-
Buka halaman Peran IAM konsol.
-
Pilih peran eksekusi yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama peran di bidang input teks dan pilih Hapus.
Untuk menghapus bucket S3
-
Buka konsol Amazon S3.
-
Pilih bucket yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama ember di bidang input teks.
-
Pilih Hapus bucket.