nizam.sp
nizam.sp

Reputation: 4062

Google Cloud Storage Bucket creation

I want to create a google bucket if it doesn't exist. Otherwise, I want to reuse the bucket name. How to do it? Its equivalent of the unix command

mkdir -p dir_name

I used the command but my shell script crashes when I run this next time.

gsutil mb -l ASIA gs://my_bucket_name_blah_blah

Upvotes: 7

Views: 4530

Answers (4)

Radu Gabriel
Radu Gabriel

Reputation: 3201

You can relay on gcloud also

function ensure_gcp_bucket_exists {
  echo "Running "ensure_gcp_bucket_exists
  BUCKET_NAME="gs://test-bucket"
  if gcloud storage buckets describe "${BUCKET_NAME}" &> /dev/null ; then
     "GCP Bucket ${BUCKET_NAME} already exists"
  else
    echo "Creating GCP Bucket ${BUCKET_NAME}"
    gcloud storage buckets create "${BUCKET_NAME}" 
  fi
}

Upvotes: 0

nenetto
nenetto

Reputation: 441

Following BoHuang answer I could came up with this:

# This function create a bucket
function create_bucket {

#PROJECT=$1
#BUCKET=$2
#REGION=$3
echo "Creating bucket [$2] in region [$3] for project [$1]"

if ! gsutil ls -p $1 gs://$2 &> /dev/null;
    then
        echo creating gs://$2 ... ;
        gsutil mb -p $1 -c regional -l $3 gs://$2;
        sleep 5;
    else
        echo "Bucket $2 already exists!"
        echo "Please revise the bucket and delete manually or rerun the code"
        exit 1
fi

}

Upvotes: 2

BoHuang
BoHuang

Reputation: 129

After six years ....

I found this GitLab script can use as reference to solve this problem

The key part is

if ! gsutil ls -p ${GCP_PROJECT_ID} gs://${BUCKET} &> /dev/null; \
    then \
        echo creating gs://${BUCKET} ... ; \
        gsutil mb -p ${GCP_PROJECT_ID} -c regional -l ${GCP_REGION} gs://${BUCKET}; \
        sleep 10; \
    fi

That's a block of Makefile, but it's almost same as a shell script

Upvotes: 1

jterrace
jterrace

Reputation: 67063

You could check for the existence of the bucket first. I think something like this would work:

gsutil ls -b gs://my_bucket_name_blah_blah || gsutil mb -l ASIA gs://my_bucket_name_blah_blah

Since the first command will return a 0 error code if the bucket already exists, the second command will only be executed if the bucket does not exist.

Note however that the first command will also return a non-zero exit code in the case of errors (transient error or permission denied). So you might need a more robust way of creating buckets.

Upvotes: 15

Related Questions