Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris. Show
Bagian ini detail cara menulisAWS Lambda fungsi untuk digunakan dengan titik akses Amazon S3 Objeknya Lambda. Untuk mempelajari end-to-end prosedur lengkap untuk beberapa tugas S3 Object Lambda, lihatTutorial: Mengubah data untuk aplikasi Anda dengan S3 Object Lambda. Bekerja denganimport boto3 import requests def handler(event, context): s3 = boto3.client('s3') """ Retrieve the operation context object from the event. This object indicates where the WriteGetObjectResponse request should be delivered and contains a presigned URL in 'inputS3Url' where we can download the requested object from. The 'userRequest' object has information related to the user who made this 'GetObject' request to S3 Object Lambda. """ get_context = event["getObjectContext"] user_request_headers = event["userRequest"]["headers"] route = get_context["outputRoute"] token = get_context["outputToken"] s3_url = get_context["inputS3Url"] # Check for the presence of a 'CustomHeader' header and deny or allow based on that header. is_token_present = "SuperSecretToken" in user_request_headers if is_token_present: # If the user presented our custom 'SuperSecretToken' header, we send the requested object back to the user. response = requests.get(s3_url) s3.write_get_object_response(RequestRoute=route, RequestToken=token, Body=response.content) else: # If the token is not present, we send an error back to the user. s3.write_get_object_response(RequestRoute=route, RequestToken=token, StatusCode=403, ErrorCode="NoSuperSecretTokenFound", ErrorMessage="The request was not secret enough.") # Gracefully exit the Lambda function. return { 'status_code': 200 }8 permintaan di LambdaBagian ini mengasumsikan bahwa jalur akses Object Lambda Anda dikonfigurasi untuk memanggil fungsi Lambda 8. S3 Object Lambda mencakup operasi API Amazon S3 0, yang memungkinkan fungsi Lambda untuk menyediakan data dan respons header yang disesuaikan untuk 8 pemanggil. 0memberi Anda kendali yang luas atas kode status, header respons, dan respons tubuh, berdasarkan kebutuhan pengolahan Anda. Anda dapat menggunakan 0 untuk menanggapi dengan seluruh objek berubah, bagian dari objek berubah, atau tanggapan lain berdasarkan konteks aplikasi Anda. Bagian berikut menunjukkan contoh-contoh unik menggunakan operasi 0 API.
Contoh 1: Menanggapi dengan kode status HTTP 403 (Forbidden) Anda dapat digunakan 0 untuk menanggapi dengan kode status HTTP 403 (Terlarang) berdasarkan isi dari objek.Java Python Node.js
Contoh 2: Menanggapi dengan citra yang berubah Saat melakukan performa transformasi citra, Anda mungkin menemukan bahwa Anda memerlukan semua byte dari objek sumber sebelum Anda dapat mulai memproses mereka. Dalam kasus ini, 0 permintaan Anda akan mengembalikan seluruh objek ke aplikasi permintaan dalam satu panggilan.Java Python Node.js
Contoh 3: Melakukan pengaliran konten terkompresi Saat Anda mengompresi objek, data terkompresi diproduksi secara bertambah. Akibatnya, Anda dapat menggunakan 0 permintaan Anda untuk mengembalikan data terkompresi segera setelah siap. Seperti yang ditunjukkan dalam contoh ini, Anda tidak perlu mengetahui panjang transformasi yang telah selesai.Java Python Node.js
Meskipun S3 Object Lambda mengizinkan hingga 60 detik untuk mengirim respon lengkap untuk pemanggil melalui 0 permintaan, jumlah aktual waktu yang tersedia mungkin kurang. Misalnya, waktu tunggu fungsi Lambda Anda mungkin kurang dari 60 detik. Dalam kasus lain, pemanggil mungkin memiliki batas waktu yang lebih ketat.Agar pemanggil asli menerima respons selain kode status HTTP 500 (Kesalahan Server Internal), 0 panggilan harus diselesaikan. Jika fungsi Lambda kembali, dengan pengecualian atau sebaliknya, sebelum operasi 0 API dipanggil, pemanggil asli menerima respons 500 (Internal Server Error). Pengecualian dilemparkan selama waktu yang dibutuhkan untuk menyelesaikan respon dalam tanggapan terpotong ke pemanggil. Jika fungsi Lambda menerima respons kode status HTTP 200 (OK) dari panggilan 0 API, maka pemanggil asli telah mengirim permintaan lengkap. Respon fungsi Lambda, apakah pengecualian dilemparkan atau tidak, diabaikan oleh S3 Object Lambda.Saat memanggil operasi 0 API, Amazon S3 membutuhkan rute dan permintaan token dari konteks peristiwa. Untuk informasi selengkapnya, lihat Format konteks peristiwa dan penggunaan.Parameter token rute dan permintaan diperlukan untuk menghubungkan 3 respon dengan pemanggil asli. Meskipun selalu tepat untuk mencoba kembali 500 (Internal Server Error), karena token permintaan adalah token sekali pakai, upaya berikutnya untuk menggunakannya mungkin mengakibatkan kode status HTTP 400 (Bad Request) tanggapan. Meskipun panggilan ke 0 dengan rute dan permintaan token tidak perlu dibuat dari fungsi Lambda yang dipanggil, itu harus dibuat dengan identitas di akun yang sama. Panggilan juga harus diselesaikan sebelum fungsi Lambda selesai dieksekusi.Bekerja denganpackage com.amazon.s3.objectlambda; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.S3ObjectLambdaEvent; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.WriteGetObjectResponseRequest; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.awt.Image; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Example2 { private static final int HEIGHT = 250; private static final int WIDTH = 250; public void handleRequest(S3ObjectLambdaEvent event, Context context) throws Exception { AmazonS3 s3Client = AmazonS3Client.builder().build(); HttpClient httpClient = HttpClient.newBuilder().build(); // Prepare the presigned URL for use and make the request to S3. var presignedResponse = httpClient.send( HttpRequest.newBuilder(new URI(event.inputS3Url())).GET().build(), HttpResponse.BodyHandlers.ofInputStream()); // The entire image is loaded into memory here so that we can resize it. // Once the resizing is completed, we write the bytes into the body // of the WriteGetObjectResponse request. var originalImage = ImageIO.read(presignedResponse.body()); var resizingImage = originalImage.getScaledInstance(WIDTH, HEIGHT, Image.SCALE_DEFAULT); var resizedImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); resizedImage.createGraphics().drawImage(resizingImage, 0, 0, WIDTH, HEIGHT, null); var baos = new ByteArrayOutputStream(); ImageIO.write(resizedImage, "png", baos); // Stream the bytes back to the caller. s3Client.writeGetObjectResponse(new WriteGetObjectResponseRequest() .withRequestRoute(event.outputRoute()) .withRequestToken(event.outputToken()) .withInputStream(new ByteArrayInputStream(baos.toByteArray()))); } }5 permintaan di LambdaBagian ini mengasumsikan bahwa jalur akses Object Lambda Anda dikonfigurasi untuk memanggil fungsi Lambda 5. Lambda akan menerima payload JSON yang berisi kunci yang disebut 7. Di dalam konteks, ada satu properti yang disebut 8, yang merupakan URL presigned untuk titik akses pendukung untuk 5.URL presigned akan mencakup properti berikut jika mereka ditentukan:
Properti lainnya tidak akan ditandatangani sebelumnya, dan karenanya tidak akan disertakan. Opsi yang tidak ditandatangani yang dikirim sebagai header dapat ditambahkan secara manual ke permintaan saat memanggil URL yang telah ditandatangani sebelumnya yang ditemukan di 5 header. Opsi enkripsi sisi server tidak didukung untuk 5.Untuk parameter URI sintaks permintaan, lihat 5di Amazon Simple Storage Service API Reference.Contoh berikut menunjukkan muatan masukan Lambda JSON untuk 5.
Fungsi Lambda Anda harus mengembalikan objek JSON yang berisi header dan nilai yang akan dikembalikan untuk 5 panggilan tersebut.Contoh berikut menunjukkan struktur respon Lambda untuk 5. 0Contoh berikut menunjukkan cara menggunakan URL yang telah ditandatangani sebelumnya untuk memanggil Amazon S3 dan menggunakan hasilnya untuk mengisi respons, termasuk pemeriksaan kesalahan. Apa fungsi lambda pada python?Intinya, lambda digunakan untuk membuat fungsi dalam satu baris ekspresi. Lambda bisa memiliki lebih dari satu argumen atau parameter, tapi hanya bisa memiliki satu ekspresi atau isi. Karena fungsi lambda tidak punya nama, jadi kita butuh variabel untuk menyimpannya.
Apa fungsi def di python?3. Sintaks Fungsi
Penggunaan fungsi dalam python memiliki sintaks umum sebagai pedoman. Secara umum sintaks fungsi terdiri menjadi beberapa bagian berikut: kata kunci def, sebagai tanda bahwa blok kode program tersebut merupakan fungsi. nama fungsi, nama fungsi yang dibuat oleh programmer.
Apakah yang dimaksud dengan lambda atau anonymous function?Lambda expressions dan anonymous function adalah fungsi yang tidak perlu diklarasikan tetapi dapat langsung digunakan sebagai sebuah ekspresi.
|