Özel bir çalışma zamanında kod paketiniz (ZIP biçimi) bir HTTP sunucu programıdır. Function Compute soğuk başlatma sırasında bu HTTP sunucuyu başlatır ve gelen tüm istekleri bunun üzerinden yönlendirir.
Çalışma Prensibi
Function Compute soğuk başlatma yaptığında, yapılandırdığınız Startup Command ve Startup Parameter değerlerini kullanarak HTTP sunucunuzu başlatır. Ardından HTTP sunucusu, Function Compute'den gelen tüm istekleri devralır.
Bir başlatma komutu veya parametresi yapılandırmazsanız Function Compute HTTP sunucuyu varsayılan olarak /code/bootstrap konumundan başlatır.
Soğuk başlatma iki aşamada tamamlanır:
Platform hazırlığı — Function Compute yürütme ortamını başlatır ve kodunuzu çalıştırmaya hazırlanır.
HTTP sunucu başlatma — Function Compute başlatma komutunuzu çalıştırır. HTTP sunucusunun 120 saniye içinde hazır olması gerekir.
Başlatma komutunu yapılandırın
Başlatma komutu customRuntimeConfig bölümünde tanımlanır:
| Alan | Açıklama |
|---|---|
command |
Çalıştırılacak yürütülebilir dosya |
args |
Yürütülebilir dosyaya geçirilen bağımsız değişkenler |
Function Compute tam başlatma komutunu oluşturmak için command ve args değerlerini birleştirir.
Kod paketinizin adının function.zip olduğunu varsayalım. Aşağıdaki örneklerde her bir çalışma zamanı için paket yapısı ve ilgili customRuntimeConfig yapılandırması gösterilmektedir.
Java 8 veya Spring Boot
.
└── demo.jar
customRuntimeConfig:
command:
- java
args:
- '-jar'
- 'demo.jar'
Python 3.7
.
└── server.py
customRuntimeConfig:
command:
- python
args:
- 'server.py'
Node.js 10
.
└── server.js
customRuntimeConfig:
command:
- node
args:
- 'server.js'
PHP 7.4
.
└── server.php
customRuntimeConfig:
command:
- php
args:
- 'server.php'
HTTP sunucu gereksinimleri
HTTP sunucunuz aşağıdaki gereksinimleri karşılayacak şekilde yapılandırılmalıdır. Bu gereksinimlerden herhangi birinin ihlal edilmesi Function Compute'un bağlantıyı reddetmesine veya başarısız olmasına neden olur.
| Gereksinim | Ayrıntılar | İhlal edilirse oluşan hata |
|---|---|---|
| Doğru adrese bağlanın | 0.0.0.0:CAPort veya *:CAPort adresini dinleyin. 127.0.0.1:CAPort kullanmayın. |
FunctionNotStarted — bağlantı reddedildi |
| Yapılandırılan bağlantı noktasıyla eşleşin | Sunucunun dinleme bağlantı noktası işlev yapılandırmalarınızdaki CAPort değeriyle eşleşmelidir. Varsayılan değer 9000 değeridir. Farklı bir bağlantı noktası (örneğin 8080) kullanmak için işlev yapılandırmalarınızda CAPort değerini 8080 olarak ayarlayın. |
FunctionNotStarted — ping başarısız oldu |
| Keep-alive özelliğini etkinleştirin | Keep-alive modunu etkinleştirin ve bağlantı zaman aşımını en az 24 saat (maksimum işlev çalıştırma süresi) olarak ayarlayın. | Bağlantılar çalıştırma sırasında kesilir |
| 120 saniye içinde başlayın | HTTP sunucusu başlatıldıktan sonra 120 saniye içinde bağlantıları kabul etmeye hazır olmalıdır. | Başlatma başarısız olur |
Örnek: keep-alive yapılandırması (Express ile Node.js)
const server = app.listen(PORT, HOST);
server.timeout = 0; // never timeout
server.keepAliveTimeout = 0; // keep-alive, never timeout
Hata referansı: 127.0.0.1 adresine bağlanma
HTTP sunucusu 0.0.0.0 yerine 127.0.0.1 adresini dinlerse Function Compute sunucuya ulaşamaz ve aşağıdaki hatayı döndürür:
{
"ErrorCode": "FunctionNotStarted",
"ErrorMessage": "TheCA'shttpservercannotbestarted:ContainerStartDuration:25000000000.PingCAfaileddueto:dialtcp21.0.XX.XX:9000:getsockopt:connectionrefusedLogs:2019-11-29T09:53:30.859837462ZListeningonport9000"
}