Lapisan memungkinkan Anda menerbitkan dan menyebarkan sumber daya kustom seperti dependensi umum, runtime, dan ekstensi fungsi. Anda dapat mengabstraksi pustaka publik yang digunakan oleh fungsi ke dalam lapisan atau menggunakan lapisan umum Function Compute untuk mengurangi ukuran paket kode saat menyebarkan atau memperbarui fungsi. Topik ini menjelaskan catatan penggunaan lapisan di berbagai runtime, cara kerja lapisan, cara membuat paket ZIP untuk lapisan, serta cara membuat dan menghapus lapisan kustom.
Catatan Penggunaan
Saat membuat lapisan, Anda perlu mengemas konten ke dalam file ZIP. Runtime dari Function Compute mengekstrak dan menyebarkan konten lapisan ke direktori /opt.
Jika beberapa lapisan dikonfigurasikan untuk sebuah fungsi, konten lapisan tersebut digabungkan dan disimpan di direktori /opt dalam urutan terbalik. Jika beberapa lapisan berisi file dengan nama yang sama, file di lapisan atas akan menimpa file dengan nama yang sama di lapisan bawah.
Jika kode di lapisan bergantung pada pustaka biner atau file yang dapat dieksekusi, Anda harus menggunakan sistem Linux untuk mengompilasi dan membangun lapisan. Debian 9 direkomendasikan.
Jika pustaka dependensi di lapisan bergantung pada set instruksi, Anda harus menggunakan mesin dengan arsitektur AMD 64 atau melakukan kompilasi silang untuk memastikan bahwa pustaka dependensi kompatibel dengan runtime di Function Compute.
Catatan penggunaan lapisan di berbagai runtime
Untuk runtime yang mendukung lapisan, Function Compute menambahkan direktori tertentu ke direktori pencarian dependensi untuk runtime. Tabel berikut menjelaskan direktori-direktori tersebut. Jika struktur folder yang sama didefinisikan dalam paket ZIP lapisan, kode fungsi dapat mengakses lapisan tanpa menentukan jalur.
Directories that can be added in each runtime
Runtime | Direktori |
Python | /opt/python |
Node.js | /opt/nodejs/node_modules |
Java | /opt/java/lib |
PHP | /opt/php |
Runtime lainnya (tidak termasuk runtime kustom dan runtime Custom Container) | /opt/bin (PATH) |
/opt/lib (LD_LIBRARY_PATH) |
File structures of the ZIP packages in each runtime
Struktur file setelah dependensi requests digunakan untuk pengemasan
my-layer-code.zip
└── python
└── requests
Jalur setelah paket ZIP diekstraksi dan disebarkan
/
└── opt
└── python
└── requestsStruktur file setelah dependensi uuid digunakan untuk pengemasan
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Jalur setelah paket ZIP diekstraksi dan disebarkan
/
└── opt
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.jsonStruktur file setelah dependensi jackson-core digunakan untuk pengemasan
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Jalur setelah paket ZIP diekstraksi dan disebarkan
/
└── opt
└── java
└── lib
└── commons-lang3-3.12.0.jarStruktur file setelah dependensi composer digunakan untuk pengemasan
my-layer-code.zip
└── php
├──composer.json
├──composer.lock
└──vendor
Jalur setelah file ZIP diekstraksi dan disebarkan
/
└── opt
└── php
├──composer.json
├──composer.lock
└──vendorBuat paket ZIP untuk lapisan
Saat membuat lapisan, Anda perlu mengemas konten ke dalam file ZIP. Runtime dari Function Compute mengekstrak dan menyebarkan konten lapisan ke direktori /opt.
Metode untuk membangun file .zip lapisan serupa dengan metode untuk membangun paket kode. Untuk memastikan bahwa runtime fungsi dapat memuat pustaka lapisan sesuai harapan, direktori kode pustaka lapisan harus mematuhi aturan pengemasan standar untuk setiap bahasa. Untuk informasi lebih lanjut, lihat Catatan penggunaan lapisan di berbagai runtime. Untuk pustaka dependensi fungsi pada lapisan, jika Anda mengemas pustaka berdasarkan aturan pengemasan standar, runtime Function Compute secara otomatis menambahkan jalur pencarian pustaka fungsi untuk berbagai bahasa, dan Anda tidak perlu menentukan jalur lengkap. Jika Anda ingin menyesuaikan struktur direktori lapisan, Anda harus secara eksplisit menambahkan jalur pencarian pustaka dependensi ke kode. Untuk informasi lebih lanjut, lihat Bagaimana cara saya merujuk dependensi di lapisan dalam runtime kustom.
Bagian ini menjelaskan cara membangun paket ZIP lapisan di setiap runtime.
Saat membangun lapisan pada mesin lokal, bahasa pemrograman yang Anda gunakan harus sama dengan bahasa pemrograman runtime di Function Compute.
Direktori kerja my-layer-code yang dibuat di bagian ini hanya contoh. Ganti dengan direktori aktual.
Python runtime
Saat membangun lapisan pada mesin lokal, versi Python yang Anda gunakan harus sama dengan versi runtime Python di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-codePergi ke direktori kerja yang telah dibuat.
cd my-layer-codeJalankan perintah berikut untuk menginstal pustaka dependensi di my-layer-code/python:
pip install --target ./python ${PackageName}${PackageName} menunjukkan nama pustaka dependensi yang ingin Anda instal. Untuk informasi lebih lanjut tentang perintah
pip install, lihat pip install.Kode contoh:
pip install --target ./python numpySetelah dependensi diinstal, periksa apakah struktur direktori Anda sesuai dengan struktur berikut:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libsJalankan perintah berikut di direktori my-layer-code untuk mengemas dependensi:
zip -r my-layer-code.zip python
Node.js runtime
Saat membangun lapisan pada mesin lokal, versi Node.js yang Anda gunakan harus sama dengan versi runtime Node.js di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-codePergi ke direktori kerja yang telah dibuat.
cd my-layer-codeJalankan perintah berikut untuk menginstal pustaka dependensi di my-layer-code/nodejs:
npm install --prefix ./nodejs --save ${PackageName}${PackageName}menunjukkan nama pustaka dependensi yang ingin Anda instal. Untuk informasi lebih lanjut tentang perintahnpm install, lihat npm-install.Kode contoh:
npm install --prefix ./nodejs --save uuidSetelah dependensi diinstal, periksa apakah struktur direktori Anda sesuai dengan struktur berikut:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.jsonJalankan perintah berikut di my-layer-code untuk mengemas dependensi:
zip -r my-layer-code.zip nodejs
Java runtime
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-code/javaPergi ke direktori kerja yang telah dibuat.
cd my-layer-code/javaInstal dependensi menggunakan Maven.
Buat file pom.xml di direktori my-layer-code/java.
Contoh:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>maven.util</groupId> <artifactId>install-layer</artifactId> <version>1.0</version> <!-- Dependensi Maven untuk diunduh --> <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies> <build> <plugins> <!-- Plugin unduhan terkait Maven --> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- Tentukan apakah akan mengecualikan dependensi tidak langsung. Nilai default: false. --> <excludeTransitive>false</excludeTransitive> <!-- Tentukan apakah akan menghapus informasi versi di akhir nama paket JAR dependensi. Nilai default: false. --> <stripVersion>false</stripVersion> <!-- Jalur file keluaran--> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project>Deskripsi
Paket dependensi untuk diinstal adalah
org.apache.commons.lang3.Gunakan
maven-dependency-pluginuntuk menyalin paket dependensi ke direktori /java/lib.
Jalankan perintah berikut di direktori my-layer-code/java untuk menginstal dependensi:
mvn dependency:copy-dependencies
Setelah dependensi diinstal, periksa apakah struktur direktori Anda sesuai dengan struktur berikut:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jarJalankan perintah berikut di direktori my-layer-code untuk mengemas dependensi:
zip -r my-layer-code.zip java
PHP runtime
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir -p my-layer-code/phpPergi ke direktori kerja yang telah dibuat.
cd my-layer-code/php(Direkomendasikan) Gunakan Composer untuk menginstal dependensi.
Di direktori my-layer-code/php, buat file composer.json.
Contoh:
{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } }Instal dependensi.
composer install
Setelah dependensi diinstal, periksa apakah struktur direktori Anda sesuai dengan struktur berikut:
my-layer-code └─php ├──composer.json ├──composer.lock └──vendorJalankan perintah berikut di direktori my-layer-code untuk mengemas dependensi:
zip -r my-layer-code.zip php
Buat lapisan kustom
Buat lapisan kustom di konsol Function Compute
Prasyarat
Fungsi telah dibuat. Untuk informasi lebih lanjut, lihat Buat Fungsi.
Prosedur
Untuk informasi lebih lanjut tentang cara membangun paket ZIP lapisan, lihat Bangun Paket ZIP untuk Lapisan.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Layers, klik Create Layer.
Di halaman Create Layer, tentukan parameter terkait dan klik Create.
Parameter
Deskripsi
Name
Masukkan nama untuk lapisan yang ingin Anda buat.
Description
Masukkan deskripsi lapisan. Deskripsi lapisan dapat digunakan untuk membedakan lapisan.
Compatible Runtime
Pilih runtime yang kompatibel.
Layer Upload Method
Pilih metode untuk mengunggah dependensi lapisan. Anda dapat menggunakan salah satu metode berikut untuk mengunggah dependensi lapisan:
Upload Layer in ZIP Package: Pilih file ZIP lapisan.
Upload Layer in Folder: Pilih folder tempat file ZIP lapisan berada.
Upload Layer Using OSS: Pilih file ZIP lapisan dengan menentukan parameter Bucket Name dan Object Name.
Build Dependency Layer Online: Tentukan Build Environment dan unggah file dependensi
package.jsonataurequirements.txtlapisan.CatatanHanya runtime Python dan Node.js yang mendukung pembuatan lapisan dependensi secara online. Batas waktu untuk mengunggah paket dependensi adalah 15 menit dan batas ukuran paket dependensi adalah 500 MB.
Setelah lapisan dibuat, sistem menghasilkan versi lapisan. Nomor versi dimulai dari 1.
Buat versi baru.
Catatan Anda tidak dapat memodifikasi lapisan yang telah dibuat atau versi lapisan yang telah dibuat. Jika Anda ingin memperbarui konfigurasi lapisan, Anda dapat membuat lapisan baru atau versi baru. Jika versi lapisan yang dirujuk dihapus, referensi tersebut harus dihapus sebelum Anda memperbarui konfigurasi lapisan.Di halaman Layers, temukan lapisan yang ingin Anda kelola dan klik nama lapisan atau klik Versions di kolom Actions.
Di bagian Versions pada halaman yang muncul, klik Create Version.
Di halaman pembuatan versi lapisan, pilih runtime, unggah kode lapisan baru, lalu klik Create.
Buat lapisan kustom menggunakan Serverless Devs
Prasyarat
Prosedur
Untuk informasi lebih lanjut tentang cara membangun paket ZIP lapisan, lihat Bangun Paket ZIP untuk Lapisan.
Jalankan perintah berikut untuk membuat lapisan:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,Java11,custom --region cn-hangzhou --layer-name my-layerDeskripsi:
--code: menentukan jalur paket kode.--compatible-runtime: menentukan runtime yang kompatibel dengan lapisan.--layer-name: menentukan nama lapisan.
Setelah lapisan dibuat, pesan sukses akan ditampilkan dan ARN lapisan dikembalikan. ARN terdiri dari tiga bagian, yang dipisahkan oleh
#. Bagian pertama adalah pengenal ID akun, bagian kedua adalah nama lapisan, dan bagian ketiga adalah versi lapisan. Gambar berikut menunjukkan contohnya. Anda dapat masuk ke Function Compute console untuk melihat informasi tentang lapisan yang telah dibuat.
Ulangi perintah berikut untuk membuat versi baru untuk lapisan yang telah dibuat:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerCatatan Anda tidak dapat memodifikasi lapisan yang telah dibuat atau versi lapisan yang telah dibuat. Jika Anda ingin memperbarui konfigurasi lapisan, Anda dapat membuat lapisan baru atau versi baru. Jika versi lapisan yang dirujuk dihapus, referensi tersebut harus dihapus sebelum Anda memperbarui konfigurasi lapisan.
Hapus lapisan dan versi lapisan
Anda dapat menghapus lapisan atau versinya yang tidak lagi digunakan sesuai dengan kebutuhan bisnis Anda. Lapisan yang dihapus tidak dapat dilihat atau dirujuk lagi oleh konfigurasi fungsi. Namun, eksekusi fungsi yang dikonfigurasi untuk merujuk lapisan tersebut tidak terpengaruh.
Masuk ke Konsol Function Compute.
Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah.
Di halaman Layers, hapus lapisan atau versi lapisan sesuai dengan kebutuhan bisnis Anda.
Hapus Lapisan
Temukan lapisan yang ingin Anda hapus dan klik Delete di kolom Actions. Di kotak dialog yang muncul, pilih Saya ingin menghapus semua N versi di lapisan ini, lalu klik Delete.
Hapus Versi Lapisan
Klik nama lapisan yang versinya ingin Anda hapus. Di bagian Versions pada halaman detail lapisan, temukan versi lapisan yang ingin Anda hapus dan klik Delete di kolom Actions. Di pesan Confirm yang muncul, klik Delete.
Referensi
Anda dapat menggunakan parameter
layersuntuk mengonfigurasi lapisan saat membuat dan memperbarui fungsi. Untuk informasi lebih lanjut, lihat CreateFunction dan UpdateFunction.Untuk informasi lebih lanjut tentang cara menggunakan lapisan kustom dalam fungsi, lihat Kelola Lapisan dan Konfigurasikan Lapisan Publik untuk Fungsi.