Exporter un instantané RDS vers S3 avec Lambda (Python)

introduction

Lors du référencement des données RDS

-Il n'y a pas de travail de vidage de date et d'heure, etc. ・ Il n'y a pas de réplique en lecture ・ Aucune question posée et l'approbation est requise pour la connexion à l'environnement commercial

Pour une raison quelconque, il était parfois difficile d'examiner directement le contenu du RDS. À ce moment-là, il était possible d'exporter l'instantané vers S3 vers Amazon RDS et d'y faire référence dans Athena, j'ai donc essayé l'exportation S3 de l'instantané RDS à l'aide de Lambda.

Vue d'ensemble

スクリーンショット.png

Exportez des instantanés RDS vers S3 dans Lambda. Étant donné que les données exportées sont cryptées par KMS, il est également nécessaire de préparer la clé KMS.

supposition

-RDS et snapshots ont été créés. -Le compartiment S3 de destination d'exportation a été créé.

procédure

1. Créez des politiques et des rôles à utiliser lors de l'exportation d'instantanés RDS vers S3

1-1. Création de politiques

Créez une stratégie pour accéder à S3 à partir de la tâche d'exportation de cliché avec le json suivant. (La ressource your-s3-bucket spécifie le compartiment S3 vers lequel exporter)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject*",
                "s3:GetObject*",
                "s3:DeleteObject*"
            ],
            "Resource": [
                "arn:aws:s3:::your-s3-bucket",
                "arn:aws:s3:::your-s3-bucket/*"
            ]
        }
    ]
}

1-2. Création de rôles

Créez un rôle et attachez la stratégie créée ci-dessus. Dans Modifier la relation de confiance, modifiez le document de stratégie de contrôle d'accès comme suit. (Le service devient export.rds.amazonaws.com)


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "export.rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2. Création d'une clé KMS

Créez une clé dans KMS à utiliser pour crypter les données exportées.

  1. Sélectionnez «Clé gérée par le client» dans KMS à partir de la console de gestion.
  2. Affichez l'assistant de création avec «Créer une clé».
  3. Étape 1/5 Type de clé: cible
  4. Étape 2/5 Alias: saisissez le nom de n'importe quelle clé
  5. Étape 3/5 Administrateur de clés: Sélectionnez la clé et l'utilisateur qui sera l'administrateur
  6. Étape 4/5 Définissez les autorisations d'utilisation des clés: non spécifié ici
  7. Étape 5/5 Terminer

3. Créer Lambda

3-1. Rôle, création de politiques

Créez un rôle pour AWSLambdaBasicExecutionRole qui peut être créé en même temps que la création d'une fonction Lambda. Créez la stratégie suivante requise pour l'exportation de cliché séparément et attachez-la au rôle ci-dessus.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "rds:StartExportTask"
            ],
            "Resource": "*"
        }
    ]
}

3-2. Création de code Lambda

pyhton:lambda_handler.py


import json
import boto3
from datetime import datetime

SOURCE_ARN="YOUR_SOURCE_ARN"
S3_BUCKET_NAME="YOUR_S3_BUCKET_NAME"
IAM_ROLE_ARN="YOUR_IAM_ROLE_ARN"
KMS_KEY_ID="YOUR_KMS_KEY_ID"

client = boto3.client('rds')

def lambda_handler(event, context):
  
    export_task_identifier="mysnapshot" + datetime.now().strftime("%Y%m%d%H%M%S")
    
    response = client.start_export_task(
        ExportTaskIdentifier=export_task_identifier,
        SourceArn=SOURCE_ARN,
        S3BucketName=S3_BUCKET_NAME,
        IamRoleArn=IAM_ROLE_ARN,
        KmsKeyId=KMS_KEY_ID,
        )

-Définissez les variables suivantes dans le code en fonction de votre environnement.

Nom de variable valeur
SOURCE_ARN ARN de l'instantané RDS à exporter
S3_BUCKET_NAME Nom du compartiment S3 de destination de sortie
IAM_ROLE_ARN ARN du rôle utilisé lors de l'exportation de S3 créé à l'étape 1
KMS_KEY_ID ARN de la clé KMS créée

-Puisque les restrictions suivantes s'appliquent à ExportTaskIdentifier, la date et l'heure sont ajoutées cette fois.

Identifiant d'exportation Entrez un nom pour identifier l'exportation. Ce nom doit être unique parmi toutes les exportations d'instantanés appartenant au compte AWS dans la région AWS actuelle.

4. Ajouter le rôle Lambda à l'utilisateur clé de la clé KMS

Ajoutez le rôle utilisé dans Lambda à l'étape 3 à l'utilisateur clé de la clé créée à l'étape 2.

スクリーンショット.png

Si vous ne le faites pas, vous obtiendrez l'erreur Une erreur s'est produite (KMSKeyNotAccessibleFault) lors de l'exécution de Lambda.

Après ce travail, exécutez Lambda pour exporter l'instantané RDS vers S3.

en conclusion

Si vous souhaitez simplement exporter l'instantané vers S3, vous pouvez faire de même avec la console de gestion, mais je voulais faire de la source de données un instantané système et mettre à jour les données à la date et à l'heure, j'ai donc essayé de l'exécuter sur Lambda.

Ce serait bien si RDS pouvait être vérifié sur la console de gestion s'il s'agissait d'une petite référence comme DynamoDB, mais j'ai senti que la méthode de référence à cet instantané est également une méthode sûre et facile.

Références

Cet article a été rédigé en référence aux informations suivantes.

Recommended Posts

Exporter un instantané RDS vers S3 avec Lambda (Python)
Connectez-vous à s3 avec AWS Lambda Python
[Python] Exportez régulièrement de CloudWatch Logs vers S3 avec Lambda
Comment accéder à RDS depuis Lambda (python)
Exemple de notification Slack avec python lambda
Télécharger des fichiers sur Google Drive avec Lambda (Python)
Téléchargez ce que vous avez dans la demande vers S3 avec AWS Lambda Python
Je veux AWS Lambda avec Python sur Mac!
Connectez-vous à BigQuery avec Python
[S3] CRUD avec S3 utilisant Python [Python]
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Opération S3 avec python boto3
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Comment utiliser Python lambda
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Défi problème 5 avec Python: lambda ... j'ai décidé de copier sans
[Présentation de l'application Udemy Python3 +] 58. Lambda
Python: comment utiliser async avec
[Python] Ecrire dans un fichier csv avec Python
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python
Détection de visage avec Lambda (Python) + Rekognition
Sortie vers un fichier csv avec Python
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Convertir la liste en DataFrame avec python
Conversion MP3 → WAV avec Python
Pour faire une récursion avec Python2
Comment démarrer avec Python
Comment calculer la date avec python
Notifier HipChat avec AWS Lambda (Python)
Publiez facilement sur Twitter avec Python 3
Je veux déboguer avec Python
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
Utilisez boto3 pour accéder à S3
Déplacer régulièrement les journaux CloudWatch vers S3 avec Lambda
[Python 3.8 ~] Comment définir intelligemment des fonctions récursives avec des expressions lambda
Envoyer les images prises avec ESP32-WROOM-32 vers AWS (API Gateway → Lambda → S3)
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
Traitez le fichier gzip UNLOADed avec Redshift avec Python de Lambda, gzipez-le à nouveau et téléchargez-le sur S3
ImportError lors de la tentative d'utilisation du package gcloud avec la version AWS Lambda Python
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
Reconnaissance vocale en anglais avec python [speech to text]
Convertir un mémo à la fois avec Python 2to3
Je veux le faire avec Python lambda Django, mais je vais m'arrêter
mail html avec image à envoyer avec python
Mémo pour demander des KPI avec python
python à retenir uniquement avec bonjour, mondes
Sortir les caractères de couleur en joli avec python
Authentification sans mot de passe avec RDS et IAM (Python)
PUT gzip directement dans S3 en Python
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator