Hızlı Başlangıç: Azure Geliştirici CLI'sini kullanarak işlevleri oluşturma ve Azure İşlevleri dağıtma
Bu Hızlı Başlangıçta, HTTP isteklerine yanıt veren işlevler oluşturmak için Azure Geliştirici komut satırı araçlarını kullanacaksınız. Kodu yerel olarak test ettikten sonra, Azure İşlevleri bir Flex Tüketim planında çalıştırarak oluşturduğunuz yeni bir sunucusuz işlev uygulamasına dağıtırsınız.
Proje kaynağı, kodunuzu Azure'a dağıtmayı kolaylaştırmak için Azure Geliştirici CLI'sini (azd) kullanır. Bu dağıtım, güvenli ve ölçeklenebilir Azure İşlevleri dağıtımları için geçerli en iyi yöntemleri izler.
Flex Tüketim planı varsayılan olarak kullansanız ne kadar öde faturalama modelini izler ve bu da bu hızlı başlangıcı tamamlamak için Azure hesabınızda birkaç ABD doları veya daha az bir maliyete neden olur.
Önkoşullar
Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
temel araçları Azure İşlevleri.
- Java 17 Geliştirici Seti
- Java'nın desteklenen başka bir sürümünü kullanıyorsanız projenin pom.xml dosyasını güncelleştirmeniz gerekir.
- Ortam değişkeni,
JAVA_HOME
JDK'nin doğru sürümünün yükleme konumuna ayarlanmalıdır.
- Apache Maven 3.8.x
- İşlev uç noktalarınıza JSON yükleriyle istek göndermek için güvenli bir HTTP test aracı. Bu makalede kullanılır
curl
.
Projeyi başlatma
Komutunu kullanarak azd init
bir şablondan yerel Azure İşlevleri kod projesi oluşturabilirsiniz.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-dotnet-azd -e flexquickstart-dotnet
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Uygulama klasörüne gitmek için
http
şu komutu çalıştırın:cd http
Bu JSON verilerini içeren klasörde local.settings.json
http
adlı bir dosya oluşturun:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template azure-functions-java-flex-consumption-azd -e flexquickstart-java
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Uygulama klasörüne gitmek için
http
şu komutu çalıştırın:cd http
Bu JSON verilerini içeren klasörde local.settings.json
http
adlı bir dosya oluşturun:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-javascript-azd -e flexquickstart-js
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-powershell-azd -e flexquickstart-ps
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Uygulama klasörüne gitmek için
src
şu komutu çalıştırın:cd src
Bu JSON verilerini içeren klasörde local.settings.json
src
adlı bir dosya oluşturun:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-typescript-azd -e flexquickstart-ts
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Yerel terminalinizde veya komut isteminizde şu
azd init
komutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-python-http-azd -e flexquickstart-py
Bu komut, proje dosyalarını şablon deposundan çeker ve projeyi kök klasörde başlatır. bayrağı geçerli
-e
ortam için bir ad ayarlar. içindeazd
, ortamı uygulamanız için benzersiz bir dağıtım bağlamını korumak için kullanılır ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ayrıca Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.Bu JSON verilerini içeren kök klasörde local.settings.json adlı bir dosya oluşturun:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }
Bu dosya yerel olarak çalıştırılırken gereklidir.
Sanal ortam oluşturma ve etkinleştirme
Kök klasörde şu komutları çalıştırarak adlı .venv
bir sanal ortam oluşturun ve etkinleştirin:
python3 -m venv .venv
source .venv/bin/activate
Python venv paketini Linux dağıtımınıza yüklemediyse aşağıdaki komutu çalıştırın:
sudo apt-get install python3-venv
Yerel ortamınızda çalıştırma
Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:
func start
mvn clean package mvn azure-functions:run
npm install func start
npm install npm start
İşlevler konağı yerel proje klasörünüzde başlatıldığında, HTTP ile tetiklenen işlevlerinizin URL uç noktalarını terminal çıkışına yazar.
Tarayıcınızda şu URL'ye
httpget
benzeyen uç noktaya gidin:Yeni bir terminal veya komut istemi penceresinden şu
curl
komutu çalıştırarak uç noktaya JSON yükünehttppost
sahip bir POST isteği gönderin:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
Bu komut proje dosyasından
testdata.json
JSON yük verilerini okur. Her iki HTTP isteğinintest.http
örneklerini proje dosyasında bulabilirsiniz.İşiniz bittiğinde, ana bilgisayar işlemini durdurmak
func.exe
için terminal penceresinde Ctrl+C tuşlarına basın.
- Sanal ortamı kapatmak için komutunu çalıştırın
deactivate
.
Kodu gözden geçirme (isteğe bağlı)
İki HTTP tetikleyici işlevi uç noktasını tanımlayan kodu gözden geçirebilirsiniz:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
Bu function.json
dosya işlevi httpget
tanımlar:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Bu run.ps1
dosya işlev kodunu uygular:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
Şablon projesinin tamamını burada gözden geçirebilirsiniz.
İşlevlerinizi yerel olarak doğruladıktan sonra, bunları Azure'da yayımlamanın zamanı geldi.
Azure kaynakları oluşturma
Bu proje, gerekli diğer Azure kaynaklarıyla birlikte Flex Consumption planında işlev uygulaması oluşturmak için komutunu kullanacak azd provision
şekilde yapılandırılmıştır.
Not
Bu proje, en iyi yöntemleri izleyen azd
bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanan bicep dosyaları kümesini içerir.
azd up
ve azd deploy
komutları şu anda Java uygulamaları için desteklenmemekte.
Projenin kök klasöründe şu komutu çalıştırarak gerekli Azure kaynaklarını oluşturun:
azd provision
Kök klasör, için
azd
gereken tanım dosyasını içerirazure.yaml
.Henüz oturum açmadıysanız Azure hesabınızla kimlik doğrulaması yapmanız istenir.
İstendiğinde şu gerekli dağıtım parametrelerini sağlayın:
Parametre Açıklama Azure Aboneliği Kaynaklarınızın oluşturulduğu abonelik. Azure konumu Yeni Azure kaynaklarını içeren kaynak grubunun oluşturulacağı Azure bölgesi. Yalnızca şu anda Esnek Tüketim planını destekleyen bölgeler gösterilir. Komut,
azd provision
bu gerekli Azure kaynaklarını oluşturmak ve yapılandırmak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtınızı kullanır:- Esnek Tüketim planı ve işlev uygulaması
- Azure Depolama (gerekli) ve Application Insights (önerilir)
- Hesabınız için ilkelere ve rollere erişme
- Yönetilen kimlikleri kullanan hizmet-hizmet bağlantıları (depolanan bağlantı dizesi yerine)
- Hem işlev uygulamasını hem de diğer Azure kaynaklarını güvenli bir şekilde çalıştırmak için sanal ağ
Komut başarıyla tamamlandıktan sonra proje kodunuzu Azure'daki bu yeni işlev uygulamasına dağıtabilirsiniz.
Azure’a dağıtın
Kodunuzu paketlemek ve çıkış klasöründen Azure'a target
dağıtmak için Core Tools'ı kullanabilirsiniz.
Çıkış klasöründeki uygulama klasörü eşdeğerine
target
gidin:cd http/target/azure-functions/contoso-functions
Bu klasörde, derlenmiş Java işlev uygulamanızın kökü olduğunu gösteren bir host.json dosyası olmalıdır.
Derlenmiş Java kod projenizi Core Tools kullanarak Azure'daki yeni işlev uygulaması kaynağına dağıtmak için şu komutları çalıştırın:
komutu
azd env get-value
, işlev uygulamanızın adını kullanarakfunc azure functionapp publish
dağıtım için gereken yerel ortamdan alır. Yayımlama başarıyla tamamlandıktan sonra Azure'da HTTP tetikleyici uç noktalarına bağlantılar görürsünüz.
Azure’a dağıtın
Bu proje, bu projeyi Azure'daki Flex Consumption planındaki yeni bir işlev uygulamasına dağıtmak için komutunu kullanacak azd up
şekilde yapılandırılmıştır.
İpucu
Bu proje, en iyi yöntemleri izleyen azd
bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanan bicep dosyaları kümesini içerir.
Azure'da
azd
gerekli Azure kaynaklarını oluşturmak ve kod projenizi yeni işlev uygulamasına dağıtmak için şu komutu çalıştırın:azd up
Kök klasör, için
azd
gereken tanım dosyasını içerirazure.yaml
.Henüz oturum açmadıysanız Azure hesabınızla kimlik doğrulaması yapmanız istenir.
İstendiğinde şu gerekli dağıtım parametrelerini sağlayın:
Parametre Açıklama Azure Aboneliği Kaynaklarınızın oluşturulduğu abonelik. Azure konumu Yeni Azure kaynaklarını içeren kaynak grubunun oluşturulacağı Azure bölgesi. Yalnızca şu anda Esnek Tüketim planını destekleyen bölgeler gösterilir. Komut,
azd up
bu dağıtım görevlerini tamamlamak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtınızı kullanır:Bu gerekli Azure kaynaklarını oluşturun ve yapılandırın (eşdeğeri
azd provision
):- Esnek Tüketim planı ve işlev uygulaması
- Azure Depolama (gerekli) ve Application Insights (önerilir)
- Hesabınız için ilkelere ve rollere erişme
- Yönetilen kimlikleri kullanan hizmet-hizmet bağlantıları (depolanan bağlantı dizesi yerine)
- Hem işlev uygulamasını hem de diğer Azure kaynaklarını güvenli bir şekilde çalıştırmak için sanal ağ
Kodunuzu paketleyin ve dağıtım kapsayıcısına dağıtın (eşdeğeri
azd deploy
). Ardından uygulama başlatılır ve dağıtılan pakette çalıştırılır.
Komut başarıyla tamamlandıktan sonra, oluşturduğunuz kaynakların bağlantılarını görürsünüz.
İşlevi Azure'da çağırma
Artık HTTP test aracınızı kullanarak veya tarayıcıdan (GET istekleri için) URL'lerine HTTP isteklerinde bulunarak Azure'daki işlev uç noktalarınızı çağırabilirsiniz. İşlevleriniz Azure'da çalıştırıldığında erişim anahtarı yetkilendirmesi zorlanır ve isteğinizle birlikte bir işlev erişim anahtarı sağlamanız gerekir.
Azure'da çalışan işlevlerinizin URL uç noktalarını almak için Temel Araçlar'ı kullanabilirsiniz.
Yerel terminalinizde veya komut isteminizde şu komutları çalıştırarak URL uç noktası değerlerini alın:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keys
komut,
azd env get-value
işlev uygulamanızın adını yerel ortamdan alır. ile seçeneğinin--show-keys
kullanılması, her uç nokta için döndürülen Invoke URL: değerinin işlev düzeyinde bir erişim anahtarı içerdiği anlamınafunc azure functionapp list-functions
gelir.Daha önce olduğu gibi, Azure'da çalışan işlev uygulamanızda bu URL'leri doğrulamak için HTTP test aracınızı kullanın.
Kodunuzu yeniden dağıtma
Komutu hem Azure kaynaklarınızı sağlamak hem de işlev uygulamanıza kod güncelleştirmeleri dağıtmak için gerektiği kadar çalıştırabilirsiniz azd up
.
Not
Dağıtılan kod dosyalarının üzerine her zaman en son dağıtım paketi yazılır.
İstemlere ve tarafından azd
oluşturulan tüm ortam değişkenlerine azd
yönelik ilk yanıtlarınız adlandırılmış ortamınızda yerel olarak depolanır. azd env get-values
Azure kaynakları oluşturulurken kullanılan ortamınızdaki tüm değişkenleri gözden geçirmek için komutunu kullanın.
Kaynakları temizleme
İşlev uygulamanız ve ilgili kaynaklarınızla çalışmayı bitirdiğinizde, işlev uygulamasını ve ilgili kaynaklarını Azure'dan silmek ve başka maliyetlerle karşılaşmamak için bu komutu kullanabilirsiniz:
azd down --no-prompt
Not
seçeneği, --no-prompt
sizden onay almadan kaynak grubunuzu silmenizi belirtir azd
.
Bu komut yerel kod projenizi etkilemez.