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

Bài đăng

Hiển thị các bài đăng có nhãn Azure Functions

Hướng Dẫn Gửi Email Trong Azure Functions

Giới thiệu Gửi email từ Azure Functions là một tính năng phổ biến để gửi thông báo, báo cáo hoặc cập nhật cho người dùng. Bài viết này sẽ hướng dẫn bạn cấu hình SMTP và thiết lập DeliveryMethod trong ứng dụng Azure Functions Thực ra bài viết không có gì đặc biệt, ngoại trừ việc setup lưu email trong folder thay vì gởi đi trên môi trường Network. Các Phương Thức Gửi Email Network: Phương thức gửi email qua mạng đến máy chủ SMTP để thực sự gửi email cho người nhận. SpecifiedPickupDirectory: Thay vì gửi email, phương thức này lưu email dưới dạng file trong thư mục chỉ định. PickupDirectoryFromIis: Dùng để gửi email thông qua một thư mục pickup của IIS. Các bước Cấu Hình Và Gửi Email  Ở môi trường development, bạn cấu hình ở file local.settings.json { "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "SMTP_Host": "smtp.exampl...

Azure Functions: Blob Index tag và metadata

Trong bài viết này, chúng ta sẽ đi qua các khái niệm về container, blobName, metadata và blob index. Từ đó chúng ta sẽ dễ dàng quản lý file trên container Container Container là một thư mục ảo để chứa các blob. Mỗi container phải có một tên duy nhất trong storage account BlobName BlobName là tên của một blob. BlobName phải là duy nhất trong container. Ví dụ khi bạn mở Properties của 1 blob file trên Azure Overview Blob: TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e URL: https://abc-xyz.blob.core.windows.net/abc/TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e ... Metadata Key Value ... Blob index tags Key Value ... Trong đó: container: abc blobName: TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e Chúng ta triển khai hàm upload file như sau: //... var blobServiceClient = new BlobServiceClient(connectionString); _blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName); //... public BlobClient Upload(byte[] data, string blobName, string containerName) { var binaryData ...

Debug Event Grid ở localhost

Azure Event Grid là gì? Azure Event Grid là một dịch vụ event-driven, giúp bạn dễ dàng nhận và xử lý các sự kiện từ các nguồn khác nhau, chẳng hạn như Azure Blob Storage, Azure Queue Storage, Azure Service Bus, và các dịch vụ của bên thứ ba. Event Grid cung cấp một cách đơn giản để xây dựng các ứng dụng phản ứng với các sự kiện từ thế giới thực. Bạn có thể sử dụng Event Grid để: Nhận thông báo khi một tệp được tải lên Azure Blob Storage. Xử lý các yêu cầu từ một ứng dụng web. Theo dõi các hoạt động trong một cơ sở dữ liệu. Debug Event Grid trigger Sau khi tạo ứng dụng Azure Function, chọn Event Grid trigger, bạn sẽ thấy dòng đầu tiên trong code: http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname} Bạn định nghĩa functionName ở hàm Run, trong trường hợp này là training-export [FunctionName("training-export")] public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.Data.ToString()); }...

Giới thiệu về .NET Isolated Process Azure Functions

.NET Isolated Process Azure Functions .NET Isolated Process Functions là một mô hình triển khai Azure Function cho phép các hàm chạy trong một quy trình riêng biệt (isolated process), tách biệt khỏi Azure Functions Runtime. Đây là roadmap của isolated và in-process Azure Function   Sử dụng Isolated Process Azure Functions có nhiều lợi ích Quản lý quá trình app startup Cấu hình Dependency Injection Cấu hình middleware Tránh xung đột với các version với các class library Tạo project Azure Function Có 2 cách để tạo project Azure Function, 1 là tạo thông qua IDE (Visual Studio, Visual Studio Code), 2 là thông qua command line 1. Để tạo project từ command line, bạn cần cài đặt Azure Functions Core Tools tại đây Gõ lệnh func init ProjectName Chọn worker runtime là donet (isolated process) Use the up/down arrow keys to select a worker runtime: dotnet dotnet (isolated process) node python powershell custom 2. Trong Visual Studio, chọn Azure Function => tại Dialog A...

Azure Functions: Sử dụng Azurite để upload file - Day 7

Giới thiệu Azurite emulator là một phần mềm mã nguồn mở giả lập các dịch vụ Azure Storage trên môi trường local. Bạn có thể kiểm tra các ứng dụng sử dụng Azure Blob, Queue Storage và Table Storage mà không cần kết nối với tài khoản Azure Storage trên cloud Cài đặt - Sử dụng Visual Studio 2022, Azurite đã được cài đặt sẵn.  - Sử dụng Visual Studio Code, bạn có thể cài đặt tiện ích mở rộng Azurite.  - Sử dụng npm npm install -g azurite - Sử dụng Docker Hub, bạn có thể chạy lệnh docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 mcr.microsoft.com/azure-storage/azurite Kết nối Azurite bằng Microsoft Azure Storage Explorer Bạn có thể sử dụng Microsoft Azure Storage Explorer để xem và quản lý dữ liệu được lưu trữ trong Azurite. Để kết nối Azurite bằng Storage Explorer, bạn cần làm những bước sau đây Chạy Azurite trên máy local của bạn Mở Storage Explorer và chọn biểu tượng Connect Upload file lên Azurite ở local Các bước Tạo SAS URL Upload fiel Download file ...

Azure Functions: xUnit, Coverlet, và ReportGenerator - Day 6

Hôm nay mình sẽ giới thiệu về hai công cụ hữu ích cho việc kiểm thử phần mềm .NET: xUnit và ReportGenerator. Các bạn có thể sử dụng hai công cụ này để viết các test case, chạy các test case và tạo báo cáo code coverage cho các dự án của mình. Nội dung bao gồm: Unit Test là gì? Moq Object là gì? Code coverage là gì? Moq là gì?  xUnit là gì? ReportGenerator là gì? Cách cài đặt và sử dụng xUnit và ReportGenerator trong Visual Studio. Cách tạo báo cáo code coverage với ReportGenerator và xem kết quả trên trình duyệt. Unit Test là gì? Unit Test là một loại kiểm thử phần mềm trong đó các đơn vị hoặc thành phần riêng lẻ của một phần mềm được kiểm tra. Mục đích là để xác nhận rằng mỗi đơn vị của mã phần mềm hoạt động như mong đợi. Unit Test được thực hiện bởi các nhà phát triển trong quá trình phát triển (giai đoạn viết code) của một ứng dụng. Unit Test cô lập một đơn vị code và xác minh tính đúng đắn của nó. Một đơn vị có thể là một function, method, mô-đun hoặc đối tượng riêng lẻ. Các ...

Azure Functions: Sử dụng Dependency Injection - Day 5

IoC là gì? IoC là một nguyên lý thiết kế nổi tiếng với mục đích làm giảm sự phụ thuộc giữa các tầng, các thành phần và các lớp bằng cách nghịch đảo luồng điểu khiển của ứng dụng. Trong phương pháp lập trình truyền thống, việc kiểm soát luồng thực hiện chương trình và các lớp con được thực hiện 1 cách rất chặt chẽ thì IoC lại tách mã thực thi từ mã vấn đề cụ thể. Cách tiếp cận này cho phép các thành phần khác nhau được phát triển một cách độc lập. Ví dụ: trong ứng dụng MVC, lớp model, view và controller được thiết kế và xây dựng độc lập với nhau. Hai triển khai phổ biến của nguyên lý IoC là Dependency Injection (chống lại sự phụ thuộc) và service location. Dependency Injection Dependency Injection (DI) là một design pattern được sử dụng để triển khai IoC. Nó cho phép tạo ra các đối tượng phụ thuộc bên ngoài của một class và cung cấp các đối tượng đó cho class thông qua các cách khác nhau. Sử dụng DI, chúng ta di chuyển việc tạo ra và liên kết các đối tượng phụ thuộc ra k...

Azure Functions: Routing - Day 5

Routing là gì? Routing là quá trình ánh xạ (mapping) truy vấn HTTP với một đối tượng xử lý truy vấn đó (handler). Để sử dụng routing trong azure function apps, bạn cần thêm một thuộc tính Route vào thuộc tính HttpTrigger của chức năng của bạn. Thuộc tính Route sử dụng cú pháp đặt tên đường dẫn của ASP.NET Web API. Bạn có thể sử dụng các ký tự đặc biệt như { và } để xác định các tham số trong đường dẫn và sử dụng các ràng buộc để kiểm soát kiểu dữ liệu của routing Default Routing trong Azure Function Mặc định, khi bạn tạo mới HttpTrigger Function, bạn sẽ có đoạn code tương đương như sau: using System.IO; using System.Net; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; using Newtonsoft.Json; namespace Nhatkyhoctap.Functions { ...

Azure Functions: Thêm OpenAPI vào Azure Functions - Day 4

OpenAPI là một định dạng mô tả API dành cho các API dựa trên REST. Một file OpenAPI cho phép bạn mô tả toàn bộ API của bạn, bao gồm: Các endpoint (/users) và cách thức hoạt động của mỗi endpoint (GET /users, POST /users). Các parameter đầu vào và đầu ra của từng hoạt động. Phương thức xác thực. ... OpenAPI và swagger có liên quan chặt chẽ với nhau. OpenAPI là một định dạng mô tả API dành cho các API dựa trên REST. OpenAPI cho phép bạn mô tả các endpoint, phương thức, tham số, phản hồi, kiểu dữ liệu, xác thực và các thông tin khác của API một cách chi tiết và chuẩn xác. Swagger là một bộ công cụ hỗ trợ việc thiết kế, tạo, kiểm tra và tài liệu hóa các API tuân theo định dạng OpenAPI. Swagger bao gồm các công cụ như: Swagger Editor: cho phép bạn chỉnh sửa file OpenAPI bằng YAML trong trình duyệt và xem trước tài liệu một cách động Swagger UI: cho phép bạn hiển thị file OpenAPI dưới dạng tài liệu tương tác trong giao diện người dùng. Swagger Codegen: cho phép bạn sinh ra mã nguồn cho serve...

Kết hợp Newtonsoft.Json và System.Text.Json để xử lý đối tượng với chức năng serialization và Deserialization

Giới thiệu Các dữ liệu JSON thường được sử dụng trong ứng dụng web, đặc biệt là Web API, Serverless. Chính vì vậy từ .NET Core 3.0, Microsoft đã đưa System.Text.Json vào Framework và ngày càng xử lý tốt hơn. Trong bài viết này, mình sẽ tìm hiểu cách sử dụng cơ bản của 2 thư viện trên, và cách xử lý lỗi khi serialize object trên Azure Functions. JSON là gì? JSON là viết tắt của JavaScript Object Notation, là một kiểu định dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được. JSON là một tiêu chuẩn mở để trao đổi dữ liệu trên web. Serialize và deserializie là gì? Trong C#, serialization là quá trình chuyển đổi đối tượng sang byte stream để có thể lưu vào memory, file hoặc database. Quá trình ngược lại gọi là deserialization Serialize an object Deserialzie byte stream to object Ví dụ sử dụng serialization và deserialization Tạo 2 class Person và Pet class Person { public string Name { get; set; } public int Age { get; set; } ...