Priya Rani
Priya Rani

Reputation: 1173

Unable to Create S3 Bucket(in specific Region) using AWS Python Boto3

I am trying to create bucket using aws python boto 3.

Here is my code:-

import boto3
response = S3_CLIENT.create_bucket(
  Bucket='symbols3arg',
  CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'}
)
print(response)

I am getting below error:-

botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.

Upvotes: 2

Views: 6522

Answers (3)

Dipendra Dangal
Dipendra Dangal

Reputation: 1183

You can try the following code:

import boto3

client = boto3.client('s3',region_name="aws_region_code")

response = client.create_bucket(
    Bucket='string'
)

Upvotes: 0

John Rotenstein
John Rotenstein

Reputation: 269091

Send the command to S3 in the same region:

import boto3

s3_client = boto3.client('s3', region_name='eu-west-1')
response = s3_client.create_bucket(
  Bucket='symbols3arg',
  CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'}
)

Upvotes: 1

Adiii
Adiii

Reputation: 59896

This happens you configured a different region during aws configure in specifying a different region in s3 client object initiation.

Suppose my AWS config look like

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODEXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

and my python script for creating bucket

import logging
import boto3
from botocore.exceptions import ClientError


def create_bucket(bucket_name, region=None):
    # Create bucket
    try:
        if region is None:
            s3_client = boto3.client('s3')
            s3_client.create_bucket(Bucket=bucket_name)
        else:
            s3_client = boto3.client('s3')
            location = {'LocationConstraint': region}
            s3_client.create_bucket(Bucket=bucket_name,
                                    CreateBucketConfiguration=location)
    except ClientError as e:
        logging.error(e)
        return False
    return True

create_bucket("test-bucket-in-region","us-west-1")

This will throw the below error

 ERROR:root:An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The us-west-1 location constraint is incompatible for the region specific endpoint this request was sent to.

enter image description here To solve this issue all you need to specify the region in s3 client object initiation. A working example in different region regardless of aws configure

import logging
import boto3
from botocore.exceptions import ClientError


def create_bucket(bucket_name, region=None):
    """Create an S3 bucket in a specified region

    If a region is not specified, the bucket is created in the S3 default
    region (us-east-1).

    :param bucket_name: Bucket to create
    :param region: String region to create bucket in, e.g., 'us-west-2'
    :return: True if bucket created, else False
    """

    # Create bucket
    try:
        if region is None:
            s3_client = boto3.client('s3')
            s3_client.create_bucket(Bucket=bucket_name)
        else:
            s3_client = boto3.client('s3', region_name=region)
            location = {'LocationConstraint': region}
            s3_client.create_bucket(Bucket=bucket_name,
                                    CreateBucketConfiguration=location)
    except ClientError as e:
        logging.error(e)
        return False
    return True

create_bucket("my-working-bucket","us-west-1")

create-an-amazon-s3-bucket

Upvotes: 4

Related Questions