Quay lại

Thực Hành - Kết Nối RDS Private Tới EC2 Instance Và Lambda Function (Nodejs) Chuyên mục RDS, Aurora & ElastiCache    2024-05-07    23 Lượt xem    19 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận    capacity-filled Sidebar

   

Automatically connect EC2 instance Và RDS

Bạn có thể sử dụng Amazon RDS console để đơn giản hóa việc thiết lập kết nối giữa một Amazon Elastic Compute Cloud (Amazon EC2) instance và một DB instance. Thường, DB instance của bạn đặt trong một private subnet và EC2 instance của bạn đặt trong một public subnet trong một VPC. Bạn có thể sử dụng một SQL client trên EC2 instance của mình để kết nối tới DB instance. EC2 instance cũng có thể chạy máy chủ web hoặc ứng dụng để truy cập vào DB instance của bạn đặt trong private. Các bạn có thể tham khảo thêm tại doc của AWS.

Configuring an EC2 instance

  1. Đăng nhập vào Managment console AWS và điều hướng đến dịch vụ EC2.
  2. Nhấp vào “Lunch Instance” và làm theo các bước sau đây:
  3. Configuring DB instance - RDS

Connecting to a MySQL DB instance

Bây giờ chúng ta sẽ kết nối tới instance EC2 mà chúng ta đã tạo trước đó và sau đó cài đặt các packages cần thiết để kết nối với MySQL DB instance của chúng ta.

  1. Để kết nối với instance EC2 của chúng ta, sao chép địa chỉ Public IPv4 của máy EC2.

  2. Mở terminal và di chuyển đến vị trí lưu trữ tệp key pair.

  3. Nhập lệnh sau để sửa đổi quyền tệp .pem. Thay thế aws-key bằng key được tạo khi cấu hình instance EC2.

    chmod 400 your-aws-key.pem
  4. Nhập lệnh sau để kết nối với instance của chúng ta. Ở đây, ec2-user là người dùng mặc định trong AMI OS.

    ssh -i your-aws-key.pem ec2-user@ec2-instance-public-IPv4 address
  5. Bây giờ để cài đặt mysql-client dòng lệnh MySQL, chạy các lệnh sau. Nhấn Y khi được yêu cầu.

    1. sudo apt-get update
      sudo apt-get upgrade​
    2. sudo apt-get install mysql-client
    3. mysql --version
  6. Để kết nối với DB instance, sao chép Endpoint từ tab Connectivity & security trên trang DB-identifier.

  7. Nhập lệnh sau để kết nối với MySQL instance. Thay thế endpoint bằng Endpoint của DB instance và nhập mật khẩu chính khi được yêu cầu.

    1. mysql -h endpoint -P 3306 -u admin -p

Lưu ý: Các bạn cũng có thể sử dụng Browser Connect SSH để truy cập vào server.

Automatically connect Lambda Và RDS

Configuring Lambda

  1. Lên thanh tìm kiếm và search Lambda sau đó thì làm theo các bước sau:
  2. Chọn network giống với RDS network và click vào Create.
  3. Quay lại RDS management và click vào "Set up Lamda connection"
  4. Copy đoạn code sample vào file index.mjs hoặc tham khảo thêm tại AWS doc
    • // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
      // SPDX-License-Identifier: Apache-2.0
      /*
      Node.js code here.
      
          hostname: process.env.ProxyHostName,
          port: process.env.Port,
          username: process.env.DBUserName,
          region: process.env.AWS_REGION,
      */
      // ES6+ example
      import { Signer } from "@aws-sdk/rds-signer";
      import mysql from 'mysql2/promise';
      
      async function createAuthToken() {
        // Define connection authentication parameters
        const dbinfo = {
      
          hostname: "database-2.c4aoqn5ai7fd.ap-southeast-1.rds.amazonaws.com",
          port: 3306,
          username: "admin",
          region: "ap-southeast-1",
      
        }
      
        // Create RDS Signer object
        const signer = new Signer(dbinfo);
      
        // Request authorization token from RDS, specifying the username
        const token = await signer.getAuthToken();
        return token;
      }
      
      async function dbOps() {
      
        // Obtain auth token
        const token = await createAuthToken();
        // Define connection configuration
        let connectionConfig = {
          host: "database-2.c4aoqn5ai7fd.ap-southeast-1.rds.amazonaws.com",
          user: "admin",
          password: "adminadmin",
          database: "users",
          ssl: 'Amazon RDS'
        }
        // Create the connection to the DB
        const conn = await mysql.createConnection(connectionConfig);
        // Obtain the result of the query
        const [res,] = await conn.execute('select ?+? as sum', [3, 2]);
        return res;
      
      }
      
      export const handler = async (event) => {
        // Execute database flow
        const result = await dbOps();
        // Return result
        return {
          statusCode: 200,
          body: JSON.stringify("The selected sum is: " + result[0].sum)
        }
      };
  5. Mở termial dưới local và cài đặt thư viện mysql cho Nodejs sau đó thì upload lên Lamda.
    1. Cài đặt package: 'mysql2': Trong thư mục dự án của bạn, mở terminal hoặc command prompt và chạy lệnh sau để cài đặt 'mysql2':

      • npm install mysql2
    2. Đóng gói dự án: Đảm bảo rằng tất cả các tệp và thư mục cần thiết cho Lambda function của bạn được đóng gói lại. Bạn cần đóng gói tất cả các thư viện được sử dụng (bao gồm 'mysql2') cùng với mã của bạn.

    3. Tải lên Lambda: Tải gói triển khai lên Lambda function. Bạn có thể tải lên bằng cách sử dụng giao diện người dùng của AWS Lambda hoặc sử dụng AWS CLI hoặc các công cụ quản lý AWS khác như AWS Toolkit cho Visual Studio Code hoặc AWS Toolkit cho IntelliJ.

  6. Sau đó thì click vào button "Deploy" và click vào Button "Test" và thấy kết quả dưới đây là thành công.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday