Lapisan menyediakan kemampuan penerbitan dan penerapan untuk resource seperti pustaka dependensi publik, lingkungan runtime, dan ekstensi fungsi. Anda dapat mengekstrak dependensi umum fungsi ke dalam lapisan atau menggunakan lapisan publik resmi dari Function Compute untuk mengurangi ukuran paket kode saat menerapkan atau memperbarui fungsi. Topik ini menjelaskan prinsip lapisan, cara menggunakan lapisan dengan berbagai runtime, serta cara membuat paket ZIP untuk lapisan dan cara membuat serta menghapus lapisan kustom.
Cara kerja
Saat membuat lapisan, Anda harus mengemas seluruh kontennya ke dalam file ZIP. Runtime Function Compute mengekstrak konten lapisan ke direktori /opt.
Saat menambahkan beberapa lapisan ke suatu fungsi, kontennya digabung ke dalam direktori
/opt. Jika file yang sama terdapat di beberapa lapisan, versi dari lapisan yang ditambahkan lebih dulu akan memiliki prioritas lebih tinggi.Misalnya, jika Anda menambahkan Lapisan 1 lalu Lapisan 2 ke suatu fungsi, file duplikat dari Lapisan 2 akan ditimpa oleh file dari Lapisan 1.
Jika kode lapisan Anda bergantung pada pustaka biner atau executable, Anda harus membuat lapisan tersebut di sistem Linux. Kami merekomendasikan penggunaan Debian 9.
Runtime Function Compute berbasis arsitektur x86_64. Jika dependensi dalam lapisan bergantung pada set instruksi, Anda harus menggunakan mesin dengan arsitektur x86_64 atau melakukan cross-compilation untuk memastikan dependensi kompatibel dengan runtime Function Compute.
Penggunaan lapisan untuk berbagai runtime
Jika suatu runtime mendukung lapisan, Function Compute menambahkan direktori tertentu ke jalur pencarian dependensi bahasa runtime, seperti yang ditunjukkan pada tabel berikut. Kami merekomendasikan struktur folder dalam paket ZIP lapisan Anda sesuai dengan direktori spesifik yang tercantum di bawah ini agar kode fungsi dapat mengakses lapisan tanpa perlu menentukan jalur secara eksplisit. Untuk informasi lebih lanjut tentang cara membuat paket ZIP lapisan, lihat Buat paket ZIP lapisan. Jika Anda ingin menggunakan struktur direktori kustom untuk lapisan, Anda harus secara eksplisit menambahkan jalur pencarian pustaka dependensi dalam kode Anda. Untuk informasi lebih lanjut, lihat Cara mereferensikan dependensi dari lapisan dalam runtime kustom.
Supported directories for each runtime
Runtime | Jalur direktori |
Python | /opt/python |
Node.js | /opt/nodejs/node_modules |
Java | /opt/java/lib |
PHP | /opt/php |
Runtime selain runtime kustom dan runtime kontainer kustom | /opt/bin (PATH) |
/opt/lib (LD_LIBRARY_PATH) | |
runtime kustom dan runtime kontainer kustom | None |
Layer .zip file structure
Contoh berikut menunjukkan struktur file .zip yang diperlukan dan jalur penerapan yang sesuai untuk berbagai runtime.
# Struktur file setelah dikemas dengan dependensi requests
my-layer-code.zip
└── python
└── requests
# Jalur setelah file .zip diekstrak dan diterapkan
/
└── opt
└── python
└── requests# Struktur file setelah dikemas dengan dependensi uuid
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
# Jalur setelah file .zip diekstrak dan diterapkan
/
└── opt
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json# Struktur file setelah dikemas dengan dependensi jackson-core
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
# Jalur setelah file .zip diekstrak dan diterapkan
/
└── opt
└── java
└── lib
└── commons-lang3-3.12.0.jar# Struktur file setelah dikemas dengan dependensi composer
my-layer-code.zip
└── php
├──composer.json
├──composer.lock
└──vendor
# Jalur setelah file .zip diekstrak dan diterapkan
/
└── opt
└── php
├──composer.json
├──composer.lock
└──vendorBuat file .zip untuk lapisan
Saat membuat lapisan, Anda harus mengemas seluruh kontennya ke dalam file ZIP. Runtime Function Compute mengekstrak konten lapisan dan menerapkannya ke direktori /opt.
Membuat paket ZIP untuk lapisan mirip dengan membuat paket kode. Agar runtime fungsi dapat memuat pustaka dari lapisan dengan benar, struktur direktori kode pustaka harus mengikuti spesifikasi direktori standar untuk setiap bahasa. Untuk informasi lebih lanjut, lihat Penggunaan lapisan untuk setiap runtime. Jika Anda mengemas pustaka dependensi fungsi dalam lapisan sesuai spesifikasi standar, Function Compute secara otomatis menambahkan jalur pencarian pustaka dependensi untuk setiap bahasa sehingga Anda tidak perlu menentukan jalur lengkap. Namun, jika Anda menggunakan struktur direktori kustom untuk lapisan, Anda harus secara eksplisit menambahkan jalur pencarian pustaka dependensi dalam kode Anda. Untuk informasi lebih lanjut, lihat Cara mereferensikan dependensi dalam lapisan dalam runtime kustom.
Langkah-langkah berikut menunjukkan cara membuat file .zip lapisan untuk setiap runtime:
Saat membuat lapisan secara lokal, pastikan versi bahasa pemrograman yang Anda gunakan sesuai dengan versi runtime yang dipilih di Function Compute.
Direktori kerja my-layer-code yang digunakan dalam contoh berikut hanya untuk tujuan demonstrasi. Anda dapat mengganti nama direktori sesuai kebutuhan.
Runtime Python
Saat membuat lapisan secara lokal, versi Python yang Anda gunakan harus sesuai dengan versi runtime Python yang dipilih di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja.
mkdir my-layer-codeMasuk ke direktori yang baru saja dibuat.
cd my-layer-codeJalankan perintah berikut untuk menginstal dependensi ke direktori my-layer-code/python.
pip install --target ./python ${PackageName}${PackageName} adalah nama paket dependensi yang ingin Anda instal. Untuk informasi lebih lanjut tentang perintah
pip install, lihat pip install.Contoh:
pip install --target ./python numpySetelah instalasi selesai, struktur direktori menjadi sebagai berikut:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libsDi direktori my-layer-code, jalankan perintah berikut untuk mengemas dependensi.
zip -r my-layer-code.zip python
Runtime Node.js
Saat membuat lapisan secara lokal, versi Node.js yang Anda gunakan harus sesuai dengan versi runtime Node.js yang dipilih di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja.
mkdir my-layer-codeMasuk ke direktori yang baru saja dibuat.
cd my-layer-codeJalankan perintah berikut untuk menginstal dependensi ke direktori my-layer-code/nodejs.
npm install --prefix ./nodejs --save ${PackageName}${PackageName}adalah nama paket dependensi yang ingin Anda instal. Untuk informasi lebih lanjut tentang perintahnpm install, lihat npm-install.Contoh:
npm install --prefix ./nodejs --save uuidSetelah instalasi selesai, struktur direktori menjadi sebagai berikut:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.jsonDi direktori my-layer-code, jalankan perintah berikut untuk mengemas dependensi.
zip -r my-layer-code.zip nodejs
Runtime Java
Jalankan perintah berikut untuk membuat direktori kerja.
mkdir my-layer-code/javaMasuk ke direktori yang baru saja dibuat.
cd my-layer-code/javaInstal dependensi menggunakan Maven.
Di direktori my-layer-code/java, buat file pom.xml.
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 yang akan 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 unduh Maven. --> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- Menentukan apakah dependensi transitif dikecualikan. Default adalah false (tidak dikecualikan). --> <excludeTransitive>false</excludeTransitive> <!-- Menentukan apakah informasi versi dihapus dari akhiran file JAR dependensi. Default adalah false (tidak dihapus). --> <stripVersion>false</stripVersion> <!-- Jalur file output. --> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project>Kode contoh menunjukkan hal berikut:
Paket dependensi yang akan diinstal adalah
org.apache.commons.lang3.maven-dependency-plugindigunakan untuk menyalin paket dependensi yang diperlukan ke direktori /java/lib.
Di direktori my-layer-code/java, jalankan perintah berikut untuk menginstal dependensi.
mvn dependency:copy-dependencies
Setelah instalasi selesai, struktur direktori menjadi sebagai berikut:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jarDi direktori my-layer-code, jalankan perintah berikut untuk mengemas dependensi.
zip -r my-layer-code.zip java
Runtime PHP
Jalankan perintah berikut untuk membuat direktori kerja.
mkdir -p my-layer-code/phpMasuk ke direktori yang baru saja dibuat.
cd my-layer-code/phpInstal dependensi menggunakan Composer.
Di direktori my-layer-code/php, buat file composer.json.
Contoh:
{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } }Jalankan perintah berikut untuk menginstal dependensi.
composer install
Setelah instalasi selesai, struktur direktori menjadi sebagai berikut:
my-layer-code └─php ├──composer.json ├──composer.lock └──vendorDi direktori my-layer-code, jalankan perintah berikut untuk mengemas dependensi.
zip -r my-layer-code.zip php
Buat lapisan kustom
Konsol
Prasyarat
Anda telah membuat fungsi. Untuk informasi lebih lanjut, lihat Buat fungsi.
Prosedur
Login 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, konfigurasikan parameter, lalu klik Create.
Parameter
Deskripsi
Name
Masukkan nama untuk lapisan.
Description
Masukkan deskripsi untuk lapisan.
Compatible Runtime
Pilih runtime yang kompatibel dengan lapisan ini.
Layer Upload Method
Pilih metode untuk mengunggah dependensi lapisan:
Upload Layer in ZIP Package
Unggah file .zip lapisan. File .zip yang diunggah tidak boleh melebihi 500 MB.
Upload Layer in Folder
Pilih folder yang berisi konten lapisan. Function Compute secara otomatis mengompresi folder menjadi file .zip, yang tidak boleh melebihi 500 MB.
Upload Layer Using OSS
Tentukan Bucket Name dan Object Name file .zip lapisan di Object Storage Service (OSS). Objek OSS yang dipilih tidak boleh melebihi 500 MB.
Build Dependency Layer Online
Pilih opsi ini untuk membuat lapisan langsung dari file dependensi. Metode ini didukung untuk aplikasi Python (
requirements.txt) dan Node.js (package.json), serta untuk menginstal pustaka sistem ringan. Tempelkan isi file dependensi Anda ke editor, dan sistem secara otomatis menginstal dependensi untuk membuat lapisan.
Build Environment
Jika Anda memilih Build Dependency Layer Online, Anda harus memilih runtime yang akan digunakan untuk membuat lapisan dependensi.
CatatanSaat ini, hanya runtime Python dan Node.js yang mendukung pembuatan lapisan dependensi online.
apt command
Jika Anda memilih Build Dependency Layer Online dan perlu menginstal paket perangkat lunak ke dalam lapisan, Anda dapat memasukkan nama dependensi di kotak input setelah
apt install.Setelah lapisan dibuat, versi secara otomatis dihasilkan. Nomor versi dimulai dari 1 dan bertambah secara berurutan.
Buat versi baru.
CatatanLapisan yang telah dibuat dan versinya tidak dapat diubah. Untuk memperbarui konfigurasi lapisan, Anda harus membuat lapisan baru atau versi baru. Jika versi lapisan yang direferensikan dihapus, Anda juga harus menghapus referensi tersebut sebelum memperbarui konfigurasi lapisan.
Di halaman Layers, klik nama lapisan target.
Di bagian Version Management, klik Create Version.
Di halaman Create Version, pilih runtime, unggah kode lapisan baru, lalu klik Create.
Serverless Devs
Prerequisites
Procedure
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-layerParameter:
--code: Jalur ke paket kode.--compatible-runtime: Runtime yang kompatibel untuk lapisan.--layer-name: Nama lapisan.
Jika berhasil, perintah akan mengembalikan Alibaba Cloud Resource Name (ARN) lapisan. ARN berisi ID akun, nama lapisan, dan nomor versi, dipisahkan oleh simbol hash (
#), seperti yang ditunjukkan pada gambar. Anda juga dapat login ke Konsol Function Compute untuk melihat informasi lapisan yang telah dibuat.
Untuk membuat versi baru untuk lapisan yang sudah ada, jalankan kembali perintah tersebut 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-layerCatatanLapisan yang telah dibuat dan versinya tidak dapat diubah. Untuk memperbarui konfigurasi lapisan, Anda harus membuat lapisan baru atau versi baru. Jika versi lapisan yang direferensikan dihapus, Anda juga harus menghapus referensi tersebut sebelum memperbarui konfigurasi lapisan.
Hapus lapisan atau versi lapisan
Anda dapat menghapus lapisan atau versi lapisan yang tidak lagi diperlukan. Setelah versi lapisan dihapus, Anda tidak dapat lagi melihat atau mereferensikannya dalam konfigurasi fungsi baru. Namun, fungsi yang sudah mereferensikan versi lapisan yang dihapus tidak terpengaruh.
Login ke Konsol Function Compute. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah.
Di halaman Layers, hapus lapisan atau versi lapisan sesuai kebutuhan.
Hapus lapisan
Temukan lapisan target, klik Delete di kolom Actions, centang kotak konfirmasi di dialog, lalu klik Delete.
Hapus versi lapisan
Di halaman detail lapisan, buka bagian Version Management. Temukan versi target, klik Delete di kolom Actions, lalu klik Delete di dialog Confirm.
Referensi
Anda juga dapat mengelola dan mengonfigurasi lapisan dengan mengatur parameter
layerssaat membuat atau memperbarui fungsi menggunakan API atau SDK. Untuk informasi lebih lanjut, lihat Buat fungsi dan Perbarui fungsi.Jika dependensi untuk lapisan yang ingin Anda instal berisi pustaka tautan dinamis, atau jika lingkungan lokal Anda tidak kompatibel dengan lingkungan runtime Function Compute, Anda tidak dapat membuat lapisan dari konsol atau secara lokal. Anda hanya dapat membuat lapisan berdasarkan Dockerfile. Untuk informasi lebih lanjut, lihat Cara membuat lapisan berdasarkan Dockerfile.
Setelah membuat lapisan kustom, Anda dapat mengikatnya ke fungsi menggunakan Konsol Function Compute atau Serverless Devs agar fungsi dapat mengakses resource dalam lapisan. Untuk informasi lebih lanjut, lihat Konfigurasikan lapisan kustom.