Płynna integracja: Łączenie AWS Lambda z RDS i zapisywanie danych bez wysiłku

Łączenie AWS Lambda do AWS RDS instance umożliwia budowanie aplikacje bezserwerowe które mogą wchodzić w interakcje z relacyjnymi bazami danych, umożliwiając tym samym zarządzanie operacjami na bazach danych bez konieczności udostępniania serwerów lub zarządzania nimi. Ten kompleksowy przewodnik przeprowadzi Państwa krok po kroku przez proces konfigurowania AWS Lambda do łączenia się z instancją RDS i zapisywania danych w tabelach.

Wymagania wstępne

Zanim przejdziemy do kolejnych kroków, proszę upewnić się, że spełnione zostały następujące warunki wstępne:

  1. Konto AWS
  2. Istniejąca instancja AWS RDS działająca
  3. Podstawowa znajomość usług AWS, w szczególności Lambda i RDS
  4. Znajomość SQL oraz język programowania, który wybiorą Państwo dla funkcji Lambda (np, Python, Node.js)

Krok 1: Konfiguracja wystąpienia AWS RDS

Najpierw należy upewnić się, że instancja AWS RDS jest poprawnie skonfigurowana i dostępna. Podczas konfigurowania instancji RDS:

  • Proszę wybrać publicznie dostępną instancję dla łatwej łączności, choć dla środowisk produkcyjnych zaleca się instancję prywatną ze względów bezpieczeństwa.
  • Proszę zanotować punkt końcowy, port i poświadczenia, ponieważ będą one potrzebne do połączenia z funkcji Lambda.

Krok 2: Utworzenie roli IAM dla funkcji Lambda

AWS Lambda wymaga uprawnień dostępu do innych usług AWS, w tym RDS. W tym celu należy utworzyć rolę IAM, wykonując następujące kroki:

  1. Proszę przejść do IAM konsola w AWS.
  2. Proszę kliknąć na “Role” następnie “Proszę utworzyć rolę”.
  3. Proszę wybrać “Lambda” jako przypadek użycia.
  4. Proszę dołączyć zasady przyznające niezbędne uprawnienia. W przypadku dostępu do usług RDS AmazonRDSDataFullAccess może być dobrym początkiem, ale proszę dostosować uprawnienia do swoich potrzeb, aby zwiększyć bezpieczeństwo.
  5. Proszę nazwać swoją rolę i utworzyć ją.

Krok 3: Przygotowanie funkcji lambda

Proszę wybrać preferowany język programowania (np. Python lub Node.js) i przygotować kod funkcji. Poniżej znajduje się prosty przykład w języku Python, który łączy się z instancją RDS i wstawia dane do tabeli:

import pymysql



def lambda_handler(event, context):

    connection = pymysql.connect(host="your_rds_endpoint",

                                 user="your_username",

                                 password='your_password',

                                 db='your_database_name',

                                 charset="utf8mb4",

                                 cursorclass=pymysql.cursors.DictCursor)



    try:

        with connection.cursor() as cursor:

            sql = "INSERT INTO `your_table` (`column1`, `column2`) VALUES (%s, %s)"

            cursor.execute(sql, ('data1', 'data2'))

        connection.commit()

    finally:

        connection.close()

Proszę zastąpić symbole zastępcze rzeczywistymi danymi instancji RDS i schematem tabeli.

Krok 4: Tworzenie funkcji Lambda w AWS

  1. Proszę przejść do konsoli AWS Lambda i kliknąć “Utwórz funkcję”.
  2. Proszę nazwać funkcję, wybrać środowisko uruchomieniowe odpowiadające językowi programowania i wybrać utworzoną wcześniej rolę IAM.
  3. Proszę wkleić kod funkcji do wbudowanego edytora kodu lub przesłać go jako plik .zip, jeśli projekt jest bardziej złożony.
  4. Proszę dostosować podstawowe ustawienia, takie jak limit czasu i pamięć, w zależności od wymagań funkcji.

Krok 5: Dostosowanie ustawień VPC dla Lambda

Aby funkcja Lambda mogła uzyskać dostęp do instancji RDS niedostępnej publicznie:

  1. W konfiguracji funkcji Lambda proszę przejść do ustawień “VPC”.
  2. Proszę wybrać VPC, gdzie znajduje się Państwa instancja RDS.
  3. Proszę przypisać odpowiednie podsieci i grupy zabezpieczeń, które mają dostęp do instancji RDS.

Krok 6: Proszę przetestować funkcję Lambda

  1. Proszę skonfigurować zdarzenie testowe w konsoli Lambda z wszelkimi niezbędnymi danymi wejściowymi wymaganymi przez funkcję.
  2. Proszę wywołać funkcję Lambda za pomocą zdarzenia testowego i monitorować wynik wykonania oraz dzienniki pod kątem błędów lub potwierdzeń pomyślnego wykonania.

Krok 7: Monitorowanie i rejestrowanie

AWS Lambda integruje się z CloudWatch, umożliwiając monitorowanie wykonań i danych wyjściowych dziennika. Proszę sprawdzić logi CloudWatch w przypadku napotkania problemów lub konieczności weryfikacji operacji.

Krok 8: Najlepsze praktyki

  • Bezpieczeństwo: Proszę zawsze używać zmiennych środowiskowych do przechowywania poufnych informacji, takich jak dane uwierzytelniające bazy danych. Ponadto, proszę rozważyć użycie AWS Secrets Manager.
  • Obsługa błędów: Proszę wdrożyć solidną obsługę błędów w funkcji Lambda, aby zarządzać problemami z łącznością, przekroczeniem limitu czasu lub niespójnością danych.
  • Wydajność: Proszę zoptymalizować funkcję Lambda pod kątem wydajności poprzez dostosowanie pamięci, ustawień limitu czasu i zrozumienie zjawiska zimnego startu.
  • Zarządzanie połączeniami: Proszę używać connection pooling lub efektywnie zarządzać połączeniami, aby uniknąć przeciążenia bazy danych połączeniami.

Przykład: Zapisywanie danych do RDS z Lambda

Rozważmy scenariusz, w którym mają Państwo plik users w bazie danych RDS i chcą Państwo wstawić nowy rekord użytkownika:

CREATE TABLE users (

    id INT AUTO_INCREMENT PRIMARY KEY,

    username VARCHAR(50),

    email VARCHAR(50)

);

Państwa funkcja Lambda (zakładając Python i PyMySQL) może wyglądać następująco:

import pymysql
import os

def lambda_handler(event, context):
    # Database connection parameters
    rds_host = os.environ['RDS_HOST']
    name = os.environ['DB_USERNAME']
    password = os.environ['DB_PASSWORD']
    db_name = os.environ['DB_NAME']
    
    try:
        conn = pymysql.connect(host=rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
    except pymysql.MySQLError as e:
        print(e)
        return {
            'statusCode': 500,
            'body': 'Could not connect to RDS'
        }
    
    with conn.cursor() as cur:
        cur.execute("INSERT INTO users (username, email) VALUES (%s, %s)", ('JohnDoe', 'john.doe@example.com'))
        conn.commit()
    
    return {
        'statusCode': 200,
        'body': 'Successfully inserted data into RDS database'
    }

Proszę zastąpić users, username, oraz email z rzeczywistymi nazwami tabel i kolumn w Państwa bazie danych.

Wnioski

Wykonując powyższe kroki, z powodzeniem skonfigurowali Państwo bezserwerową funkcję AWS Lambda, która łączy się z instancją AWS RDS i zapisuje dane w tabelach. Ta konfiguracja umożliwia tworzenie skalowalnych, bezserwerowych aplikacji, które mogą wchodzić w interakcje z relacyjnymi bazami danych, wykorzystując pełną moc usług AWS w chmurze.

Proszę pamiętać, że choć niniejszy przewodnik stanowi podstawę, zawsze należy dostosować implementację do konkretnych potrzeb i wymagań bezpieczeństwa aplikacji. Miłego kodowania!