Azure Functions là 1 giải pháp để thực hiện dễ dàng những đoạn code nhỏ, hoặc “functions” trên cloud. Bạn không cần quan tâm đến đến các thành phần khác như ngôn ngữ, hạ tầng, hoặc server. Vì Azure Functioin hỗ trợ nhiều ngôn ngữ lập trình như C#, F#, Node.js, Java, hoặc PHP.
Hoặc nếu bạn đang muốn chuyển đổi ứng dụng từ on-premises lên cloud, thì bạn thử suy nghĩ đến phương án Azure Function.
Azure Functions, Function Apps, và Functions
Khi bạn làm việc Azure Functions, bạn sẽ gặp rất nhiều thuật ngữ liên quan tới "functions".
- Azure Functions: Đây là tên dịch vụ trên Azure. Một số dịch vụ khác của Azure như Azure Automation, Azure Virtual Machines, hoặc Azure Storage Accounts.
(Bên AWS có AWS Lambda, Google có Google Cloud Functions) - Function App: Đây là 1 instance của Azure Functions. Đây là ứng dụng duy nhất
- Function: một hàm trong code. Bạn có thể có nhiều hàm (1-n) trong Function App.
Có 2 loại Function App:
- Functions chứa C# script (.csx) file
- In-Process Class Library Functions
Các loại trigger trong Function App
- HTTP trigger: cho phép gọi chức năng bằng một yêu cầu HTTP GET hoặc POST.
- Timer trigger: cho phép chạy chức năng theo các khoảng thời gian xác định trước
- Blob trigger: cho phép chạy chức năng khi một tệp được tải lên hoặc cập nhật trong Azure Blob Storage.
- Queue trigger: cho phép chạy chức năng khi một tin nhắn mới được thêm vào Azure Queue Storage.
- Event Hub trigger: cho phép chạy chức năng khi một sự kiện mới được gửi đến Azure Event Hubs.
- Cosmos DB trigger: cho phép chạy chức năng khi một row mới được tạo hoặc cập nhật trong Azure Cosmos DB.
- ...
Ví dụ
Trong ví dụ này, mình sẽ tạo 1 Function App sử dụng HTTP Trigger.
Bao gồm các bước:
- Tạo Function App
- Tạo Funciton với trigger. Trong bài viết này, mình sử dụng HTTP Trigger
- Test Function App
Nhấp vào Create a resource, sau đó chọn Compute > Function App. Bạn điền thông tin để tạo mới 1 Function App. Sau đó bấm nút Create để tạo mới và deploy Function App.
Bạn có thể theo dõi trạng thái của deploy bằng cách nhấp vào Notification ở góc bên phải của Portal.
Tạo 1 Function Http Trigger
Nhấp vào nút + Create để tạo 1 Function mới.
Sau đó bạn chọn HTTP Trigger.
Để test Function, bạn nhấp vào nút Get function URL để lấy link. Azure sẽ cung cấp cho bạn 1 URL với default key.
Bạn có thể đổi function key bằng cách vào: Function -> Your function app name -> Develop => Chọn Funciton Keys
Ví dụ
Test Function App
Ở bước trước, bạn có Funciton url giống như sau:
https://<function-app-name>.azurewebsites.net/api/LoggerFunction?code=<Defaultkey>
Sau đó bạn thêm vào query string giá trị: &name=<your-name>. Paste vào browser, bạn sẽ thấy kết quả:
Hello, anbinhtrong. This HTTP triggered function executed successfully.
Ngoài ra, bạn có thể test trực tiếp trên Azure portal bằng cách click vào Test, điền parameters cần thiết, rồi nhấp nút Run.Ví dụ sử dụng Model
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
Trong thực tế, bạn cần gởi lên 1 object hơn là gởi lên 1 vài value đơn giản. Ví dụ bạn cần gởi lên 1 object Order với các property: OrderId, ProductId, Email, và Price.
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public class Order{
public int OrderId { get; set;}
public int ProductId { get; set;}
public string Email { get; set;}
public decimal Price { get; set;}
}
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("Order received");
string jsonString = await new StreamReader(req.Body).ReadToEndAsync();
var order = JsonConvert.DeserializeObject<Order>(jsonString);
log.LogInformation($"Order {order.OrderId} received from {order.Email} for product {order.ProductId}");
string responseMessage = "Thank you for your order!";
return new OkObjectResult(responseMessage);
}
Sau đó bạn bấm Save. Thực hiện test với dữ liệu.
{
"orderId": 2511,
"productId": 100,
"email": "abc@nhatkyhoctap.com",
"price": 100
}
Kết quả
Ví dụ 3: Sử dụng thư viện System.Text.Json
- Thêm tham chiếu đến package System.Text.Json bằng cách sử dụng lệnh #r "System.Text.Json"
- Sử dụng phương thức JsonSerializer.Deserialize<T> để chuyển đổi một chuỗi json thành một đối tượng của kiểu T
#r "System.Text.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using System.Text.Json;
public class Order{
public int OrderId { get; set;}
public int ProductId { get; set;}
public string Email { get; set;}
public decimal Price { get; set;}
}
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("Order received");
string jsonString = await new StreamReader(req.Body).ReadToEndAsync();
var order = JsonSerializer.Deserialize<Order>(jsonString);
log.LogInformation($"Order {order.OrderId} received from {order.Email} for product {order.ProductId}");
string responseMessage = "Thank you for your order!";
return new OkObjectResult(responseMessage);
}
https://stackoverflow.com/questions/42077229/switch-between-dotnet-core-sdk-versions
Trả lờiXóa