Lapisan memungkinkan Anda mempublikasikan dan menerapkan sumber daya seperti dependensi umum, runtime, dan ekstensi fungsi. Anda dapat mengabstraksi pustaka publik yang digunakan oleh 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 dalam berbagai runtime, cara membuat file ZIP lapisan, serta cara membuat dan menghapus lapisan kustom.
Cara kerjanya
Saat membuat lapisan, Anda perlu mengemas konten lapisan ke dalam file ZIP. Function Compute runtime mendekompresi file ZIP dan menerapkan konten lapisan ke direktori /opt.
Jika beberapa lapisan dikonfigurasikan untuk suatu fungsi, konten dari lapisan tersebut digabungkan dan disimpan di direktori
/optdalam urutan terbalik. Jika dua lapisan memiliki file dengan nama yang sama, file di lapisan yang dikonfigurasikan pertama akan menimpa file di lapisan yang dikonfigurasikan kemudian.Sebagai contoh, jika Anda mengonfigurasikan Lapisan 1 dan Lapisan 2 untuk suatu fungsi, Lapisan 2 dimuat sebelum Lapisan 1 saat instance fungsi dimulai. Konten lapisan didekompresi ke direktori
/opt. Di direktori/opt, konten Lapisan 1 ditempatkan sebelum konten Lapisan 2. Jika ada file dengan nama yang sama di kedua lapisan, file di Lapisan 1 akan menimpa file di Lapisan 2.Jika kode di lapisan bergantung pada pustaka biner atau file yang dapat dieksekusi, Anda harus menggunakan sistem Linux untuk mengkompilasi dan membangun lapisan. Debian 9 direkomendasikan.
Runtime Function Compute didasarkan pada arsitektur x86_64. Jika pustaka dependensi di lapisan memiliki persyaratan set instruksi tertentu, Anda perlu menggunakan mesin x86_64 atau melakukan kompilasi silang untuk memastikan bahwa pustaka dependensi kompatibel dengan runtime Function Compute.
Catatan penggunaan untuk lapisan dalam runtime yang berbeda
Jika runtime mendukung lapisan, Function Compute menambahkan direktori tertentu ke jalur pencarian paket dependensi. Tabel berikut menunjukkan direktori untuk setiap bahasa pemrograman. Kami merekomendasikan Anda mendefinisikan struktur folder yang sama dalam file ZIP lapisan seperti direktori yang tercantum dalam tabel, sehingga kode fungsi Anda dapat mengakses lapisan tanpa menentukan jalur. Untuk informasi lebih lanjut tentang cara membangun file ZIP lapisan, lihat Bangun File ZIP Lapisan. Jika Anda ingin menentukan struktur direktori kustom untuk lapisan, Anda harus secara eksplisit menambahkan jalur pencarian pustaka dependensi ke kode Anda. Untuk informasi lebih lanjut, lihat Bagaimana Cara Saya Merujuk Dependensi dalam Lapisan di Runtime Kustom?
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 selain runtime kustom dan runtime Custom Container | /opt/bin (PATH) |
/opt/lib (LD_LIBRARY_PATH) | |
Runtime kustom dan runtime Custom Container | Tidak ada |
File structure of the .ZIP file in each runtime
Bagian ini menjelaskan struktur file dari file ZIP yang diunggah di setiap runtime dan jalur setelah dekompresi dan penyebaran.
Struktur file setelah dependensi requests digunakan untuk pengemasan
my-layer-code.zip
└── python
└── requests
Jalur setelah file .ZIP didekompresi dan disebar
/
└── opt
└── python
└ ── requests Struktur file setelah dependensi uuid digunakan untuk pengemasan
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Jalur setelah file .ZIP didekompresi dan disebar
/
└── opt
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└ ── package.json Struktur file setelah dependensi jackson-core digunakan untuk pengemasan
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Jalur setelah file .ZIP didekompresi dan disebar
/
└── opt
└── java
└── lib
└── commons-lang3-3.12.0.jar Struktur file setelah dependensi composer digunakan untuk pengemasan
my-layer-code.zip
└── php
├──composer.json
├──composer.lock
└──vendor
Jalur setelah file .ZIP didekompresi dan disebar
/
└── opt
└── php
├──composer.json
├──composer.lock
└──vendorBangun file .ZIP untuk lapisan
Saat membuat lapisan, Anda perlu mengemas konten lapisan ke dalam file ZIP. Function Compute runtime mendekompresi file ZIP dan menerapkan konten lapisan ke direktori /opt.
Metode untuk membangun file ZIP lapisan serupa dengan cara membangun paket kode. Untuk memastikan bahwa fungsi dapat memuat dan menggunakan pustaka yang diterbitkan oleh lapisan, struktur direktori kode pustaka harus sesuai dengan persyaratan direktori setiap bahasa. Untuk informasi lebih lanjut, lihat Catatan Penggunaan untuk Lapisan dalam Runtime yang Berbeda. Untuk pustaka dependensi fungsi dalam lapisan, runtime Function Compute secara otomatis menambahkan jalur pencarian pustaka fungsi untuk berbagai bahasa pemrograman sehingga Anda tidak perlu menentukan jalur lengkap jika Anda mengemas pustaka sesuai dengan aturan pengemasan standar. Jika Anda ingin menentukan struktur direktori kustom untuk lapisan, Anda harus secara eksplisit menambahkan jalur pencarian pustaka dependensi ke kode Anda. Untuk informasi lebih lanjut, lihat Bagaimana Cara Saya Merujuk Dependensi dalam Lapisan di Runtime Kustom?
Berikut ini adalah prosedur untuk membangun file ZIP lapisan di runtime yang berbeda.
Saat membangun lapisan pada mesin lokal, bahasa pemrograman yang Anda gunakan harus sama dengan runtime yang diinginkan di Function Compute.
Pada bagian berikutnya, direktori kerja my-layer-code digunakan sebagai contoh. Dalam skenario bisnis aktual Anda, ganti direktori dengan direktori aktual.
Runtime Python
Jika Anda membangun lapisan pada mesin lokal, versi Python yang Anda gunakan harus sama dengan versi runtime Python yang Anda gunakan di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-codePergi ke direktori kerja.
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 pustaka dependensi diinstal, periksa apakah 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
Runtime Node.js
Jika Anda membangun lapisan pada mesin lokal, versi Node.js yang Anda gunakan harus sama dengan versi runtime Node.js yang Anda gunakan di Function Compute.
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-codePergi ke direktori kerja.
cd my-layer-codeJalankan perintah berikut untuk menginstal pustaka dependensi di my-layer-code/nodejs:
npm install --prefix ./nodejs --save ${PackageName}Ganti
${PackageName}dengan 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 pustaka dependensi diinstal, periksa apakah 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
Runtime Java
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir my-layer-code/javaPergi ke direktori kerja.
cd my-layer-code/javaInstal dependensi menggunakan Maven.
Buat file pom.xml di direktori my-layer-code/java.
Kode 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 ingin Anda unduh --> <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 file JAR dependensi. Nilai default: false. --> <stripVersion>false</stripVersion> <!-- Jalur keluaran file--> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project>Deskripsi
File dependensi yang ingin Anda instal adalah
org.apache.commons.lang3.Gunakan
maven-dependency-pluginuntuk menyalin file dependensi ke direktori /java/lib.
Jalankan perintah berikut di direktori my-layer-code/java untuk menginstal dependensi:
mvn dependency:copy-dependencies
Setelah pustaka dependensi diinstal, periksa apakah 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
Runtime PHP
Jalankan perintah berikut untuk membuat direktori kerja:
mkdir -p my-layer-code/phpPergi ke direktori kerja.
cd my-layer-code/phpGunakan Composer untuk menginstal dependensi.
Di direktori my-layer-code/php, buat file composer.json.
Kode Contoh:
{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } }Jalankan perintah berikut untuk menginstal dependensi:
composer install
Setelah pustaka dependensi diinstal, periksa apakah 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
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, konfigurasikan parameter dan klik Create. Tabel berikut menjelaskan parameter.
Parameter
Deskripsi
Name
Masukkan nama untuk lapisan yang ingin Anda buat.
Description
Masukkan deskripsi yang membedakan lapisan dari yang lain.
Compatible Runtime
Tentukan 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 dan unggah file ZIP lapisan. File ZIP yang diunggah tidak boleh melebihi 500 MB.
Upload Layer in Folder
Pilih dan unggah folder yang berisi file ZIP lapisan. Ukuran folder tidak boleh melebihi 500 MB setelah dikompresi.
Upload Layer Using OSS
Tentukan Bucket Name dan Object Name untuk mengunggah file ZIP lapisan dari Object Storage Service (OSS). Ukuran objek yang dipilih di OSS tidak boleh melebihi 500 MB.
Build Dependency Layer Online
Jika aplikasi Anda dikembangkan berdasarkan Python atau Node.js, atau Anda perlu menginstal beberapa pustaka sistem ringan, Anda dapat memilih Bangun Lapisan Dependensi Secara Online dan masukkan isi file dependensi
package.jsonataurequirements.txtdi editor di bawah ini. Setelah pengaturan disubmit, sistem secara otomatis menginstal paket dependensi tingkat bahasa dan pustaka sistem ini untuk menyederhanakan manajemen dependensi lapisan.
Build Environment
Jika Anda memilih Build Dependency Layer Online, Anda harus menentukan runtime tempat Anda ingin membangun lapisan dependensi.
CatatanHanya runtime Python dan Node.js yang mendukung pembangunan lapisan dependensi secara online.
apt Command
Jika Anda memilih Build Dependency Layer Online dan perlu menginstal beberapa paket perangkat lunak ke lapisan, Anda dapat langsung memasukkan nama dependensi di kotak input
apt install.Setelah lapisan dibuat, sistem menghasilkan versi lapisan yang dimulai dari 1 dalam urutan menaik.
Buat versi baru.
CatatanAnda tidak dapat memodifikasi lapisan yang telah dibuat atau versi dari 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 diinginkan dan klik nama lapisan tersebut.
Di bagian Versions pada halaman yang muncul, klik Create Version.
Di halaman pembuatan versi lapisan, tentukan runtime, unggah kode lapisan baru, lalu klik Create.
Buat lapisan kustom menggunakan Serverless Devs
Prerequisites
Serverless Devs dan dependensinya telah diinstal. Untuk informasi lebih lanjut, lihat Memulai Cepat.
Serverless Devs telah dikonfigurasikan. Untuk informasi lebih lanjut, lihat Konfigurasikan Serverless Devs.
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-layerDeskripsi:
--code: menentukan jalur paket kode.--compatible-runtime: menentukan runtime yang kompatibel dengan lapisan.--layer-name: menentukan nama lapisan.
Setelah lapisan dibuat, pesan sukses ditampilkan dan Alibaba Cloud Resource Name (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 konsol Function Compute 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-layerCatatanAnda tidak dapat memodifikasi lapisan yang telah dibuat atau versi dari 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 atau versinya
Anda dapat menghapus lapisan atau versinya yang tidak lagi diperlukan. Lapisan yang dihapus tidak dapat dilihat atau dirujuk lagi oleh konfigurasi fungsi. Namun, eksekusi fungsi yang dikonfigurasikan untuk merujuk lapisan tersebut tidak terpengaruh.
Masuk ke konsol Function Compute. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah.
Di halaman Lapisan, hapus lapisan atau versinya sesuai 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 tersebut, 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.
Informasi lebih lanjut
Anda juga dapat menggunakan parameter
layersuntuk mengelola dan mengonfigurasi lapisan saat Anda membuat fungsi atau memperbarui fungsi menggunakan operasi API atau SDK. Untuk informasi lebih lanjut, lihat CreateFunction dan UpdateFunction.Jika dependensi lapisan yang akan diinstal berisi pustaka tautan dinamis, atau lingkungan lokal Anda tidak kompatibel dengan runtime Function Compute, Anda tidak dapat membangun lapisan di konsol Function Compute atau di mesin lokal. Anda hanya dapat membangun lapisan berdasarkan Dockerfile. Untuk informasi lebih lanjut, lihat Gunakan Dockerfile untuk Membangun Lapisan.
Setelah lapisan kustom dibuat, Anda dapat mengaitkannya ke fungsi di konsol Function Compute atau menggunakan Serverless Devs sehingga fungsi dapat mengakses sumber daya yang disediakan dalam lapisan. Untuk informasi lebih lanjut, lihat Konfigurasikan Lapisan Kustom.