将对象放入 boto3 中的存储桶

时间:2021-03-01 14:15:08

标签: python amazon-web-services amazon-s3 amazon-ec2

#!/usr/bin/env python3
import sys
import boto3
s3 = boto3.resource("s3")
bucket_name = sys.argv[1]
object_name = sys.argv[2]
try:
 response = s3.Object(bucket_name,
object_name).put(Body=open(object_name, 'rb'))
 print (response)
except Exception as error:
 print (error)

这是我的 put_bucket 函数,它将对象放入桶中,但是一旦我调用主程序,我几乎不需要用户输入就需要完成它,基本上是自动的。

import sys
import boto3
ec2 = boto3.resource('ec2', region_name = 'eu-west-1')
s3 = boto3.resource('s3')
keyname = 'AlexBpem.pem'
user_data = '''#!/bin/bash
yum update -y
yum install httpd -y
systemctl enable httpd
systemctl start httpd'''
s3.create_bucket(Bucket='ec2-assignbuke2',CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'})
sg = ec2.create_security_group(GroupName='MyWebServer', Description = 'WebServer', VpcId='vpc-0dea879f34afff60d')

instance = ec2.create_instances(
 ImageId='ami-0fc970315c2d38f01',
 MinCount=1,
 MaxCount=1,
 InstanceType='t2.nano',
 KeyName = 'AlexBpem',
 UserData = user_data, 
 SecurityGroupIds=[ sg.group_id ],
 SubnetId = 'subnet-06add059500af7905' 
)

for bucket_name in sys.argv[1:]:
 try:
     response = s3.create_bucket(Bucket=ec2-assignbuke2,
CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'})
     print (response)
 except Exception as error:
     print (error)

是我的主程序,我将如何在代码中使用 (def) 函数来使此调用自动进行。

1 个答案:

答案 0 :(得分:0)

要将您的内联“上传到 S3”代码转换为函数,您可以执行以下操作:

#!/usr/bin/env python3
import sys
import boto3
s3 = boto3.resource("s3")

def upload_to_s3(filename, bucket, key):
  try:
    response = s3.Object(bucket, key).put(Body=open(filename, 'rb'))
    print (response)
    return response
  except Exception as error:
    print (error)

要调用这个函数,你可以这样做:

file = '/home/users/james/dogs/toto.png'
bkt = 'mybucket'
key = 'dogs/tot.png'
rsp = upload_to_s3(file, bkt, key)