簡體   English   中英

AWS s3 對象上傳到谷歌雲存儲

[英]AWS s3 object upload to google cloud storage

我們正在嘗試將數據從 aws s3 遷移到 gcp 存儲。 我們嘗試在 gcp 中傳輸作業並且它工作正常。 因此,我們希望使用 aws lambda 以編程方式實現這一目標,因為我們依賴於 aws。 當我嘗試導入 google.cloud 模塊時,我收到此錯誤lambda cloudwatch 日志這是我的代碼:

import os
import logging
import boto3
#from StringIO import StringIO
from google.cloud import storage
#import google-cloud-storage

# Setup logging
LOG = logging.getLogger(__name__)
LOG.setLevel(os.environ.get('LOG_LEVEL', 'INFO'))

GCS_BUCKET_NAME=os.environ['GCS_BUCKET_NAME']
S3 = boto3.client('s3')


def lambda_handler(event, context):
    try:
        l_t_bucketKey = _getKeys(event)

        # Create google client
        storage_client = storage.Client()
        gcs_bucket = storage_client.get_bucket(os.environ['GCS_BUCKET_NAME'])

        LOG.debug('About to copy %d files', len(l_t_bucketKey))
        for bucket, key in l_t_bucketKey:
            try:
                inFileObj = StringIO()
                S3.download_fileobj(
                    Bucket=bucket,
                    Key=key,
                    Fileobj=inFileObj
                )
                blob = gcs_bucket.blob(key)
                blob.upload_from_file(inFileObj, rewind=True)  # seek(0) before reading file obj

                LOG.info('Copied s3://%s/%s to gcs://%s/%s', bucket, key, GCS_BUCKET_NAME, key)
            except:
                LOG.exception('Error copying file: {k}'.format(k=key))
        return 'SUCCESS'
    except Exception as e:
        LOG.exception("Lambda function failed:")
        return 'ERROR'


def _getKeys(d_event):
    """
    Extracts (bucket, key) from event
    :param d_event: Event dict
    :return: List of tuples (bucket, key)
    """
    l_t_bucketKey = []
    if d_event:
        if 'Records' in d_event and d_event['Records']:
            for d_record in d_event['Records']:
                try:
                    bucket = d_record['s3']['bucket']['name']
                    key = d_record['s3']['object']['key']
                    l_t_bucketKey.append((bucket, key))
                except:
                    LOG.warn('Error extracting bucket and key from event')
    return l_t_bucketKey

我從 pypi 網站下載了 google-cloud-storage 模塊並將其導入 aws lambda 層。 請幫助我提供下載此模塊的最佳鏈接。

Google Storage Bucket 可與 S3 API 一起使用,因此您只需在 Lambda 函數中使用它,無需任何額外的 GCP 庫。

    source_client = boto3.client(
        's3',
        endpoint_url='https://storage.googleapis.com',
        aws_access_key_id=os.environ['GCP_KEY'],
        aws_secret_access_key=os.environ['GCP_SECRET']

要獲取 access_key 和 secret - 轉到 GS 存儲桶設置 -> 互操作性 -> 用戶帳戶的訪問密鑰 -> 創建密鑰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM