create - python s3 bucket
¿Cómo puedo determinar fácilmente si existe un recurso de Boto 3 S3? (6)
Al momento de escribir esto, no hay una forma de alto nivel para verificar rápidamente si existe un depósito y usted tiene acceso a él, pero puede realizar una llamada de bajo nivel a la operación de HeadBucket. Esta es la forma más económica de realizar esta comprobación:
from botocore.client import ClientError
try:
s3.meta.client.head_bucket(Bucket=bucket.name)
except ClientError:
# The bucket does not exist or you have no access.
Alternativamente, también puede llamar a create_bucket
repetidamente. La operación es idempotente, por lo que creará o simplemente devolverá el depósito existente, lo que es útil si está comprobando la existencia para saber si debe crear el depósito:
bucket = s3.create_bucket(Bucket=''my-bucket-name'')
Como siempre, asegúrate de revisar la documentación oficial .
Nota: Antes de la versión 0.0.7, meta
era un diccionario de Python.
Por ejemplo, tengo este código:
import boto3
s3 = boto3.resource(''s3'')
bucket = s3.Bucket(''my-bucket-name'')
# Does it exist???
He tenido éxito con esto:
import boto3
s3 = boto3.resource(''s3'')
bucket = s3.Bucket(''my-bucket-name'')
if bucket.creation_date:
print("The bucket exists")
else:
print("The bucket does not exist")
Utilice la función de búsqueda -> Devuelve Ninguno si existe un cubo
if s3.lookup(bucketName) is None:
bucket=s3.create_bucket(bucketName) # Bucket Don''t Exist
else:
bucket = s3.get_bucket(bucketName) #Bucket Exist
ejemplo y fue muy útil. Seguí la documentación de boto3 y aquí está mi código de prueba limpio. He añadido un cheque para el error ''403'' cuando los depósitos son privados y devuelven un ''¡Prohibido!'' error.
import boto3, botocore
s3 = boto3.resource(''s3'')
bucket_name = ''some-private-bucket''
#bucket_name = ''bucket-to-check''
bucket = s3.Bucket(bucket_name)
def check_bucket(bucket):
try:
s3.meta.client.head_bucket(Bucket=bucket_name)
print("Bucket Exists!")
return True
except botocore.exceptions.ClientError as e:
# If a client error is thrown, then check that it was a 404 error.
# If it was a 404 error, then the bucket does not exist.
error_code = int(e.response[''Error''][''Code''])
if error_code == 403:
print("Private Bucket. Forbidden Access!")
return True
elif error_code == 404:
print("Bucket Does Not Exist!")
return False
check_bucket(bucket)
Espero que esto ayude a algo nuevo en boto3 como yo.
puedes usar conn.get_bucket
from boto.s3.connection import S3Connection
from boto.exception import S3ResponseError
conn = S3Connection(aws_access_key, aws_secret_key)
try:
bucket = conn.get_bucket(unique_bucket_name, validate=True)
except S3ResponseError:
bucket = conn.create_bucket(unique_bucket_name)
citando la documentación en http://boto.readthedocs.org/en/latest/s3_tut.html
A partir de Boto v2.25.0, esto ahora realiza una solicitud HEAD (mensajes de error menos costosos pero peores).
>>> import boto3
>>> s3 = boto3.resource(''s3'')
>>> s3.Bucket(''Hello'') in s3.buckets.all()
False
>>> s3.Bucket(''some-docs'') in s3.buckets.all()
True
>>>