Przejdź do treści

Jak odczytać i zapisać plik na S3 używając funkcji lambda i boto3

read write list on AWS s3 2023 | lambda function & boto3

Z tego artykułu dowiesz się jak w chmurze AWS za pomocą funkcji lambda i boto3 zapisywać pliki na S3 i je odczytywać. Znajdziesz także informacje o tym, jakie uprawnienia przydzieliłem funkcji lambda, żeby mogła wykonywać takie operacje i tylko takie. Dobrą praktyką jest, by zawsze przydzielać tylko minimalne uprawnienia. Nie warto robić rozwiązań opartych o role admina. Powinno się dostosowywać uprawnienia do każdej funkcji i projektu indywidualnie.

W korpoświecie jest to ceniona umiejętność, która zwiększa bezpieczeństwo i buduje zaufanie przełożonych, ponieważ nie muszą po tobie poprawiać kodu, a cały projekt nie rozciąga się w czasie.

How to read write files on s3 using lambda function – python & boto3 | AWS 2023

S3 bucket

aws s3 - simple storage service

Pierwszym punktem jest utworzenie bucketu S3, który będzie służył do odczytu i zapisu plików. Mój bucket będzie się nazywał “save-data-from-lambda“.

Rola IAM

aws Identity and Access Management (IAM)

No dobra, przejdźmy do konkretów. Teraz utwórz sobie nową rolę IAM, do której przydzielisz odpowiednią IAM policy pozwalającą wykonać akcje, których potrzebujesz. Moja polityka pozwoli na odczyt i zapis plików w S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListObjects",
                "s3:ListObjectsV2",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::save-data-from-lambda",
                "arn:aws:s3:::save-data-from-lambda/*"
            ]
        }
    ]
}

Jak zapewne zauważyłeś, powyższa polityka może wykonywać tylko akcje, które wymieniłem tylko w zasobie S3 o nazwie save-data-from-lambda. Ty oczywiście powinieneś to zmienić i użyć nazwy twojego S3.

Oczywiście, jeśli potrzebujesz robić więcej rzeczy, to powinieneś dodać kolejne akcje do IAM policy, ale do odczytu i zapisu plików wystarczy ta, którą ja utworzyłem.

Funkcja Lambda

lambda function boto3 2023 read write on s3

Teraz najważniejsza część projektu czyli funkcja Lambda. Po utworzeniu miejsca, do którego będziesz mógł zapisywać pliki i je odczytywać, oraz roli IAM, która pozwoli na te wszystkie rzeczy, możesz przystąpić do tworzenia funkcji Lambda.

Na początek najtrudniejsze, to co zajmuje najwięcej czasu, czyli wymyślenie jakiejś super fajnej nazwy dla funkcji lambda 😉 Potem już będzie z górki. Wystarczy wybrać środowisko, w moim przypadku Python 3.10 i rolę IAM, która została utworzona w poprzednim punkcie. W moim przypadku lambda_s3_red_write_list.

Poniżej znajdziesz kod, który umożliwia zapis i odczyt na S3. W filmie How to read write files on s3 using lambda function – python & boto3 | AWS 2023 – YouTube podaję więcej przykładów i dokładniejszy opis funkcji Lambda. Jeśli jesteś zainteresowany, to zapraszam do oglądania.

import json
import boto3

def lambda_handler(event, context):
    
    bucket_name = "save-data-from-lambda"
    list001 = ['this', 'is', 'first', 'list']
    s3_path_001 = "001"
    list002 = ['this', 'is', 'second', 'list']
    s3_path_002 = "002"
    new_list = list()
    
    s3_client = boto3.client('s3', 'eu-central-1')
    
    # save to s3
    save_to_s3 = s3_client.put_object(
        Key=s3_path_001,
        Bucket=bucket_name,
        Body=(json.dumps(list001).encode('UTF-8'))
    )
    save_to_s3 = s3_client.put_object(
        Key=s3_path_002,
        Bucket=bucket_name,
        Body=(json.dumps(list002).encode('UTF-8'))
    )
    
    # read from s3
    s3_bucket = s3_client.list_objects_v2(
        Bucket=bucket_name
    )
    for content in s3_bucket["Contents"]:
        file = content["Key"]
        read_from_s3 = s3_client.get_object(
            Key=file,
            Bucket=bucket_name
        )
        new_list.append(read_from_s3["Body"].read().decode('UTF-8'))
    
    print(new_list)
    return(new_list)

Kod możesz w prosty sposób dostosować do swoich potrzeb, zmieniając wartości zmiennych znajdujące się na początku. Na pewno powinieneś zmienić nazwę bucketu S3, która znajduje się w zmiennej bucket_name.

Podsumowanie

Jak zauważyłeś zapis plików do S3 i ich odczyt nie jest trudny. Nie jest to tylko teoria i coś, czego nigdy nie wykorzystasz. Jest to fajny prawdziwy przykład użycia, który możecie spotkać w różnych projektach. Oczywiście starałem się go bardzo uprościć, by ułatwić zrozumienie tematu. Jednak mimo to jest on świetną bazą do tego, by dodawać do niego kolejne serwisy i odpowiednio go rozbudowywać.

Jesli interesuje cię chmura zajrzyj do moich innych artykułów AWS – Amazon Web Services – Wojciech Lepczyński (lepczynski.it).

Gorąco zachęcam także do odwiedzenia mojego kanału YouTube i subskrybowania????

7 sposobów na usunięcie danych z S3
Alarm na podstawie metryk z CloudWatch | Powiadomienia o zajętości dysku EC2

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *