Tcl
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
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