1
私のワークフローにはS3からダウンロードしたtarファイルがあり、展開して氷河のボールトにアップロードすることもできます。 S3バケットに他のファイルがあることを考えると、私はライフサイクル管理を使いたくないです。私はこれをすべてbotoの下で動作させていて、ゆっくりとboto3にアップグレードしていますboto3文字列を氷河ファイルにアップロード
私は最近、オンディスクファイルにダウンロードするのではなく、文字列オブジェクトにダウンロードして操作することで、私はディスクに触れる必要がないので、より高速です。
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket,Key=path)
my_file = tarfile.open(fileobj=(StringIO(response['Body'].read())))
my_file.extractall(path="EXTRACTPATH")
私はboto3経由氷河にアップロードしたい場合は、ここで私が持っているものです。
glacier = boto3.client('glacier', region_name='MYREGION')
archive = glacier.upload_archive(vaultName='MYVAULT', archiveDescription=filename, body=response['Body'].read())
そして、それは私をネット:
botocore.exceptions.ClientError: An error occurred (InvalidParameterValueException) when calling the UploadArchive operation: Invalid Content-Length: 0
任意の考えは?
同じ身体を2回読んでいますか? 'StreamingBody'はソケットからストリーミングされるため、一度しか読み込めません。 –
よろしくお願いします。私は 'response ['Body']。read()'の結果を2つの場所で使用していたので、動作するようです。それを答えてください。 – mkomarinski