Lapisan menyediakan pustaka dependensi bersama, lingkungan runtime, dan ekstensi fungsi untuk fungsi Anda. Anda dapat mengekstrak pustaka umum yang menjadi dependensi fungsi ke dalam lapisan atau menggunakan lapisan publik Function Compute untuk mengurangi ukuran paket kode saat menerapkan atau memperbarui fungsi. Topik ini menjelaskan cara kerja lapisan, direktori yang didukung setiap runtime, cara membuat file ZIP lapisan, serta cara membuat dan menghapus lapisan kustom.
Cara kerja
Saat membuat lapisan, kemas seluruh isinya ke dalam file ZIP. Saat runtime, Function Compute mengekstrak konten lapisan dan menerapkannya ke direktori /opt. Jika Anda mengonfigurasi beberapa lapisan untuk suatu fungsi, konten lapisan digabungkan ke dalam /opt dalam urutan terbalik dari konfigurasi lapisan tersebut. Jika suatu file di satu lapisan memiliki nama yang sama dengan file di lapisan lain, file pada lapisan yang dikonfigurasi lebih dulu akan menimpa file pada lapisan yang dikonfigurasi kemudian.
Sebagai contoh, jika Anda mengonfigurasi Lapisan 1 dan Lapisan 2 untuk suatu fungsi, instans fungsi akan memuat Lapisan 2 terlebih dahulu lalu Lapisan 1 saat dimulai, serta mengekstrak kedua lapisan tersebut ke direktori /opt. Di /opt, konten Lapisan 1 muncul lebih dulu dan konten Lapisan 2 muncul setelahnya. Jika Lapisan 1 dan Lapisan 2 berisi file dengan nama yang sama, file di Lapisan 1 akan menimpa file di Lapisan 2.
Persyaratan pembuatan:
-
Jika lapisan berisi pustaka biner atau executable, buatlah di Linux (disarankan Debian 9).
-
Function Compute berjalan di x86_64. Untuk dependensi yang bergantung pada instruction set, gunakan mesin x86_64 atau lakukan cross-compile untuk memastikan kompatibilitas.
Direktori yang didukung berdasarkan runtime
Jika suatu runtime mendukung lapisan, Function Compute menambahkan direktori berikut ke jalur pencarian dependensi bahasa runtime tersebut. Susun paket ZIP lapisan Anda agar sesuai dengan jalur ini sehingga kode fungsi dapat mengakses konten lapisan tanpa perlu menentukan jalur eksplisit. Untuk detail cara membuat file ZIP lapisan, lihat Buat file ZIP lapisan.
| Runtime | Jalur direktori |
| Python | /opt/python |
| Node.js | /opt/nodejs/node_modules |
| Java | /opt/java/lib |
| PHP | /opt/php |
| Runtime lain (tidak termasuk custom runtime dan custom container runtime) | /opt/bin (PATH), /opt/lib (LD_LIBRARY_PATH) |
| Custom runtime dan custom container runtime | Tidak ada |
Jika Anda menggunakan struktur direktori kustom, tambahkan secara eksplisit jalur pencarian dependensi dalam kode fungsi Anda. Untuk detailnya, lihat Cara mereferensikan dependensi dalam lapisan pada custom runtime.
Struktur file ZIP lapisan
Contoh berikut menunjukkan struktur file ZIP yang diperlukan dan jalur penerapan yang sesuai untuk setiap runtime.
Python — pengemasan dengan dependensi requests:
my-layer-code.zip
└── python
└── requests
Diekstrak ke:
/opt/python/requests
Node.js — pengemasan dengan dependensi uuid:
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Diekstrak ke:
/opt/nodejs/node_modules/uuid
Java — pengemasan dengan dependensi commons-lang3:
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Diekstrak ke:
/opt/java/lib/commons-lang3-3.12.0.jar
PHP — pengemasan dengan dependensi Composer:
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Diekstrak ke:
/opt/php/vendor
Buat file ZIP lapisan
Membuat file ZIP lapisan mirip dengan membuat paket kode. Agar Function Compute dapat memuat pustaka yang dipublikasikan dalam lapisan secara benar saat runtime, struktur direktori kode pustaka harus mengikuti konvensi direktori standar masing-masing bahasa. Untuk detailnya, lihat Direktori yang didukung berdasarkan runtime. Jika Anda mengemas dependensi lapisan sesuai spesifikasi, Function Compute secara otomatis menambahkan jalur pencarian dependensi untuk setiap bahasa, sehingga Anda tidak perlu menentukan jalur lengkapnya.
Untuk membuat file ZIP lapisan untuk setiap runtime, lakukan langkah-langkah berikut:
-
Saat membuat lapisan secara lokal, gunakan versi bahasa pemrograman yang sama dengan versi runtime yang Anda pilih di Function Compute.
-
Direktori kerja
my-layer-codeyang dibuat dalam langkah-langkah berikut hanya sebagai contoh. Anda dapat mengganti nama direktori sesuai kebutuhan.
Runtime Python
Saat membuat lapisan secara lokal, gunakan versi Python yang sama dengan versi runtime Python yang Anda pilih di Function Compute.
-
Buat direktori kerja:
mkdir my-layer-code cd my-layer-code -
Instal dependensi ke subdirektori
python:pip install --target ./python ${PackageName}Untuk detail perintah
pip install, lihat pip install.Contoh dengan
numpy:pip install --target ./python numpySetelah instalasi, struktur direktorinya seperti berikut:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs -
Kemas dependensi dari direktori
my-layer-code:zip -r my-layer-code.zip python
Runtime Node.js
Saat membuat lapisan secara lokal, gunakan versi Node.js yang sama dengan versi runtime Node.js yang Anda pilih di Function Compute.
-
Buat direktori kerja:
mkdir my-layer-code cd my-layer-code -
Instal dependensi ke subdirektori
nodejs:npm install --prefix ./nodejs --save ${PackageName}${PackageName}adalah nama paket dependensi yang ingin Anda instal. Untuk detail perintahnpm install, lihat npm-install.Contoh dengan
uuid:npm install --prefix ./nodejs --save uuidSetelah instalasi, struktur direktorinya seperti berikut:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Kemas dependensi dari direktori
my-layer-code:zip -r my-layer-code.zip nodejs
Runtime Java
-
Buat direktori kerja:
mkdir my-layer-code/java cd my-layer-code/java -
Buat file
pom.xmlyang mendeklarasikan dependensi Anda. Contoh berikut menginstalcommons-lang3dan menyalinnya ke./libmenggunakanmaven-dependency-plugin:<?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> <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> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- Include transitive dependencies --> <excludeTransitive>false</excludeTransitive> <!-- Keep version suffixes in JAR file names --> <stripVersion>false</stripVersion> <!-- Output directory for downloaded JARs --> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project> -
Instal dependensi:
mvn dependency:copy-dependenciesSetelah instalasi, struktur direktorinya seperti berikut:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar -
Kemas dependensi dari direktori
my-layer-code:zip -r my-layer-code.zip java
Runtime PHP
-
Buat direktori kerja:
mkdir -p my-layer-code/php cd my-layer-code/php -
Buat file
composer.jsonyang mendeklarasikan dependensi Anda. Contoh:{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Instal dependensi:
composer installSetelah instalasi, struktur direktorinya seperti berikut:
my-layer-code └── php ├── composer.json ├── composer.lock └── vendor -
Kemas dependensi dari direktori
my-layer-code:zip -r my-layer-code.zip php
Buat lapisan kustom
Menggunakan Konsol
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Membuat fungsi Function Compute. Untuk detailnya, lihat Buat fungsi.
Langkah-langkah
-
Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Advanced Features > Layers.
-
Di bilah navigasi atas, pilih wilayah. Pada halaman Layers, klik Create Layer.
-
Konfigurasikan parameter berikut, lalu klik Create.
Parameter Deskripsi Name Masukkan nama untuk lapisan. Description Masukkan deskripsi untuk lapisan agar mudah membedakannya dari lapisan lain. Compatible Runtime Pilih runtime yang kompatibel dengan lapisan ini. Layer Upload Method Pilih cara mengunggah dependensi lapisan: Upload Layer in ZIP Package — unggah file .zip (maks. 500 MB); Upload Layer in Folder — pilih folder yang akan dikompres oleh Function Compute menjadi file .zip (maks. 500 MB); Upload Layer Using OSS — tentukan Bucket Name dan Object Name file .zip di Object Storage Service (OSS) (maks. 500 MB); Build Dependency Layer Online — jika fungsi Anda dikembangkan dalam Python atau Node.js, atau Anda perlu menginstal pustaka sistem ringan, Anda dapat membuat lapisan secara online. Masukkan konten file dependensi ( requirements.txtuntuk Python ataupackage.jsonuntuk Node.js) di kotak input di bawah. Setelah mengirim permintaan, Function Compute secara otomatis menginstal paket dependensi tingkat bahasa dan pustaka sistem, yang menyederhanakan manajemen dependensi lapisan.Build Environment Muncul saat Build Dependency Layer Online dipilih. Pilih runtime untuk membuat lapisan. Saat ini, hanya runtime Python dan Node.js yang didukung. apt command Muncul saat Build Dependency Layer Online dipilih. Masukkan nama paket setelah apt installuntuk menginstal paket sistem ke dalam lapisan.Setelah lapisan dibuat, versi lapisan akan dibuat secara otomatis. Nomor versi dimulai dari 1 dan bertambah setiap kali versi baru dibuat.
CatatanJika bucket OSS dienkripsi oleh Key Management Service (KMS), peran terkait layanan Function Compute (
AliyunServiceRoleForFC) mungkin tidak memiliki izin untuk mengakses objek terenkripsi, sehingga menyebabkan errorAccessDenied. Untuk mengatasinya, perbarui kebijakan kunci di Konsol KMS untuk memberikan akses kepada peranAliyunServiceRoleForFC. Untuk detailnya, lihat Modify a key policy. Setelah memperbarui kebijakan kunci, coba ulang pengunggahan lapisan untuk memverifikasi bahwa perubahan izin telah berlaku. -
Untuk menambahkan versi baru ke lapisan yang sudah ada:
CatatanAnda tidak dapat memodifikasi lapisan yang sudah ada atau versi-versinya. Untuk memperbarui lapisan, buat lapisan baru atau versi lapisan baru. Jika versi lapisan yang direferensikan dihapus, hapus referensi tersebut sebelum memperbarui konfigurasi lapisan.
-
Pada halaman Layers, klik nama lapisan target.
-
Di bagian Version Management, klik Create Version.
-
Pilih runtime, unggah kode lapisan baru, lalu klik Create.
-
Menggunakan Serverless Devs
Prasyarat
Sebelum memulai, pastikan Anda telah:
Langkah-langkah
-
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-layerTabel berikut menjelaskan parameter dalam perintah tersebut.
Parameter Deskripsi --codeJalur ke paket kode lapisan. --compatible-runtimeDaftar runtime kompatibel yang dipisahkan koma. --layer-nameNama lapisan. Setelah lapisan dibuat, perintah tersebut akan mengembalikan Nama Sumber Daya Alibaba Cloud (ARN) lapisan. ARN terdiri dari tiga bagian yang dipisahkan oleh tanda pagar (
#): identifikasi ID akun, nama lapisan, dan versi lapisan. Anda juga dapat login ke Konsol Function Compute untuk melihat informasi lapisan yang telah dibuat. -
Untuk menambahkan versi baru ke lapisan yang sudah ada, jalankan perintah yang sama dengan nama lapisan yang sama:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerCatatanAnda tidak dapat memodifikasi lapisan yang sudah ada atau versi-versinya. Untuk memperbarui lapisan, buat lapisan baru atau versi lapisan baru. Jika versi lapisan yang direferensikan dihapus, hapus referensi tersebut sebelum memperbarui konfigurasi lapisan.
Hapus lapisan atau versi lapisan
Anda dapat menghapus lapisan atau versi lapisan yang tidak lagi diperlukan. Lapisan yang dihapus tidak dapat dilihat atau direferensikan lagi dalam konfigurasi fungsi. Namun, eksekusi fungsi yang sudah mereferensikan lapisan yang dihapus tidak terpengaruh.
-
Login ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Advanced Features > Layers.
-
Di bilah navigasi atas, pilih wilayah.
-
Pada halaman Layers, hapus lapisan atau versi lapisan:
-
Hapus lapisan: Temukan lapisan target, klik Delete di kolom Actions, centang kotak konfirmasi, lalu klik Delete.
-
Hapus versi lapisan: Klik nama lapisan target. Di bagian Version Management pada halaman detail lapisan, temukan versi target, klik Delete di kolom Actions, lalu klik Delete di kotak dialog Confirm.
-
Langkah berikutnya
-
Setelah membuat lapisan kustom, bind lapisan tersebut ke fungsi melalui Konsol Function Compute atau Serverless Devs agar fungsi dapat mengakses resource yang disediakan oleh lapisan. Untuk detailnya, lihat Konfigurasikan lapisan kustom.
-
Anda juga dapat mengelola dan mengonfigurasi lapisan dengan mengatur parameter
layerssaat membuat atau memperbarui fungsi melalui API atau SDK. Untuk detailnya, lihat CreateFunction dan UpdateFunction. -
Jika dependensi lapisan Anda mencakup pustaka bersama, atau lingkungan lokal Anda tidak kompatibel dengan runtime Function Compute, Anda tidak dapat membuat lapisan di Konsol atau secara lokal. Sebagai gantinya, buat lapisan dari Dockerfile. Untuk detailnya, lihat Gunakan Dockerfile untuk membuat lapisan.