Chuyển đến nội dung chính

Azure Functions: Làm quen với Azure Functions- Day 1

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:

  1. Functions chứa C# script (.csx) file
  2. In-Process Class Library Functions

Các loại trigger trong Function App

Azure Function dựa trên event-driven. Thuộc tính này đề cập đến cách code trong Azure Fuction được thực thi. Có nhiều loại trigger trong Azure Function:
  • 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:

  1. Tạo Function App
  2. Tạo Funciton với trigger. Trong bài viết này, mình sử dụng HTTP Trigger
  3. 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

Đoạn code mà Azure generate sẵn cho chúng ta:
#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);
}
Mặc định, Azure Functions sẽ gọi Hàm Run(). Bạn có thể hiểu đây là Entry Point của Azure Functions

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

Các bước như sau:
  • 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);
}

Tham khảo

Azure Functions C# script (.csx) developer reference

Nhận xét

  1. https://stackoverflow.com/questions/42077229/switch-between-dotnet-core-sdk-versions

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.