Katmanlar, işlevleriniz için ortak bağımlılık kütüphaneleri, çalışma zamanı ortamları ve işlev uzantıları sağlar. Bir işlevi dağıtırken veya güncellerken kod paketinin boyutunu küçültmek amacıyla işlevlerinizin bağımlı olduğu ortak kütüphaneleri bir katmana çıkarabilir veya Function Compute genel katmanlarını kullanabilirsiniz. Bu konuda katmanların nasıl çalıştığı, her çalışma zamanının desteklediği dizinler, bir katman ZIP dosyasının nasıl oluşturulacağı ve özel bir katmanın nasıl oluşturulup silineceği açıklanmaktadır.
Çalışma mantığı
Bir katman oluştururken tüm içeriğini bir ZIP dosyasında paketleyin. Çalışma zamanında Function Compute, katman içeriğini ayıklar ve /opt dizinine dağıtır. Bir işlev için birden fazla katman yapılandırdığınızda katman içeriği, katmanların yapılandırılma sırasının tersine göre /opt dizininde birleştirilir. Bir katmandaki bir dosya başka bir katmandaki dosyayla aynı ada sahipse önce yapılandırılan katmandaki dosya, sonra yapılandırılan katmandaki dosyanın üzerine yazar.
Örneğin, bir işlev için 1. Katman ve 2. Katmanı yapılandırırsanız işlev örneği başlatılırken önce 2. Katmanı ardından 1. Katmanı yükler ve her iki katmanı da /opt dizinine ayıklar. /opt dizininde önce 1. Katmanın içeriği yer alır, ardından 2. Katmanın içeriği gelir. 1. Katman ve 2. Katman aynı adlara sahip dosyalar içeriyorsa 1. Katmandaki dosyalar 2. Katmandaki dosyaların üzerine yazar.
Oluşturma gereksinimleri:
Bir katman ikili kütüphaneler veya yürütülebilir dosyalar içeriyorsa Linux üzerinde (Debian 9 önerilir) oluşturun.
Function Compute x86_64 mimarisinde çalışır. Komut setine bağlı bağımlılıklar için uyumluluğu sağlamak üzere x86_64 makine kullanın veya çapraz derleme yapın.
Çalışma zamanına göre desteklenen dizinler
Bir çalışma zamanı katmanları destekliyorsa Function Compute, aşağıdaki dizinleri çalışma zamanı dilinin bağımlılık arama yoluna ekler. İşlev kodunuzun açık yollar belirtmeden katman içeriğine erişebilmesi için katman ZIP paketinizi bu yollara uygun şekilde yapılandırın. Bir katman ZIP dosyasının nasıl oluşturulacağı hakkında ayrıntılı bilgi için bkz. Katman ZIP dosyası oluşturma.
| Çalışma Zamanı | Dizin yolu |
| Python | /opt/python |
| Node.js | /opt/nodejs/node_modules |
| Java | /opt/java/lib |
| PHP | /opt/php |
| Diğer çalışma zamanları (özel çalışma zamanı ve özel konteyner çalışma zamanı hariç) | /opt/bin (PATH), /opt/lib (LD_LIBRARY_PATH) |
| Özel çalışma zamanı ve özel konteyner çalışma zamanı | Yok |
Bunun yerine özel bir dizin yapısı kullanıyorsanız bağımlılık arama yolunu işlev kodunuzda açıkça ekleyin. Ayrıntılar için bkz. Özel çalışma zamanında katmandaki bağımlılıklara nasıl başvurulur.
Katman ZIP dosyası yapısı
Aşağıdaki örnekler, her çalışma zamanı için gerekli ZIP dosyası yapısını ve ilgili dağıtım yollarını göstermektedir.
Python — requests bağımlılığı ile paketleme:
my-layer-code.zip
└── python
└── requests
Extracted to:
/opt/python/requests
Node.js — uuid bağımlılığı ile paketleme:
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Extracted to:
/opt/nodejs/node_modules/uuid
Java — commons-lang3 bağımlılığı ile paketleme:
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Extracted to:
/opt/java/lib/commons-lang3-3.12.0.jar
PHP — Composer bağımlılıkları ile paketleme:
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Extracted to:
/opt/php/vendor
Katman ZIP dosyası oluşturma
Bir katman ZIP dosyası oluşturmak, bir kod paketi oluşturmaya benzer. Function Compute'ın çalışma zamanında bir katmanda yayımlanan kütüphaneleri doğru şekilde yüklemesi için kütüphane kodunun dizin yapısının her dilin standart dizin kurallarına uyması gerekir. Ayrıntılar için bkz. Çalışma zamanına göre desteklenen dizinler. Katman bağımlılıklarınızı belirtilen şekilde paketlerseniz Function Compute her dil için bağımlılık arama yolunu otomatik olarak ekler ve tam yolu belirtmeniz gerekmez.
Her çalışma zamanı için bir katman ZIP dosyası oluşturmak üzere aşağıdaki adımları uygulayın:
Bir katmanı yerel olarak oluştururken Function Compute'ta seçtiğiniz çalışma zamanı sürümüyle aynı programlama dili sürümünü kullanın.
Aşağıdaki adımlarda oluşturulan
my-layer-codeçalışma dizini yalnızca bir örnektir. Dizin adını ihtiyacınıza göre değiştirebilirsiniz.
Python çalışma zamanı
Bir katmanı yerel olarak oluştururken Function Compute'ta seçtiğiniz Python çalışma zamanı sürümüyle aynı Python sürümünü kullanın.
-
Bir çalışma dizini oluşturun:
mkdir my-layer-code cd my-layer-code -
Bağımlılıkları
pythonalt dizinine yükleyin:pip install --target ./python ${PackageName}pip installkomutu hakkında ayrıntılı bilgi için bkz. pip install.numpyile örnek:pip install --target ./python numpyYükleme sonrasında dizin yapısı şu şekilde görünür:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs -
Bağımlılıkları
my-layer-codedizininden paketleyin:zip -r my-layer-code.zip python
Node.js çalışma zamanı
Bir katmanı yerel olarak oluştururken Function Compute'ta seçtiğiniz Node.js çalışma zamanı sürümüyle aynı Node.js sürümünü kullanın.
-
Bir çalışma dizini oluşturun:
mkdir my-layer-code cd my-layer-code -
Bağımlılıkları
nodejsalt dizinine yükleyin:npm install --prefix ./nodejs --save ${PackageName}${PackageName}yüklemek istediğiniz bağımlılık paketinin adıdır.npm installkomutu hakkında ayrıntılı bilgi için bkz. npm-install.uuidile örnek:npm install --prefix ./nodejs --save uuidYükleme sonrasında dizin yapısı şu şekilde görünür:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Bağımlılıkları
my-layer-codedizininden paketleyin:zip -r my-layer-code.zip nodejs
Java çalışma zamanı
-
Bir çalışma dizini oluşturun:
mkdir my-layer-code/java cd my-layer-code/java -
Bağımlılıklarınızı bildiren bir
pom.xmldosyası oluşturun. Aşağıdaki örnekcommons-lang3öğesini yükler vemaven-dependency-pluginkullanarak./libdizinine kopyalar:<?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> -
Bağımlılıkları yükleyin:
mvn dependency:copy-dependenciesYükleme sonrasında dizin yapısı şu şekilde görünür:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar -
Bağımlılıkları
my-layer-codedizininden paketleyin:zip -r my-layer-code.zip java
PHP çalışma zamanı
-
Bir çalışma dizini oluşturun:
mkdir -p my-layer-code/php cd my-layer-code/php -
Bağımlılıklarınızı bildiren bir
composer.jsondosyası oluşturun. Örnek:{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Bağımlılıkları yükleyin:
composer installYükleme sonrasında dizin yapısı şu şekilde görünür:
my-layer-code └── php ├── composer.json ├── composer.lock └── vendor -
Bağımlılıkları
my-layer-codedizininden paketleyin:zip -r my-layer-code.zip php
Özel katman oluşturma
Konsolu kullanma
Ön koşullar
Başlamadan önce aşağıdakileri yaptığınızdan emin olun:
Bir Function Compute işlevi oluşturun. Ayrıntılar için bkz. İşlev oluşturma.
Adımlar
Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Advanced Features > Layers seçeneğini belirleyin.
Üst gezinme çubuğunda bir bölge seçin. Layers sayfasında Create Layer seçeneğine tıklayın.
-
Aşağıdaki parametreleri yapılandırın ve ardından Create seçeneğine tıklayın.
Parametre Açıklama Name Katman için bir ad girin. Description Katmanları birbirinden ayırt etmenize yardımcı olması için katman için bir açıklama girin. Compatible Runtime Bu katmanla uyumlu çalışma zamanlarını seçin. Layer Upload Method Katmanın bağımlılıklarını yükleme yöntemini seçin: Upload Layer in ZIP Package — bir .zip dosyası yükleyin (maksimum 500 MB); Upload Layer in Folder — Function Compute'ın .zip dosyasına sıkıştırdığı bir klasör seçin (maksimum 500 MB); Upload Layer Using OSS — Object Storage Service (OSS) içindeki .zip dosyasının Bucket Name ve Object Name değerlerini belirtin (maksimum 500 MB); Build Dependency Layer Online — İşleviniz Python veya Node.js'de geliştirildiyse ya da hafif sistem kütüphaneleri yüklemeniz gerekiyorsa katmanı çevrimiçi olarak oluşturabilirsiniz. Bağımlılık dosyasının içeriğini (Python için requirements.txtveya Node.js içinpackage.json) aşağıdaki giriş kutusuna girin. İsteği gönderdikten sonra Function Compute dil düzeyindeki bağımlılık paketlerini ve sistem kütüphanelerini otomatik olarak yükler; bu işlem katman bağımlılığı yönetimini basitleştirir.Build Environment Build Dependency Layer Online seçildiğinde görünür. Katmanı oluşturmak için çalışma zamanını seçin. Şu anda yalnızca Python ve Node.js çalışma zamanları desteklenmektedir. apt command Build Dependency Layer Online seçildiğinde görünür. Sistem paketlerini katmana yüklemek için apt installsonrasında paket adlarını girin.Katman oluşturulduktan sonra otomatik olarak bir katman sürümü oluşturulur. Sürüm numarası 1'den başlar ve her yeni sürümle birlikte artar.
NotOSS paketi Key Management Service (KMS) tarafından şifrelenmişse Function Compute hizmet bağlantılı rolünün (
AliyunServiceRoleForFC) şifrelenmiş nesnelere erişim izni olmayabilir ve bu durumAccessDeniedhatasına neden olabilir. Bu sorunu çözmek için KMS konsolunda anahtar ilkesini güncelleyerekAliyunServiceRoleForFCrolüne erişim izni verin. Ayrıntılar için bkz. Anahtar ilkesini değiştirme. Anahtar ilkesini güncelledikten sonra izin değişikliğinin etkili olduğunu doğrulamak için katman yüklemeyi yeniden deneyin. -
Mevcut bir katmana yeni bir sürüm eklemek için:
NotMevcut bir katmanı veya herhangi bir sürümünü değiştiremezsiniz. Bir katmanı güncellemek için yeni bir katman veya yeni bir katman sürümü oluşturun. Başvurulan bir katman sürümü silinirse katman yapılandırmasını güncellemeden önce başvuruyu kaldırın.
Layers sayfasında hedef katmanın adına tıklayın.
Version Management bölümünde Create Version seçeneğine tıklayın.
Bir çalışma zamanı seçin, yeni katman kodunu yükleyin ve Create seçeneğine tıklayın.
Serverless Devs'i kullanma
Ön koşullar
Başlamadan önce aşağıdakileri yaptığınızdan emin olun:
Adımlar
-
Bir katman oluşturmak için aşağıdaki komutu çalıştırın:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerAşağıdaki tabloda komuttaki parametreler açıklanmaktadır.
Parametre Açıklama --codeKatman kod paketinin yolu. --compatible-runtimeVirgülle ayrılmış uyumlu çalışma zamanı listesi. --layer-nameKatmanın adı. Katman oluşturulduktan sonra komut katmanın Alibaba Cloud Resource Name (ARN) değerini döndürür. ARN, hesap kimliği tanımlayıcısı, katman adı ve katman sürümünden oluşan ve sayı işaretleriyle (
#) ayrılan üç bölümden oluşur. Oluşturulan katman hakkındaki bilgileri görüntülemek için Function Compute konsoluna da giriş yapabilirsiniz. -
Mevcut bir katmana yeni bir sürüm eklemek için aynı katman adıyla aynı komutu çalıştırın:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerNotMevcut bir katmanı veya herhangi bir sürümünü değiştiremezsiniz. Bir katmanı güncellemek için yeni bir katman veya yeni bir katman sürümü oluşturun. Başvurulan bir katman sürümü silinirse katman yapılandırmasını güncellemeden önce başvuruyu kaldırın.
Katman veya katman sürümü silme
Artık ihtiyaç duymadığınız katmanları veya katman sürümlerini silebilirsiniz. Silinen bir katman artık işlev yapılandırmalarında görüntülenemez veya başvuruda kullanılamaz. Ancak silinen katmana zaten başvuran işlevlerin yürütülmesi etkilenmez.
Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Advanced Features > Layers seçeneğini belirleyin.
Üst gezinme çubuğunda bir bölge seçin.
-
Layers sayfasında bir katmanı veya katman sürümünü silin:
Katman silme: Hedef katmanı bulun, Actions sütunundaki Delete seçeneğine tıklayın, onay onay kutusunu işaretleyin ve Delete seçeneğine tıklayın.
Katman sürümü silme: Hedef katmanın adına tıklayın. Katman ayrıntıları sayfasındaki Version Management bölümünde hedef sürümü bulun, Actions sütunundaki Delete seçeneğine tıklayın ve Confirm iletişim kutusunda Delete seçeneğine tıklayın.
Sonraki adımlar
Özel bir katman oluşturduktan sonra işlevin katman tarafından sağlanan kaynaklara erişebilmesi için katmanı Function Compute konsolu veya Serverless Devs aracılığıyla bir işleve bağlayın. Ayrıntılar için bkz. Özel katman yapılandırma.
API'yi çağırarak veya SDK'yı kullanarak bir işlev oluştururken veya güncellerken
layersparametresini ayarlayarak katmanları da yönetebilir ve yapılandırabilirsiniz. Ayrıntılar için bkz. CreateFunction ve UpdateFunction.Katman bağımlılıklarınız paylaşılan kütüphaneler içeriyorsa veya yerel ortamınız Function Compute çalışma zamanıyla uyumsuzsa katmanı konsolda veya yerel olarak oluşturamazsınız. Bunun yerine katmanı bir Dockerfile'dan oluşturun. Ayrıntılar için bkz. Katman oluşturmak için Dockerfile kullanma.