Sample code for 30+ languages & platforms
Tcl

Create S3 Bucket in a Region

See more Amazon S3 Examples

Demonstrates how to create an S3 bucket in a specified region. This example will create a bucket in the eu-west-2 region.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

set rest [new_CkRest]

# Connect to the Amazon AWS REST server.
set bTls 1
set port 443
set bAutoReconnect 1
set success [CkRest_Connect $rest "s3.amazonaws.com" $port $bTls $bAutoReconnect]

# Provide AWS credentials for the REST call.
set authAws [new_CkAuthAws]

CkAuthAws_put_AccessKey $authAws "AWS_ACCESS_KEY"
CkAuthAws_put_SecretKey $authAws "AWS_SECRET_KEY"
CkAuthAws_put_ServiceName $authAws "s3"
set success [CkRest_SetAuthAws $rest $authAws]

# We'll send a PUT request having an XML body such as this:
# <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
#   <LocationConstraint>BucketRegion</LocationConstraint> 
#   </CreateBucketConfiguration>

# Create the XML body specifying the region as "eu-west-2"
set bucketRegion "eu-west-2"
set sbBucketRegion [new_CkStringBuilder]

CkStringBuilder_Append $sbBucketRegion $bucketRegion

# We only need to specify the LocationConstraint if the bucket's region is NOT us-east-1
set xml [new_CkXml]

if {![CkStringBuilder_ContentsEqual $sbBucketRegion "us-east-1"]} then {
    CkXml_put_Tag $xml "CreateBucketConfiguration"
    CkXml_AddAttribute $xml "xmlns" "http://s3.amazonaws.com/doc/2006-03-01/"
    CkXml_UpdateChildContent $xml "LocationConstraint" "eu-west-2"
}

# --------------------------------------------------------------
# IMPORTANT: To create a bucket in the default us-east-1 region,
# do not add the LocationConstraint.  Adding a LocationConstraint of "us-east-1"
# causes an error "The specified location-constraint is not valid."
# By default, the bucket is created in us-east-1 by sending a PUT with an empty body.
# --------------------------------------------------------------

# Set the bucket name via the HOST header.
# In this case, the bucket name is "chilkateuwest2".
CkRest_put_Host $rest "chilkateuwest2.s3.amazonaws.com"

# Make the call to create the bucket.

if {![CkStringBuilder_ContentsEqual $sbBucketRegion "us-east-1"]} then {
    set responseStr [CkRest_fullRequestString $rest "PUT" "/" [CkXml_getXml $xml]]
} else {
    # If the bucket is to be created in the us-east-1 region (the default region)
    # just send a PUT with no body.
    set responseStr [CkRest_fullRequestNoBody $rest "PUT" "/"]
}

if {[CkRest_get_LastMethodSuccess $rest] != 1} then {
    puts [CkRest_lastErrorText $rest]
    delete_CkRest $rest
    delete_CkAuthAws $authAws
    delete_CkStringBuilder $sbBucketRegion
    delete_CkXml $xml
    exit
}

if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
    puts "status code = [CkRest_get_ResponseStatusCode $rest]"
    set responseXml [new_CkXml]

    CkXml_LoadXml $responseXml $responseStr
    puts [CkXml_getXml $responseXml]
    puts "Failed."
    delete_CkRest $rest
    delete_CkAuthAws $authAws
    delete_CkStringBuilder $sbBucketRegion
    delete_CkXml $xml
    delete_CkXml $responseXml
    exit
}

puts "Bucket in the eu-west-2 region created."

delete_CkRest $rest
delete_CkAuthAws $authAws
delete_CkStringBuilder $sbBucketRegion
delete_CkXml $xml
delete_CkXml $responseXml