[PYTHON] [AWS] Associez Lambda et S3 à boto3

introduction

Créez un fichier temporaire dans AWS Lambda et téléchargez-le dans S3. De plus, je vais essayer de télécharger le fichier téléchargé sur S3 à l'emplacement d'origine.

Configuration du système

Lambda_S3.png

  1. Créez un fichier dans / tmp / log / sess / et archivez le répertoire dans / tmp / sess-info.tar.
  2. Téléchargez sess-info.tar dans S3 \ .
  3. Supprimez / tmp / sess-info.tar et téléchargez sess-info.tar de S3 \ vers / tmp / sess-info.tar.
  4. Supprimez / tmp / log / sess / s'il existe et développez sess-info.tar en / tmp / log / sess /.

Lambda Code

import boto3
import os
import os.path
import tarfile
import shutil

def lambda_handler(event, context):
    bucket_name = 'bucket_name'
    tmp_dir = '/tmp/'
    log_dir = '/tmp/log/sess/'
    file_name = 'sess-info.tar'

    key = file_name
    file_path = tmp_dir + file_name

    # === Step 1
    # create log dir
    if os.path.exists(log_dir) == False:
        os.makedirs(log_dir)

    # write log
    with open(log_dir + 'log1.txt', 'w') as file:
        file.write('hoge\n')
    with open(log_dir + 'log2.txt', 'w') as file:
        file.write('fuga\n')

    # create log archive
    with tarfile.open(file_path, mode='w:gz') as archive:
        archive.add(log_dir)

    # === Step 2
    # create s3 resource
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(bucket_name)

    # upload log archive
    bucket.upload_file(file_path, key)

    # === Step 3
    # delete log archive
    if os.path.exists(file_path):
        os.remove(file_path)

    # download log archive
    bucket.download_file(key, file_path)

    # === Step 4
    # delete log dir
    if os.path.exists(log_dir):
        shutil.rmtree(log_dir)

    # extract log archive
    with tarfile.open(file_path, mode='r:gz') as archive:
        archive.extractall('/')

Lambda Configuration

S3 Bucket Créez un bucket portant le même nom que le code Lambda bucket_name.

en conclusion

Lambda est essentiellement conçu sans état, mais vous souhaitez parfois accéder à des données avec état. Dans un tel cas, nous profiterons des avantages suivants.

Cette fois, c'était un exemple d'utilisation du répertoire / tmp de Lambda et de S3.

Recommended Posts

[AWS] Associez Lambda et S3 à boto3
Connectez-vous à s3 avec AWS Lambda Python
[AWS] Faites des choses de type SSI avec S3 / Lambda
Téléchargeur S3 avec boto
Pages HTML dynamiques créées avec AWS Lambda et Python
Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau)
PyTorch avec AWS Lambda [importation Lambda]
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
Exporter les journaux CloudWatch vers S3 avec AWS Lambda (Pythyon ver)
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
[AWS] Créer une API avec API Gateway + Lambda
Tests faciles d'AWS S3 avec MinIO
Notifier HipChat avec AWS Lambda (Python)
Utilisez boto3 pour accéder à S3
Générer une URL signée S3 avec boto
[AWS] Recherchez et acquérez les données nécessaires à partir des fichiers S3 avec S3 Select
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Essayez le chiffrement côté serveur de S3 à l'aide de boto3
Chiffrement côté serveur S3 SSE avec Python boto3
Touchez AWS avec Serverless Framework et Python
Je viens de faire FizzBuzz avec AWS Lambda
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Surveillance simple du serveur avec AWS Lambda (Python) et notification des résultats avec Slack
Téléchargez ce que vous avez dans la demande vers S3 avec AWS Lambda Python
[AWS lambda] Déployer, y compris diverses bibliothèques avec lambda (générer un zip avec un mot de passe et le télécharger vers s3) @ Python
[AWS SAM] Créer une API avec DynamoDB + Lambda + API Gateway
MessagePack-Try pour lier Java et Python avec RPC
Différences entre queryStringParameters et multiValueQueryStringParameters dans AWS Lambda
Grattage sans serveur régulier avec AWS lambda + scrapy Part 1.8
Afficher les images sur S3 avec API Gateway + Lambda
Obtenez et analysez les journaux S3 Logging avec la nortification d'événements Lambda et plongez-vous dans BigQuery
LINE BOT avec Python + AWS Lambda + API Gateway
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Easy X-Ray avec Lambda Layer et CloudFormation / sam-cli
Gérez bien AWS avec la bibliothèque Python Boto
[AWS; Introduction à Lambda] 2ème; Extraire des phrases du fichier json et enregistrer S3 ♬
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
Exporter un instantané RDS vers S3 avec Lambda (Python)
J'ai essayé de connecter AWS Lambda à d'autres services
Décrivez ec2 avec boto3 et récupérez la valeur
Automatisation de la construction de l'infrastructure avec CloudFromation + troposphère + AWS Lambda
Version Amazon API Gateway et AWS Lambda Python
Développer, exécuter et déployer AWS Lambda à distance à l'aide de lambda-uploader
[AWS] Play with Step Functions (SAM + Lambda) Part.3 (Branch)
Créez Amazon Linux avec AWS EC2 et connectez-vous
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Émettre une URL limitée dans le temps S3 avec boto3 (avec confirmation de l'existence du fichier)
Créer une couche pour AWS Lambda Python dans Docker
[AWS] Play with Step Functions (SAM + Lambda) Part.1 (Basic)
Je veux AWS Lambda avec Python sur Mac!
Gérer la rétention des groupes de journaux Amazon CloudWatch avec AWS Lambda
Construisez AWS EC2 et RDS avec Terraform Terraform 3 minutes de cuisson
[Memo] Chargez le csv de s3 dans les pandas avec boto3
[AWS] Play with Step Functions (SAM + Lambda) Part.2 (Paramètres)
Démarrez Lambda avec Boto3