Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Deploy fungsi Java Lambda dengan arsip file .zip atau JAR
Kode AWS Lambda fungsi Anda terdiri dari skrip atau program yang dikompilasi dan dependensinya. Gunakan paket deployment untuk men-deploy fungsi kode Anda ke Lambda. Lambda mendukung dua tipe paket deployment: gambar kontainer dan arsip file .zip.
Halaman ini menjelaskan cara membuat paket penerapan Anda sebagai file.zip atau file Jar, lalu gunakan paket penerapan untuk menerapkan kode fungsi Anda AWS Lambda menggunakan AWS Command Line Interface (AWS CLI).
penting
Java 25 memperkenalkan dukungan untuk cache Ahead-of-Time (AOT). Kami sangat menyarankan untuk tidak menggunakan cache AOT saat menerapkan fungsi Anda sebagai arsip file.zip atau JAR, karena cache dapat menyebabkan perilaku tak terduga saat Lambda memperbarui runtime terkelola. Untuk informasi lebih lanjut, lihatAhead-of-Time (AOT) dan cache CDS.
Bagian-bagian
Prasyarat
Ini AWS CLI adalah alat sumber terbuka yang dapat Anda gunakan untuk berinteraksi dengan AWS layanan menggunakan perintah di shell baris perintah Anda. Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki AWS CLI versi 2.
Alat dan pustaka
AWS menyediakan pustaka berikut untuk fungsi Java. Pustaka ini tersedia melalui repositori pusat Maven
-
com.amazonaws:aws-lambda-java-core
(wajib) – Menentukan antarmuka metode handler dan objek konteks yang dilalui oleh runtime ke handler. Jika Anda menentukan jenis input Anda sendiri, ini adalah satu-satunya pustaka yang Anda butuhkan. -
com.amazonaws:aws-lambda-java-events
– Jenis input untuk peristiwa dari layanan yang mengaktifkan fungsi Lambda. -
com.amazonaws:aws-lambda-java-log4j2
– Pustaka appender untuk Apache Log4j 2 yang dapat Anda gunakan untuk menambahkan ID permintaan untuk invokasi saat ini ke log fungsi. -
AWS SDK untuk Java 2.0
— AWS SDK resmi untuk bahasa pemrograman Java. -
AWS Lambda Durable Execution SDK untuk Java
— Buat aplikasi multi-langkah dan alur kerja AI yang andal yang memeriksa kemajuan pos, secara otomatis pulih dari kegagalan, dan menjeda eksekusi. Untuk informasi selengkapnya, lihat Fungsi tahan lama Lambda.
Tambahkan pustaka ini ke definisi build Anda sebagai berikut:
Untuk membuat paket deployment, kompilasikan kode fungsi dan dependensi Anda menjadi file .zip atau Java Archive (JAR). Untuk Gradle, gunakan tipe build Zip. Untuk Apache Maven, gunakan plugin Maven Shade. Untuk mengunggah paket penerapan Anda, gunakan konsol Lambda, API Lambda, atau AWS Serverless Application Model ()AWS SAM.
catatan
Agar ukuran paket deployment Anda tetap kecil, kemas dependensi fungsi Anda dalam lapisan. Lapisan memungkinkan Anda mengelola dependensi secara mandiri, dapat digunakan oleh beberapa fungsi, dan dapat dibagikan ke akun lain. Untuk informasi selengkapnya, lihat Mengelola dependensi Lambda dengan lapisan.
Membangun paket deployment dengan Gradle
Untuk membuat paket penerapan dengan kode fungsi dan dependensi Anda di Gradle, gunakan tipe Zip build. Berikut contoh dari file build.gradle sampel lengkap:
contoh build.gradle – Membangun tugas
task buildZip(type: Zip) { into('lib') { from(jar) from(configurations.runtimeClasspath) } }
Konfigurasi bangunan ini menghasilkan paket deployment di direktori build/distributions. Dalam into('lib') pernyataan, jar tugas mengumpulkan arsip jar yang berisi kelas utama Anda ke dalam folder bernamalib. Selain itu, configurations.runtimeClassPath tugas menyalin pustaka dependensi dari classpath build ke folder yang samalib.
contoh build.gradle – Dependensi
dependencies { ...implementation 'com.amazonaws:aws-lambda-java-core:1.2.2' implementation 'com.amazonaws:aws-lambda-java-events:3.11.1'implementation 'org.apache.logging.log4j:log4j-api:2.17.1' implementation 'org.apache.logging.log4j:log4j-core:2.17.1' runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:2.17.1'runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.5.1'... }
Lambda memuat file JAR dalam urutan alfabet Unicode. Jika beberapa file JAR ada di direktori lib berisi kelas yang sama, yang pertama digunakan. Anda dapat menggunakan skrip shell berikut untuk mengidentifikasi kelas duplikat:
contoh test-zip.sh
mkdir -p expanded unzip path/to/my/function.zip -d expanded find ./expanded/lib -name '*.jar' | xargs -n1 zipinfo -1 | grep '.*.class' | sort | uniq -c | sort
Menggunakan lapisan untuk dependensi
Anda dapat mengemas dependensi fungsi Anda dalam lapisan untuk menjaga paket penerapan Anda tetap kecil dan mengelola dependensi secara independen. Untuk informasi selengkapnya, lihat Bekerja dengan lapisan untuk fungsi Java Lambda.
Membangun paket deployment dengan Maven
Untuk membangun paket deployment dengan Maven, gunakan Plugin Maven Shade
contoh pom.xml – Konfigurasi plugin
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.2</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
Untuk membuat paket deployment, gunakan perintah mvn package.
[INFO] Scanning for projects... [INFO] -----------------------< com.example:java-maven >----------------------- [INFO] Building java-maven-function 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- ... [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ java-maven --- [INFO] Building jar: target/java-maven-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-shade-plugin:3.2.2:shade (default) @ java-maven --- [INFO] Including com.amazonaws:aws-lambda-java-core:jar:1.2.2 in the shaded jar. [INFO] Including com.amazonaws:aws-lambda-java-events:jar:3.11.1 in the shaded jar. [INFO] Including joda-time:joda-time:jar:2.6 in the shaded jar. [INFO] Including com.google.code.gson:gson:jar:2.8.6 in the shaded jar. [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing target/java-maven-1.0-SNAPSHOT.jar with target/java-maven-1.0-SNAPSHOT-shaded.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.321 s [INFO] Finished at: 2020-03-03T09:07:19Z [INFO] ------------------------------------------------------------------------
Perintah ini menghasilkan file JAR dalam direktori target.
catatan
Jika Anda bekerja dengan JAR multi-rilis (MRJAR)lib direktori dan zip sebelum mengunggah paket penerapan Anda ke Lambda. Jika tidak, Lambda mungkin tidak membongkar file JAR Anda dengan benar, menyebabkan MANIFEST.MF file Anda diabaikan.
Jika Anda menggunakan pustaka appender (aws-lambda-java-log4j2), Anda juga harus mengonfigurasi trafo untuk plugin Maven Shade. Pustaka trafo menggabungkan versi file cache yang muncul di pustaka appender dan Log4j.
contoh pom.xml – Konfigurasi plugin dengan appender Log4j 2
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.2</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer"> </transformer> </transformers> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>com.github.edwgiz</groupId> <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId> <version>2.13.0</version> </dependency> </dependencies> </plugin>
Mengunggah paket penerapan dengan konsol Lambda
Untuk membuat fungsi baru, Anda harus terlebih dahulu membuat fungsi di konsol, lalu mengunggah file.zip atau JAR Anda. Untuk memperbarui fungsi yang ada, buka halaman untuk fungsi Anda, lalu ikuti prosedur yang sama untuk menambahkan file.zip atau JAR yang diperbarui.
Jika file paket penerapan Anda kurang dari 50MB, Anda dapat membuat atau memperbarui fungsi dengan mengunggah file langsung dari mesin lokal Anda. Untuk file.zip atau JAR yang lebih besar dari 50MB, Anda harus mengunggah paket Anda ke bucket Amazon S3 terlebih dahulu. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan Konsol Manajemen AWS, lihat Memulai dengan Amazon S3. Untuk mengunggah file menggunakan AWS CLI, lihat Memindahkan objek di Panduan AWS CLI Pengguna.
catatan
Anda tidak dapat mengubah jenis paket penerapan (.zip atau image container) untuk fungsi yang ada. Misalnya, Anda tidak dapat mengonversi fungsi gambar kontainer untuk menggunakan arsip berkas.zip. Anda harus membuat fungsi baru.
Untuk membuat fungsi baru (konsol)
-
Buka halaman Functions pada
konsol Lambda dan pilih Create Func tion. -
Pilih Tulis dari awal.
-
Di bagian Informasi dasar, lakukan hal berikut:
-
Untuk Nama fungsi, masukkan nama untuk fungsi Anda.
-
Untuk Runtime, pilih runtime yang ingin Anda gunakan.
-
(Opsional) Untuk Ar sitektur, pilih arsitektur set instruksi untuk fungsi Anda. Arsitektur default adalah x86_64. Pastikan paket penerapan.zip untuk fungsi Anda kompatibel dengan arsitektur set instruksi yang Anda pilih.
-
-
(Opsional) Di bagian Izin, luaskan Ubah peran eksekusi default. Anda dapat membuat peran Ek sekusi baru atau menggunakan yang sudah ada.
-
Pilih Buat fungsi. Lambda membuat fungsi dasar 'Hello world' menggunakan runtime pilihan Anda.
Untuk mengunggah arsip.zip atau JAR dari mesin lokal Anda (konsol)
-
Di halaman Functions
pada konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip atau JAR. -
Pilih tab Kode.
-
Di panel sumber kode, pilih Unggah dari.
-
Pilih file.zip atau .jar.
-
Untuk mengunggah file.zip atau JAR, lakukan hal berikut:
-
Pilih Unggah, lalu pilih file.zip atau JAR Anda di pemilih file.
-
Pilih Buka.
-
Pilih Simpan.
-
Untuk mengunggah arsip.zip atau JAR dari bucket Amazon S3 (konsol)
-
Di halaman Functions
pada konsol Lambda, pilih fungsi yang ingin Anda unggah file.zip atau JAR baru. -
Pilih tab Kode.
-
Di panel sumber kode, pilih Unggah dari.
-
Pilih lokasi Amazon S3.
-
Rekatkan URL tautan Amazon S3 dari file.zip Anda dan pilih S impan.
Mengunggah paket penerapan dengan AWS CLI
Anda dapat menggunakan AWS CLI untuk membuat fungsi baru atau memperbarui yang sudah ada menggunakan file.zip atau JAR. Gunakan perintah create-function dan update-function-code untuk menyebarkan paket.zip atau JAR Anda. Jika file Anda lebih kecil dari 50MB, Anda dapat mengunggah paket dari lokasi file di mesin build lokal Anda. Untuk file yang lebih besar, Anda harus mengunggah paket.zip atau JAR Anda dari bucket Amazon S3. Untuk petunjuk tentang cara mengunggah file ke bucket Amazon S3 menggunakan AWS CLI, lihat Mem indahkan objek di Panduan AWS CLI Pengguna.
catatan
Jika Anda mengunggah file.zip atau JAR Anda dari bucket Amazon S3 menggunakan AWS CLI, bucket harus ditempatkan di tempat yang Wilayah AWS sama dengan fungsi Anda.
Untuk membuat fungsi baru menggunakan file.zip atau JAR dengan AWS CLI, Anda harus menentukan yang berikut:
-
Nama fungsi Anda (
--function-name) -
runtime fungsi Anda (
--runtime) -
Nama Sumber Daya Amazon (ARN) dari peran eksekusi fungsi Anda (
--role) -
Nama metode handler dalam kode fungsi Anda (
--handler)
Anda juga harus menentukan lokasi file.zip atau JAR Anda. Jika file.zip atau JAR Anda terletak di folder pada mesin build lokal Anda, gunakan --zip-file opsi untuk menentukan jalur file, seperti yang ditunjukkan pada contoh perintah berikut.
aws lambda create-function --function-name myFunction \ --runtime java25 --handler example.handler \ --role arn:aws:iam::123456789012:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip
Untuk menentukan lokasi file.zip dalam bucket Amazon S3, gunakan --code opsi seperti yang ditunjukkan pada contoh perintah berikut. Anda hanya perlu menggunakan S3ObjectVersion parameter untuk objek berversi.
aws lambda create-function --function-name myFunction \ --runtime java25 --handler example.handler \ --role arn:aws:iam::123456789012:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
Untuk memperbarui fungsi yang ada menggunakan CLI, Anda menentukan nama fungsi Anda menggunakan --function-name parameter. Anda juga harus menentukan lokasi file.zip yang ingin Anda gunakan untuk memperbarui kode fungsi Anda. Jika file.zip Anda terletak di folder pada mesin build lokal Anda, gunakan --zip-file opsi untuk menentukan jalur file, seperti yang ditunjukkan pada contoh perintah berikut.
aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip
Untuk menentukan lokasi file.zip dalam bucket Amazon S3, gunakan --s3-key opsi --s3-bucket dan seperti yang ditunjukkan pada perintah contoh berikut. Anda hanya perlu menggunakan --s3-object-version parameter untuk objek berversi.
aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
Mengunggah paket penerapan dengan AWS SAM
Anda dapat menggunakan AWS SAM untuk mengotomatiskan penerapan kode fungsi, konfigurasi, dan dependensi Anda. AWS SAM adalah ekstensi CloudFormation yang menyediakan sintaks yang disederhanakan untuk mendefinisikan aplikasi tanpa server. Templat contoh berikut mendefinisikan fungsi dengan paket deployment dalam direktori build/distributions yang digunakan Gradle:
contoh template.yml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: An AWS Lambda application that calls the Lambda API. Resources: function: Type: AWS::Serverless::Function Properties:CodeUri: build/distributions/java-basic.zipHandler: example.Handler Runtime: java25 Description: Java function MemorySize: 512 Timeout: 10 # Function's execution role Policies: - AWSLambdaBasicExecutionRole - AWSLambda_ReadOnlyAccess - AWSXrayWriteOnlyAccess - AWSLambdaVPCAccessExecutionRole Tracing: Active
Untuk membuat fungsi, gunakan perintah package dan deploy. Perintah ini adalah kustomisasi ke AWS CLI. Mereka membungkus perintah lain untuk mengunggah paket deployment ke Amazon S3, menulis ulang templat dengan objek URI, dan memperbarui kode fungsi.
Skrip contoh berikut menjalankan pembuatan Gradle dan mengunggah paket deployment yang dibuatnya. Ini membuat CloudFormation tumpukan saat pertama kali Anda menjalankannya. Jika tumpukan sudah ada, skrip akan memperbaruinya.
contoh deploy.sh
#!/bin/bash set -eo pipefail aws cloudformation package --template-file template.yml --s3-bucket MY_BUCKET --output-template-file out.yml aws cloudformation deploy --template-file out.yml --stack-name java-basic --capabilities CAPABILITY_NAMED_IAM
Untuk contoh kerja lengkap, lihat aplikasi sampel berikut:
Sampel aplikasi Lambda di Java
-
example-java
— Fungsi Java yang menunjukkan bagaimana Anda dapat menggunakan Lambda untuk memproses pesanan. Fungsi ini menggambarkan cara mendefinisikan dan mendeserialisasi objek peristiwa input kustom, menggunakan AWS SDK, dan logging keluaran. -
java-basic
— Kumpulan fungsi Java minimal dengan pengujian unit dan konfigurasi logging variabel. -
java-events
— Kumpulan fungsi Java yang berisi kode kerangka untuk cara menangani peristiwa dari berbagai layanan seperti Amazon API Gateway, Amazon SQS, dan Amazon Kinesis. Fungsi-fungsi ini menggunakan versi terbaru dari pustaka aws-lambda-java-events (3.0.0 dan yang lebih baru). Contoh-contoh ini tidak memerlukan AWS SDK sebagai ketergantungan. -
s3-java
– Fungsi Java yang memproses kejadian pemberitahuan dari Amazon S3 dan menggunakan Java Class Library (JCL) untuk membuat thumbnail dari file gambar yang diunggah. -
layer-java
- Fungsi Java yang menggambarkan cara menggunakan lapisan Lambda untuk mengemas dependensi terpisah dari kode fungsi inti Anda.