Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben a cikkben egy Linux-tárolóban futó függvényalkalmazást hoz létre, és üzembe helyezi azt egy Azure Container Apps-környezetben egy tárolóregisztrációs adatbázisból. A Container Appsben való üzembe helyezéssel a függvényalkalmazásokat integrálhatja natív felhőbeli mikroszolgáltatásokba. További információ: Azure Functionst üzemeltető Azure Container Apps.
Important
Már elérhető egy új üzemeltetési módszer az Azure Functions közvetlenül az Azure Container Appsben való futtatásához. Lásd : Natív Azure Functions-támogatás az Azure Container Appsben. Ez az integráció lehetővé teszi az Azure Container Apps teljes funkcióinak és képességeinek használatát. Emellett az Azure Functions által biztosított függvényprogramozási modell és az automatikus skálázás egyszerűsége is hasznos.
Ezt a megközelítést a legtöbb új számítási feladat esetében javasoljuk. További információ: Azure Functions az Azure Container Appsben.
Ez a cikk bemutatja, hogyan hozhat létre linuxos tárolóban futó függvényeket, és hogyan helyezheti üzembe a tárolót egy Container Apps-környezetben.
Ennek a rövid útmutatónak az elvégzése az Azure-fiókjának néhány centes (USD) vagy annál kisebb költséggel jár, amelyet a erőforrások törlésével minimalizálhatja, miután befejezte.
Fejlesztési nyelv kiválasztása
Először az Azure Functions-eszközökkel hozza létre a projektkódot függvényalkalmazásként egy Docker-tárolóban egy nyelvspecifikus Linux-alaprendszerkép használatával. Ügyeljen arra, hogy a cikk tetején válassza ki a választott nyelvet.
A Core Tools automatikusan létrehoz egy Docker-fájlt a projekthez, amely a függvénynyelvhez a megfelelő alaprendszerkép legfrissebb verzióját használja. Rendszeresen frissítenie kell a tárolót a legújabb alaprendszerképről, és újból üzembe kell helyeznie a tároló frissített verziójából. További információ: Tárolóalapú függvényalkalmazások létrehozása.
Prerequisites
A kezdés előtt a következő követelményekkel kell rendelkeznie:
Telepítse a .NET 8.0 SDK-t.
Telepítse az Azure Functions Core Tools 4.0.5198-es vagy újabb verzióját.
- Telepítse az Azure Functions Core Tools 4.x-es verzióját.
- Telepítse az Azure Functions által támogatottNode.js verzióját.
- Telepítse az Azure Functions által támogatott Python-verziót.
- Telepítse a .NET 6 SDK-t.
Telepítse az Azure Functions által támogatott Java Developer Kit-verziót.
Telepítse az Apache Maven 3.0-s vagy újabb verzióját.
- Az Azure CLI 2.4-es vagy újabb verziója.
Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
A tárolóregisztrációs adatbázisban létrehozott tárolóalapú függvényalkalmazás-rendszerkép közzétételéhez a helyi számítógépen futó Docker-azonosítóra és Dockerre van szükség. Ha nem rendelkezik Docker-azonosítóval, létrehozhat egy Docker-fiókot.
A beállításjegyzék-példány létrehozásához a Tárolóregisztrációs adatbázis gyorsútmutatójának Tárolóregisztrációs adatbázis létrehozása szakaszát is be kell fejeznie. Jegyezze fel a teljes bejelentkezési kiszolgáló nevét.
Virtuális környezet létrehozása és aktiválása
Egy megfelelő mappában futtassa az alábbi parancsokat egy virtuális környezet .venvlétrehozásához és aktiválásához. Mindenképpen használja az Azure Functions által támogatott Python-verziókat .
python -m venv .venv
source .venv/bin/activate
Ha a Python nem telepítette a venv-csomagot a Linux-disztribúcióra, futtassa a következő parancsot:
sudo apt-get install python3-venv
Ebben az aktivált virtuális környezetben minden további parancsot futtat.
A helyi függvényprojekt létrehozása és tesztelése
Egy terminálban vagy parancssorban futtassa a következő parancsot a választott nyelvhez egy függvényalkalmazás-projekt létrehozásához az aktuális mappában:
func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker
Egy üres mappában futtassa a következő parancsot a Functions-projekt Maven-archetípusból való létrehozásához:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker
A -DjavaVersion paraméter közli a Functions futtatókörnyezetével, hogy melyik Java-verziót használja. Használja a -DjavaVersion=11 kapcsolót, ha a függvényeket Java 11-en szeretné futtatni. Ha nem adja meg -DjavaVersion, a Maven alapértelmezés szerint Java 8 lesz. További információ: Java-verziók.
Important
A JAVA_HOME cikk elvégzéséhez a környezeti változót a JDK megfelelő verziójának telepítési helyére kell állítani.
A Maven a projekt üzembe helyezéshez szükséges értékeit kéri. Kövesse az utasításokat, és adja meg a következő információkat:
| Prompt | Value | Description |
|---|---|---|
| groupId | com.fabrikam |
Olyan érték, amely egyedileg azonosítja a projektet az összes projektben, a Java csomagelnevezési szabályait követve. |
| artifactId | fabrikam-functions |
Olyan érték, amely a jar neve, verziószám nélkül. |
| version | 1.0-SNAPSHOT |
Válassza ki az alapértelmezett értéket. |
| package | com.fabrikam.functions |
Egy érték, amely a létrehozott függvénykód Java-csomagja. Használja az alapértelmezettet. |
Írja be Y vagy nyomja le az Enter billentyűt a megerősítéshez.
A Maven egy artifactId nevű új mappában hozza létre a projektfájlokat, amely ebben a példában az fabrikam-functions.
A --docker beállítás létrehoz egy Docker-fájlt a projekthez, amely egy megfelelő tárolót határoz meg az Azure Functionsben és a kiválasztott futtatókörnyezetben való használatra.
Navigáljon a projektmappába:
cd fabrikam-functions
Az alábbi paranccsal hozzáadhat egy függvényt a projekthez, ahol az --name argumentum a függvény egyedi neve, az --template argumentum pedig a függvény eseményindítóját határozza meg.
func new C#-kódfájlt hoz létre a projektben.
func new --name HttpExample --template "HTTP trigger"
Az alábbi paranccsal hozzáadhat egy függvényt a projekthez, ahol az --name argumentum a függvény egyedi neve, az --template argumentum pedig a függvény eseményindítóját határozza meg.
func new egy function.jsonnevű konfigurációs fájlt tartalmazó függvénynévnek megfelelő almappát hoz létre.
func new --name HttpExample --template "HTTP trigger"
A függvény helyi teszteléséhez indítsa el a helyi Azure Functions futtatókörnyezet-gazdagépet a projektmappa gyökerében.
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
Miután látta a HttpExample kimenetre írt végpontot, lépjen erre a végpontra. A válasz kimenetében egy üdvözlő üzenetnek kell megjelennie.
Miután látta a HttpExample kimenetre írt végpontot, lépjen a következőre http://localhost:7071/api/HttpExample?name=Functions: . A böngészőnek meg kell jelennie egy "hello" üzenetnek, amely visszaköszön Functionsa lekérdezési paraméterhez megadott értékre name .
A gazdagép leállításához nyomja le a Ctrl+C gombokat (macOS rendszeren a Command+C gombokat).
A tárolólemezkép létrehozása és helyi ellenőrzése
(Nem kötelező) Vizsgálja meg a Dockerfile-t a projektmappa gyökerében. A Dockerfile leírja a függvényalkalmazás Linuxon való futtatásához szükséges környezetet. Az Azure Functions támogatott alaprendszerképeinek teljes listája az Azure Functions alaprendszerkép oldalán található.
A gyökérprojekt mappában futtassa a docker build parancsot, adjon meg egy nevet azurefunctionsimage, és címkézze meg v1.0.0. A <DOCKER_ID> helyére a Docker Hub-fiók azonosítóját írja. Ez a parancs létrehozza a tároló Docker-rendszerképét.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
A parancs befejeződésekor helyileg futtathatja az új tárolót.
A build ellenőrzéséhez futtassa a lemezképet egy helyi tárolóban a Docker-futtatási paranccsal, cserélje le <DOCKER_ID> ismét a Docker Hub-fiók azonosítójára, és adja hozzá a portok argumentumát a következőként -p 8080:80:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
Miután a rendszerkép a helyi tárolóban kezdődött, keresse meg http://localhost:8080/api/HttpExamplea következőt, amelynek ugyanazt az üdvözlő üzenetet kell megjelenítenie, mint korábban. Mivel a létrehozott HTTP-aktivált függvény névtelen hitelesítést használ, meghívhatja a tárolóban futó függvényt anélkül, hogy hozzáférési kulcsot kellene beszereznie. További információ: engedélyezési kulcsok.
Miután a rendszerkép a helyi tárolóban kezdődött, keresse meg http://localhost:8080/api/HttpExample?name=Functionsa következőt, amelynek ugyanazt a "hello" üzenetet kell megjelenítenie, mint korábban. Mivel a létrehozott HTTP-aktivált függvény névtelen hitelesítést használ, meghívhatja a tárolóban futó függvényt anélkül, hogy hozzáférési kulcsot kellene beszereznie. További információ: engedélyezési kulcsok.
Miután ellenőrizte a függvényalkalmazást a tárolóban, a végrehajtás leállításához nyomja le a CtrlC+ (macOS-en aC+).
A tárolólemezkép közzététele egy beállításjegyzékben
Ha elérhetővé szeretné tenni a tárolólemezképet egy üzemeltetési környezetben való üzembe helyezéshez, le kell küldenie egy tárolóregisztrációs adatbázisba. Ajánlott biztonsági eljárásként egy Azure Container Registry-példányt kell használnia, és felügyelt identitásalapú kapcsolatokat kell kikényszerítenie. A Docker Hub megköveteli, hogy közös titkos kódokkal hitelesítse magát, ami sebezhetőbbé teszi az üzemelő példányokat.
Az Azure Container Registry egy privát beállításjegyzék-szolgáltatás a tárolólemezképek és a kapcsolódó összetevők létrehozásához, tárolásához és kezeléséhez. A tárolók Azure-szolgáltatásokban való közzétételéhez magánregisztrációs szolgáltatást kell használnia.
Ezzel a paranccsal jelentkezzen be a beállításjegyzék-példányba a jelenlegi Azure-hitelesítő adataival:
az acr login --name <REGISTRY_NAME>Az előző parancsban cserélje le
<REGISTRY_NAME>a Container Registry-példány nevét.Ezzel a paranccsal címkézheti meg a rendszerképet a regisztrációs adatbázis bejelentkezési kiszolgálójának teljes nevével:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0Cserélje le
<LOGIN_SERVER>a regisztrációs adatbázis bejelentkezési kiszolgálójának teljes nevét és<DOCKER_ID>a Docker-azonosítóját.Ezzel a paranccsal leküldheti a tárolót a beállításjegyzék-példányba:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Támogató Azure-erőforrások létrehozása a függvényhez
Mielőtt üzembe helyezheti a tárolót az Azure-ban, három erőforrást kell létrehoznia:
- Egy erőforráscsoport, amely a kapcsolódó erőforrások logikai tárolója.
- Storage-fiók, amely az állapot és a függvényekkel kapcsolatos egyéb információk fenntartására szolgál.
- Egy Log Analytics-munkaterülettel rendelkező Azure Container Apps-környezet.
- Felhasználó által hozzárendelt felügyelt identitás, amely lehetővé teszi, hogy a függvényalkalmazás biztonságosan csatlakozzon az Azure-erőforrásokhoz megosztott titkos kódok használata nélkül. Az Azure Storage-fiókhoz és az Azure Container Registry-példányhoz való kapcsolatok ehelyett Microsoft Entra-hitelesítéssel jönnek létre az identitással, ami ebben a forgatókönyvben ajánlott.
Note
A Docker Hub nem támogatja a felügyelt identitásokat.
Az alábbi parancsokkal hozhatja létre a szükséges Azure-erőforrásokat:
Ha szükséges, jelentkezzen be az Azure-ba:
A
az loginparancs bejelentkezik az Azure-fiókjába. Akkor használjaaz account set, ha több előfizetése van a fiókjához társítva.Futtassa a következő parancsot az Azure CLI legújabb verziójára való frissítéséhez:
az upgradeHa az Azure CLI nem a legújabb verzió, elindul a telepítés. A frissítési mód az operációs rendszertől függ. A frissítés befejezése után folytathatja a műveletet.
Futtassa a következő parancsokat, amelyek frissítik az Azure Container Apps bővítményt, és regisztrálják a Container Apps által igényelt névtereket:
az extension add --name containerapp --upgrade -y az provider register --namespace Microsoft.Web az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsightsHozzon létre egy erőforráscsoportot .
AzureFunctionsContainers-rgaz group create --name AzureFunctionsContainers-rg --location eastusEz a
az group createparancs létrehoz egy erőforráscsoportot az USA keleti régiójában. Ha ehelyett egy Önhöz közeli régiót szeretne használni, használja az az account list-locations parancsból visszaadott elérhető régiókódot. A következő parancsokat módosítania kell az egyéni régióeastushelyett.Azure Container App-környezet létrehozása engedélyezett számítási feladatprofilokkal.
az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastusA parancs futtatása eltarthat néhány percig.
Hozzon létre egy általános célú tárfiókot az erőforráscsoportban és a régióban megosztott kulcshozzáférés nélkül.
az storage account create --name <STORAGE_NAME> --location eastus --resource-group AzureFunctionsContainers-rg --sku Standard_LRS --allow-blob-public-access false --allow-shared-key-access falseA
az storage account createparancs létrehozza azt a tárfiókot, amely csak olyan Microsoft Entra által hitelesített identitások használatával érhető el, amelyek adott erőforrásokhoz kaptak engedélyeket.Az előző példában cserélje le
<STORAGE_NAME>az Ön számára megfelelő és az Azure Storage-ban egyedi nevet. A tárneveknek csak 3–24 karakterből álló számokat és kisbetűket kell tartalmazniuk.Standard_LRSa Functions által támogatott általános célú fiókot határoz meg.Hozzon létre egy felügyelt identitást, és használja a visszaadott
principalIdazonosítót, hogy hozzáférést biztosítson a tárfiókhoz, és lekérje az engedélyeket a beállításjegyzék-példányban.principalId=$(az identity create --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --location eastus --query principalId -o tsv) acrId=$(az acr show --name <REGISTRY_NAME> --query id --output tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role acrpull --scope $acrId storageId=$(az storage account show --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --role "Storage Blob Data Owner" --scope $storageIdA
az identity createparancs létrehoz egy felhasználó által hozzárendelt felügyelt identitást, és aaz role assignment createparancsok hozzáadják az identitást a szükséges szerepkörökhöz.<REGISTRY_NAME><USER_IDENTITY_NAME>Cserélje le<STORAGE_NAME>a meglévő tárolóregisztrációs adatbázis nevét, a felügyelt identitás nevét és a tárfiók nevét. A felügyelt identitást mostantól egy alkalmazás használhatja a tárfiók és az Azure Container Registry eléréséhez megosztott titkos kulcsok használata nélkül.
Függvényalkalmazás létrehozása és konfigurálása az Azure-ban a rendszerképpel
Az Azure-beli függvényalkalmazások felügyelik a függvények végrehajtását az Azure Container Apps-környezetben. Ebben a szakaszban az előző szakaszban szereplő Azure-erőforrások használatával hozhat létre függvényalkalmazást egy tárolóregisztrációs adatbázis lemezképéből egy Container Apps-környezetben. Emellett konfigurálja az új környezetet egy kapcsolati sztring a szükséges Azure Storage-fiókhoz.
az functionapp create A paranccsal függvényalkalmazást hozhat létre az Azure Container Apps által támogatott új felügyelt környezetben. Ebben az functionapp createa paraméter a --environment Container Apps-környezetet adja meg.
Tip
Ha meg szeretné győződni arról, hogy a függvényalkalmazás felügyelt identitásalapú kapcsolatot használ a beállításjegyzék-példányhoz, ne állítsa be a paramétert a --image következőben az functionapp create: . Amikor a rendszerkép teljes nevét állítja be --image az adattárban, a rendszer lekérte a megosztott titkos hitelesítő adatokat a beállításjegyzékből, és az alkalmazásbeállításokban tárolja.
Először le kell szereznie a felhasználó által hozzárendelt felügyelt identitás teljes azonosítóértékét a beállításjegyzékhez való lekéréses hozzáféréssel, majd a az functionapp create paranccsal létre kell hoznia egy függvényalkalmazást az alapértelmezett rendszerkép használatával és ehhez az identitáshoz rendelve.
UAMI_RESOURCE_ID=$(az identity show --name $uami_name --resource-group $group --query id -o tsv)
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --assign-identity $UAMI_RESOURCE_ID
Ebben az functionapp createaz esetben a --assign-identity felügyelt identitást rendeli hozzá az új alkalmazáshoz. Mivel nem állította be a --image paramétert az functionapp create, az alkalmazás helyőrző rendszerkép használatával jön létre.
Ebben a példában cserélje le <APP_NAME>a , <STORAGE_NAME>és <USER_IDENTITY_NAME> az új függvényalkalmazás nevét, valamint a tárfiók nevét és az identitást.
Végül frissítenie kell a linuxFxVersion webhelybeállítást az adattárban lévő kép teljes nevére. Frissítenie kell a hely és acrUseManagedIdentityCreds a acrUserManagedIdentityID hely beállításait is, hogy a rendszerkép a beállításjegyzékből való lekérésekor használhassa a felügyelt identitásokat.
UAMI_RESOURCE_ID=$(az identity show --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --query id -o tsv)
az resource patch --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --resource-type "Microsoft.Web/sites" --properties "{ \"siteConfig\": { \"linuxFxVersion\": \"DOCKER|<REGISTRY_NAME>.azurecr.io/azurefunctionsimage:v1.0.0\", \"acrUseManagedIdentityCreds\": true, \"acrUserManagedIdentityID\":\"$UAMI_RESOURCE_ID\", \"appSettings\": [{\"name\": \"DOCKER_REGISTRY_SERVER_URL\", \"value\": \"<REGISTRY_NAME>.azurecr.io\"}]}}"
A szükséges helybeállítások mellett a az resource patch parancs az alkalmazásbeállítást DOCKER_REGISTRY_SERVER_URL a beállításjegyzék-kiszolgáló URL-címére is frissíti.
Ebben a példában cserélje le <APP_NAME>a függvényalkalmazás <REGISTRY_NAME>, a tárolóregisztrációs adatbázis és <USER_IDENTITY_NAME> az identitás nevét.
--workload-profile-name "Consumption" A beállítás az alapértelmezett Consumption számítási feladatprofil használatával hozza létre az alkalmazást egy környezetben, amely ugyanúgy kerül, mint egy Container Apps Consumption-csomagban való futtatás. A függvényalkalmazás első létrehozásakor a rendszer lekéri a kezdeti lemezképet a beállításjegyzékből.
Alkalmazásbeállítások frissítése
Ha engedélyezni szeretné, hogy a Functions-gazdagép megosztott titkos kulcsok használatával csatlakozzon az alapértelmezett tárfiókhoz, a AzureWebJobsStorage kapcsolati sztring beállítást olyan egyenértékű beállításra kell cserélnie, amely a felhasználó által hozzárendelt felügyelt identitást használja a tárfiókhoz való csatlakozáshoz.
Távolítsa el a meglévő
AzureWebJobsStoragekapcsolati sztring beállítást:az functionapp config appsettings delete --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --setting-names AzureWebJobsStorageAz az functionapp config appsettings delete parancs eltávolítja ezt a beállítást az alkalmazásból. Cserélje le
<APP_NAME>a függvényalkalmazás nevére.Adjon hozzá egyenértékű beállításokat egy
AzureWebJobsStorage__előtaggal, amely felhasználó által hozzárendelt felügyelt identitáskapcsolatot határoz meg az alapértelmezett tárfiókhoz:clientId=$(az identity show --name <USER_IDENTITY_NAME> --resource-group AzureFunctionsContainers-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientIdEbben a példában cserélje le
<APP_NAME>a függvényalkalmazás<USER_IDENTITY_NAME><STORAGE_NAME>nevét, az identitás nevét és a tárfiók nevét.
Ezen a ponton a függvények egy Container Apps-környezetben futnak, és már hozzáadták a szükséges alkalmazásbeállításokat. Szükség esetén más beállításokat is hozzáadhat a függvényalkalmazáshoz a Függvények szokásos módján. További információ: Alkalmazásbeállítások használata.
Tip
A függvénykód későbbi módosításakor újra kell építenie a tárolót, újra közzé kell tennie a lemezképet a beállításjegyzékben, és frissítenie kell a függvényalkalmazást az új rendszerképverzióval. További információ: Lemezkép frissítése a beállításjegyzékben
A függvények ellenőrzése az Azure-ban
Az Azure-ban a függvényalkalmazásban üzembe helyezett rendszerkép használatával mostantól HTTP-kérésekkel hívhatja meg a függvényt.
Futtassa a következő
az functionapp function showparancsot az új függvény URL-címének lekéréséhez:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplateCserélje le
<APP_NAME>a függvényalkalmazás nevére.
- Használja az imént beszerzett URL-címet a
HttpExamplefüggvényvégpont meghívásához a lekérdezési sztring?name=Functionshozzáfűzésével.
- Használja az imént beszerzett URL-címet a függvényvégpont meghívásához
HttpExample.
Ha erre az URL-címre lép, a böngészőnek hasonló kimenetet kell megjelenítenie, mint a függvény helyi futtatásakor.
A kérelem URL-címének így kell kinéznie:
https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions
https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample
Az erőforrások eltávolítása
Ha továbbra is használni szeretné az Azure-függvényt a cikkben létrehozott erőforrások használatával, ezeket az erőforrásokat a helyén hagyhatja.
Ha végzett ezzel a függvényalkalmazás-telepítéssel, törölje az AzureFunctionsContainers-rg erőforráscsoportot a csoport összes erőforrásának törléséhez:
az group delete --name AzureFunctionsContainers-rg