PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkXml.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthAws.pb"
IncludeFile "CkRest.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect to the Amazon AWS REST server.
bTls.i = 1
port.i = 443
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"s3.amazonaws.com",port,bTls,bAutoReconnect)
; Provide AWS credentials for the REST call.
authAws.i = CkAuthAws::ckCreate()
If authAws.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
CkAuthAws::setCkServiceName(authAws, "s3")
success = CkRest::ckSetAuthAws(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"
bucketRegion.s = "eu-west-2"
sbBucketRegion.i = CkStringBuilder::ckCreate()
If sbBucketRegion.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbBucketRegion,bucketRegion)
; We only need to specify the LocationConstraint if the bucket's region is NOT us-east-1
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
If Not CkStringBuilder::ckContentsEqual(sbBucketRegion,"us-east-1")
CkXml::setCkTag(xml, "CreateBucketConfiguration")
CkXml::ckAddAttribute(xml,"xmlns","http://s3.amazonaws.com/doc/2006-03-01/")
CkXml::ckUpdateChildContent(xml,"LocationConstraint","eu-west-2")
EndIf
; --------------------------------------------------------------
; 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::setCkHost(rest, "chilkateuwest2.s3.amazonaws.com")
; Make the call to create the bucket.
responseStr.s
If Not CkStringBuilder::ckContentsEqual(sbBucketRegion,"us-east-1")
responseStr = CkRest::ckFullRequestString(rest,"PUT","/",CkXml::ckGetXml(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.
responseStr = CkRest::ckFullRequestNoBody(rest,"PUT","/")
EndIf
If CkRest::ckLastMethodSuccess(rest) <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbBucketRegion)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
If CkRest::ckResponseStatusCode(rest) <> 200
Debug "status code = " + Str(CkRest::ckResponseStatusCode(rest))
responseXml.i = CkXml::ckCreate()
If responseXml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkXml::ckLoadXml(responseXml,responseStr)
Debug CkXml::ckGetXml(responseXml)
Debug "Failed."
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbBucketRegion)
CkXml::ckDispose(xml)
CkXml::ckDispose(responseXml)
ProcedureReturn
EndIf
Debug "Bucket in the eu-west-2 region created."
CkRest::ckDispose(rest)
CkAuthAws::ckDispose(authAws)
CkStringBuilder::ckDispose(sbBucketRegion)
CkXml::ckDispose(xml)
CkXml::ckDispose(responseXml)
ProcedureReturn
EndProcedure