2016-10-26 3 views
3

저는 s3 통합을 위해 Bitbucket 파이프 라인, Python 및 Boto를 사용한 배포에 참여하고있는 JavaScript/Angular 2 개발자입니다. 어제이 세 가지 기술에 대해서만 소개되었습니다!Boto : s3에 여러 파일 업로드

내 webpack 빌드는 dist 폴더에 s3에 업로드하려는 모든 파일이 포함되어 있습니다. 이 파일을 s3 버킷의 루트에 표시하고 싶습니다.

나는 내 bitbucket-pipelines.yaml에 다음과 같습니다

image: node:5.6.0 

pipelines: 
    default: 
    - step: 
     script: 
      # other stuff.., 
      - python s3_upload.py io-master.mycompany.co.uk dist io-dist 

Here 전체 파이썬 s3_upload.py

당신이 볼 수 있듯이, 스크립트가 사용입니다 put_object :

client.put_object(
    Body=open(artefact, 'rb'), 
    Bucket=bucket, 
    Key=bucket_key 
) 

것은 내가 좋아하는 것이 무엇 할 수 있으려면 dist 폴더의 내용을 s3에 업로드하십시오. 이 작업을 수행하려면 파이썬을 배워야합니까, 아니면 Boto에이 작업을 수행 할 수있는 방법이 있습니까?

답변

0
def sync_to_s3(target_dir, aws_region=AWS_REGION, bucket_name=BUCKET_NAME): 
    if not os.path.isdir(target_dir): 
     raise ValueError('target_dir %r not found.' % target_dir) 

    s3 = boto3.resource('s3', region_name=aws_region) 
    try: 
     s3.create_bucket(Bucket=bucket_name, 
         CreateBucketConfiguration={'LocationConstraint': aws_region}) 
    except ClientError: 
     pass 

    for filename in os.listdir(target_dir): 
     logger.warn('Uploading %s to Amazon S3 bucket %s' % (filename, bucket_name)) 
     s3.Object(bucket_name, filename).put(Body=open(os.path.join(target_dir, filename), 'rb')) 

     logger.info('File uploaded to https://s3.%s.amazonaws.com/%s/%s' % (
      aws_region, bucket_name, filename)) 

당신은 인자로 폴더를 통과하고 파일

을 반복 할 수