es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exportar una instantánea de RDS a s3 utilizando Cloudformation.

Quiero exportar una instantánea de RDS a S3 utilizando CloudFormation, lo cual activará una función lambda. Pero soy algo nuevo en esto. ¿Alguien puede ayudarme, por favor? Ya he escrito el script para Lambda y SNS, pero estoy confundido en cómo puedo exportar una instantánea de RDS a S3 utilizando CloudFormation. Adjunto mi archivo para activar Lambda desde SNS. Se agradecerá la ayuda. Gracias.

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: >
  example-lambda-sns
  Ejemplo de plantilla CloudFormation para suscribir una lambda a un tema SNS.
Resources:
  ExampleTopic:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: !Sub 'example-sns-topic'
      TopicName: !Sub 'example-sns-topic'
      Subscription:
        - Protocol: lambda
          Endpoint: !GetAtt ExampleFunction.Arn

ExampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: mylambdafunction
      Description: mylambdafunction
      Handler: index.handler
      Runtime: nodejs14.x
      Role: arn:aws:iam::48
      CodeUri: 's3://testing/tes.zip'

ExampleFunctionInvokePermission:
    Type: 'AWS::Lambda::Permission'
    Properties:
      Action: 'lambda:InvokeFunction'
      FunctionName: !Ref ExampleFunction
      Principal: sns.amazonaws.com

ExampleTopicPolicy:
    Type: 'AWS::SNS::TopicPolicy'
    Properties:
      Topics:
        - !Ref ExampleTopic
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: 'sns:Publish'
            Resource: !Ref ExampleTopic
            Principal:
              AWS: '<em>''
            Condition:
              ArnLike:
                AWS:SourceArn: !Sub 'arn:aws:</em>:<em>:${AWS::AccountId}:</em>''
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para exportar un instantáneo de RDS a S3 utilizando CloudFormation y activar una función Lambda, debes agregar dos recursos a tu plantilla de CloudFormation existente:

    1. Bucket de S3: Crea un bucket de S3 donde se exportará el instantáneo de RDS. Puedes utilizar el tipo de recurso AWS::S3::Bucket para crear el bucket.
    2. Función Lambda: Agrega una nueva función Lambda a tu plantilla de CloudFormation que tome el instantáneo de RDS como entrada y lo exporte al bucket de S3. Puedes utilizar el tipo de recurso AWS::Serverless::Function para crear la función Lambda.

    Una vez que hayas creado estos dos recursos, debes agregar los permisos y activadores necesarios a tus recursos existentes:

    1. Permisos de Bucket de S3: Concede permisos a la función Lambda para acceder al bucket de S3 donde se exportará el instantáneo de RDS. Puedes utilizar el tipo de recurso AWS::Lambda::Permission para otorgar permisos.
  2. Activador de Exportación de Instantánea de RDS: Agrega un nuevo activador a tu función Lambda existente que se activa cuando se crea un nuevo instantáneo de RDS. Puedes utilizar el tipo de recurso AWS::RDS::DBInstance para crear el activador.

  3. Aquí tienes un ejemplo de plantilla de CloudFormation que exporta un instantáneo de RDS a S3 y activa una función Lambda:

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: 'AWS::Serverless-2016-10-31'
    Description: >
      example-lambda-sns
      Ejemplo de plantilla de CloudFormation para suscribir una función lambda a un tema SNS.
    Resources:
      ExampleTopic:
        Type: AWS::SNS::Topic
        Properties:
          DisplayName: !Sub 'example-sns-topic'
          TopicName: !Sub 'example-sns-topic'
          Subscription:
            - Protocol: lambda
              Endpoint: !GetAtt ExampleFunction.Arn
    
      ExampleFunction:
        Type: AWS::Serverless::Function
        Properties:
          FunctionName: mylambdafunction
          Description: mylambdafunction
          Handler: index.handler
          Runtime: nodejs14.x
          Role: arn:aws:iam::48
          CodeUri: 's3://testing/tes.zip'
    
      ExampleFunctionInvokePermission:
        Type: 'AWS::Lambda::Permission'
        Properties:
          Action: 'lambda:InvokeFunction'
          FunctionName: !Ref ExampleFunction
          Principal: sns.amazonaws.com
    
      ExampleTopicPolicy:
        Type: 'AWS::SNS::TopicPolicy'
        Properties:
          Topics:
            - !Ref ExampleTopic
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: 'sns:Publish'
                Resource: !Ref ExampleTopic
                Principal:
                  AWS: '*'
                Condition:
                  ArnLike:
                    AWS:SourceArn: !Sub 'arn:aws:*:*:${AWS::AccountId}:*'
    
      ExampleS3Bucket:
        Type: 'AWS::S3::Bucket'
        Properties:
          BucketName: 'myrdsbackupbucket'
    
      ExampleRDSSnapshotExport:
        Type: 'AWS::RDS::DBInstance'
        Properties:
          DBInstanceClass: db.t2.micro
          AllocatedStorage: '5'
          DBInstanceIdentifier: 'mydbinstance'
          Engine: mysql
          MasterUsername: admin
          MasterUserPassword: mypassword
          BackupRetentionPeriod: '7'
          PreferredBackupWindow: '03:00-04:00'
          StorageType: gp2
          DBSnapshotIdentifier: 'mydbsnapshot'
          Tags:
          - Key: Name
            Value: mydbinstance
        DependsOn:
          - ExampleS3Bucket
    
      ExampleRDSSnapshotExportLambda:
        Type: 'AWS::Serverless::Function'
        Properties:
          FunctionName: mylambdafunction2
          Description: mylambdafunction2
          Handler: index.handler
          Runtime: nodejs14.x
          Role: arn:aws:iam::48
          CodeUri: 's3://testing/tes.zip'
          Environment:
            Variables:
              S3_BUCKET: !Ref ExampleS3Bucket
              RDS_REGION: !Ref 'AWS::Region'
              RDS_SNAPSHOT_IDENTIFIER: !Ref ExampleRDSSnapshotExport
          Events:
            NewRDSSnapshot:
              Type: 'RDS'
              Properties:
                DBInstanceIdentifier: !Ref ExampleRDSSnapshotExport
    

    En el ejemplo anterior, ExampleS3Bucket es el bucket de S3 donde se exportará el instantáneo de RDS, ExampleRDSSnapshotExport es la instancia de base de datos RDS para exportar el instantáneo, y ExampleRDSSnapshotExportLambda es la función Lambda que exporta el instantáneo de RDS al bucket de S3.

    La sección Environment de la función ExampleRDSSnapshotExportLambda tiene tres variables: S3_BUCKET (el nombre del bucket de S3 donde se exportará el instantáneo de RDS), RDS_REGION (la región de AWS donde se encuentra la instancia de RDS) y RDS_SNAPSHOT_IDENTIFIER (el ID del instantáneo de RDS a exportar).

    La sección Events de la función ExampleRDSSnapshotExportLambda crea un nuevo activador que se activa cuando se crea un nuevo instantáneo de RDS para la DBInstanceIdentifier especificada.

Comments are closed.