Tiếng Việt

Khai phá sức mạnh của điện toán phi máy chủ với Google Cloud Functions. Hướng dẫn này khám phá các trình kích hoạt HTTP, cung cấp cho các nhà phát triển toàn cầu kiến thức để xây dựng các ứng dụng có thể mở rộng, theo hướng sự kiện.

Google Cloud Functions: Hướng dẫn Toàn diện về Trình kích hoạt HTTP

Google Cloud Functions (GCF) là một môi trường thực thi phi máy chủ cho phép bạn xây dựng và kết nối các dịch vụ đám mây. Với Cloud Functions, bạn viết các hàm đơn giản, mục đích duy nhất được gắn với các sự kiện phát ra từ cơ sở hạ tầng và dịch vụ đám mây của bạn. Hàm của bạn được thực thi khi sự kiện bạn đang theo dõi xảy ra. Cách tiếp cận này cho phép bạn phát triển các ứng dụng theo hướng sự kiện mà không cần quản lý máy chủ hoặc môi trường thời gian chạy.

Một trong những cách phổ biến nhất để kích hoạt một Cloud Function là thông qua một yêu cầu HTTP. Hướng dẫn này sẽ đi sâu vào thế giới của các trình kích hoạt HTTP trong Google Cloud Functions, cung cấp cho bạn kiến thức để xây dựng các ứng dụng mạnh mẽ, có thể mở rộng và hiệu quả về chi phí.

Trình kích hoạt HTTP là gì?

Một trình kích hoạt HTTP cho phép bạn thực thi Cloud Function của mình để phản hồi lại một yêu cầu HTTP. Về cơ bản, khi một yêu cầu HTTP được gửi đến một URL cụ thể, Google Cloud Functions sẽ tự động thực thi hàm được liên kết. Điều này làm cho các trình kích hoạt HTTP trở nên lý tưởng để xây dựng API, webhook và các ứng dụng web theo hướng sự kiện.

Lợi ích chính của việc sử dụng Trình kích hoạt HTTP:

Tạo một Cloud Function với Trình kích hoạt HTTP

Hãy cùng xem qua quy trình tạo một Cloud Function đơn giản với trình kích hoạt HTTP. Chúng ta sẽ tạo một hàm phản hồi bằng thông báo "Hello, World!". Ví dụ này có thể được điều chỉnh cho các địa phương khác nhau trên toàn cầu bằng cách chỉ cần sửa đổi chuỗi đầu ra.

Điều kiện tiên quyết:

Các bước thực hiện:

  1. Tạo một Dự án mới (nếu bạn chưa có):

    Nếu bạn chưa có dự án GCP, hãy tạo một dự án trong Google Cloud Console.

  2. Kích hoạt API Cloud Functions:

    Trong Cloud Console, điều hướng đến API Cloud Functions và kích hoạt nó.

  3. Tạo một Thư mục Hàm:

    Tạo một thư mục mới cho Cloud Function của bạn. Ví dụ:

    mkdir hello-http
    cd hello-http
  4. Viết mã cho Hàm:

    Tạo một tệp có tên `main.py` (hoặc `index.js` cho Node.js) với đoạn mã sau:

    Python (main.py):

    def hello_http(request):
        """Hàm Cloud HTTP.
        Args:
            request (flask.Request): Đối tượng yêu cầu.
            
        Returns:
            Văn bản phản hồi, hoặc bất kỳ tập hợp giá trị nào có thể được chuyển thành
            một đối tượng Phản hồi bằng cách sử dụng `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
  5. Tạo tệp Requirements (chỉ dành cho Python):

    Nếu bạn đang sử dụng Python, hãy tạo một tệp có tên `requirements.txt` và thêm bất kỳ phụ thuộc nào mà hàm của bạn cần. Đối với ví dụ này, nó không hoàn toàn cần thiết, nhưng nên có một tệp như vậy. Bạn có thể để trống nếu không có bất kỳ phụ thuộc nào.

  6. Triển khai Hàm:

    Sử dụng lệnh `gcloud functions deploy` để triển khai hàm của bạn. Thay thế `YOUR_FUNCTION_NAME` bằng tên mong muốn cho hàm của bạn.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    Giải thích các tham số:

    • `YOUR_FUNCTION_NAME`: Tên bạn muốn đặt cho Cloud Function của mình.
    • `--runtime`: Môi trường thời gian chạy cho hàm của bạn (ví dụ: `python39`, `nodejs16`).
    • `--trigger-http`: Chỉ định rằng hàm sẽ được kích hoạt bởi các yêu cầu HTTP.
    • `--allow-unauthenticated`: Cho phép bất kỳ ai gọi hàm mà không cần xác thực. Cảnh báo: Hãy thận trọng khi bật tính năng này trong môi trường sản xuất! Hãy xem xét việc triển khai xác thực và ủy quyền phù hợp.
  7. Kiểm tra Hàm:

    Sau khi triển khai, lệnh `gcloud` sẽ xuất ra URL của hàm của bạn. Sau đó, bạn có thể kiểm tra nó bằng cách gửi một yêu cầu HTTP đến URL đó bằng một công cụ như `curl` hoặc Postman.

    curl YOUR_FUNCTION_URL

    Bạn sẽ thấy thông báo "Hello, World!" trong phản hồi. Bạn cũng có thể truyền một tên làm tham số truy vấn:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Điều này sẽ trả về "Hello, YourName!"

Tìm hiểu về Yêu cầu và Phản hồi HTTP

Khi một Cloud Function được kích hoạt bởi một yêu cầu HTTP, nó nhận được một đối tượng chứa thông tin về yêu cầu đó. Đối tượng này thường bao gồm:

Hàm của bạn sau đó sẽ trả về một phản hồi HTTP, bao gồm:

Ví dụ: Xử lý các phương thức HTTP khác nhau

Đây là một ví dụ về cách xử lý các phương thức HTTP khác nhau trong Cloud Function của bạn:

Python (main.py):

from flask import escape

def http_method(request):
    """Phản hồi bất kỳ yêu cầu HTTP nào.
    Args:
        request (flask.Request): Đối tượng yêu cầu HTTP.
    Returns:
        Văn bản phản hồi hoặc bất kỳ tập hợp giá trị nào có thể được chuyển thành một
        Đối tượng Phản hồi bằng cách sử dụng
        `make_response`.
    """
    if request.method == 'GET':
        return 'Đây là một yêu cầu GET!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'Đây là một yêu cầu POST với thông điệp: {message}'
        else:
            return 'Đây là một yêu cầu POST không có thông điệp.'
    else:
        return 'Phương thức HTTP không được hỗ trợ.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('Đây là một yêu cầu GET!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`Đây là một yêu cầu POST với thông điệp: ${message}`);
      } else {
        res.status(200).send('Đây là một yêu cầu POST không có thông điệp.');
      }
      break;
    default:
      res.status(405).send('Phương thức HTTP không được hỗ trợ!');
      break;
  }
};

Hãy nhớ triển khai lại hàm đã cập nhật bằng lệnh `gcloud functions deploy`.

Bảo mật Trình kích hoạt HTTP của bạn

Bảo mật là tối quan trọng khi làm việc với các trình kích hoạt HTTP, đặc biệt là khi xử lý dữ liệu nhạy cảm hoặc các hoạt động quan trọng. Dưới đây là một số cân nhắc bảo mật chính:

Xác thực và Ủy quyền

Theo mặc định, các Cloud Functions được kích hoạt bởi HTTP có thể truy cập công khai nếu bạn sử dụng `--allow-unauthenticated`. Trong hầu hết các kịch bản sản xuất, bạn sẽ muốn hạn chế quyền truy cập cho những người dùng hoặc dịch vụ được ủy quyền. Google Cloud cung cấp một số tùy chọn để xác thực và ủy quyền:

Xác thực đầu vào

Luôn xác thực dữ liệu đầu vào mà Cloud Function của bạn nhận được để ngăn chặn các lỗ hổng bảo mật như SQL injection hoặc cross-site scripting (XSS). Sử dụng các kỹ thuật làm sạch và thoát ký tự phù hợp để bảo vệ chống lại đầu vào độc hại.

HTTPS

Đảm bảo rằng Cloud Function của bạn chỉ có thể truy cập qua HTTPS để mã hóa giao tiếp giữa máy khách và hàm. Google Cloud Functions tự động cung cấp các điểm cuối HTTPS.

Giới hạn Tốc độ

Triển khai giới hạn tốc độ để ngăn chặn lạm dụng và các cuộc tấn công từ chối dịch vụ (DoS). Bạn có thể sử dụng các dịch vụ như Google Cloud Armor để bảo vệ Cloud Functions của mình khỏi lưu lượng truy cập quá mức.

Các trường hợp sử dụng cho Trình kích hoạt HTTP

Trình kích hoạt HTTP rất linh hoạt và có thể được sử dụng trong nhiều ứng dụng khác nhau. Dưới đây là một số trường hợp sử dụng phổ biến:

Ví dụ trên các ngành khác nhau

Các Kỹ thuật Nâng cao

Sử dụng Biến môi trường

Biến môi trường cho phép bạn cấu hình Cloud Function của mình mà không cần mã hóa cứng thông tin nhạy cảm hoặc các giá trị cấu hình trong mã của bạn. Bạn có thể đặt biến môi trường bằng lệnh `gcloud functions deploy` hoặc trong Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

Trong mã của bạn, bạn có thể truy cập các biến môi trường bằng cách sử dụng từ điển `os.environ` (Python) hoặc đối tượng `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Sử dụng khóa API trong hàm của bạn
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Sử dụng khóa API trong hàm của bạn
  res.status(200).send(`API Key: ${apiKey}`);
};

Xử lý các tác vụ bất đồng bộ

Đối với các tác vụ chạy lâu hoặc tốn nhiều tài nguyên tính toán, tốt nhất là sử dụng xử lý bất đồng bộ để tránh chặn yêu cầu HTTP. Bạn có thể sử dụng các dịch vụ như Google Cloud Tasks hoặc Cloud Pub/Sub để chuyển các tác vụ này sang các hàng đợi riêng biệt.

Xử lý lỗi và Ghi nhật ký

Triển khai xử lý lỗi và ghi nhật ký mạnh mẽ trong Cloud Functions của bạn để xác định và giải quyết các vấn đề một cách nhanh chóng. Sử dụng Google Cloud Logging để thu thập nhật ký từ các hàm của bạn và theo dõi hiệu suất của chúng.

Các phương pháp hay nhất

Gỡ lỗi các sự cố thường gặp

Kết luận

Google Cloud Functions với trình kích hoạt HTTP cung cấp một cách mạnh mẽ và linh hoạt để xây dựng các ứng dụng phi máy chủ. Bằng cách hiểu các khái niệm và kỹ thuật được thảo luận trong hướng dẫn này, bạn có thể tận dụng sức mạnh của Cloud Functions để tạo ra các giải pháp có thể mở rộng, hiệu quả về chi phí và theo hướng sự kiện cho đối tượng khán giả toàn cầu. Hãy đón nhận cuộc cách mạng phi máy chủ và khai phá toàn bộ tiềm năng của các ứng dụng đám mây của bạn!