This is another stars-aligned, providential moment whereby my organization is seeking to choose a cloud provider at the same time Adobe is stepping up to the plate with a new arsenal of tools to get me there faster. After watching another excellent Brian Klaas conference session, this time at CF Summit 2020, it was time to dive in. His advice to start your cloud journey by moving local assets to the cloud resounded in my ears, and so that is what we'll be covering in this post. Part 1 will be an introduction to S3 as well as configuring in Adobe ColdFusion 2021.

Your first step is to log in with, or create an account as a root user in, the AWS Management Console. The root user is not recommended for general use of the AWS tools. Rather, it is my understanding that leveraging IAM users is how to provide granular security and controls via service accounts. But it all starts with the root user and a credit card. Actually, an American Express gift card worked for me (Azure does not like gift cards). Regardless, you're not gonna get dinged for charges during setup - unless of course you're dealing with a tremendous amount of assets, testing, and/or you don't set up security well enough, allowing others the use of your open account for nefarious file storage activity. Along those lines, let me just say that permitting public file access actually was the most difficult aspect of configuration.

Once made public, anyone can access your assets with a web browser. If kept private, you can easily upload and download files from within your CF 2021 code with ease, which I will show you. 

Amazon S3 (Simple Storage Service) provides object storage through a simple web interface. Once signed up, you can easily drag and drop files into buckets. For more information, see Amazon S3 storage.

While satisfying, where's the fun manual processes when you can automate using CF? 

Step 1: Setting Up Cloud Credentials in ColdFusion Administrator

Once you have an AWS account, you can set up your cloud credentials in CF 2021. Note that this assumes you have the AWSS3 package installed. Yes, I said package. CF 2021 comes with a package manager, similar to how CommandBox (or NPM) works. 

To obtain your credentials to get access to S3, you need to create your access key ID as well as your secret access key. Note: the secret key is only available for download when you access it. AWS makes you abundantly aware of this, but store in a safe place.

Once logged in, locate My Security Credentials in the navigation bar on the upper right.

From there, expand Access keys and create your new access key. Follow the directions from there. You will now use your key in the ColdFusion Administrator.

Log into the CF Admin and you will see two Cloud links in the Data & Services section.

Next, click on Cloud Credentials, and add your credential information there, as shown below. Name your alias s3Cred, as this is the name we'll be using in forthcoming examples. 

Once completed, you will see your information in the list of stored credentials. 

Step 2: Cloud Service Configuration

Next, head over to the second of the two links under Data & Services in the menu bar titled Cloud Configuration. Name your cloud configuration s3Conf:

Your cloud configuration has many settings; stick with the defaults for now. 

Note that this configuration can all be done in code in your application.cfc file.

Step 3: Creating a bucket; Uploading and downloading a file

Now that you have your service and configuration, you can test your connection. Run this code:

Let's run a quick test now. Assuming you have set up your credentials and configuration with the suggested names, the code below will create a bucket named "bucket.demo.blogpost1" and add a file named file.txt to it!

<cfscript>

    storageService=getCloudService("s3Cred","s3Conf");

  // create a bucket

  createBucketRequest = {

      "acl":"PRIVATE",

      "bucket" : "bucket.demo.blogpost1",

      "objectLockEnabledForBucket" : true

  }

  bucketObj=storageService.createBucket(createBucketRequest)

  // upload an object

  uploadStruct = {

        "srcFile" : "#ExpandPath('./')#/file.txt",

        "key" : "key22",

        "metadata":{

          "filename":"file.txt",

          "place":"bangalore",

          "category":"finance"

        }

  }

  bucketObj.uploadFile(uploadStruct)


  // download the file

  downloadStruct = {

    "destinationFile" : "file.txt",

    "key" : "key22"

  }

  try{

    downloadResponse=bucketObj.downloadToFile(downloadStruct)

    writeOutput("Object downloaded successfully")

    writeDump(downloadResponse)

  }

  catch (any e){

    writeOutput("Failed to download object")

    writeDump(e)

  }

</cfscript>

You should see the message "Object Downloaded Successfully" in your browser upon running this script.

If you go to your S3 Buckets, you should see the following:

And in that folder, you should see your file referenced as the key you gave it on the code. 

So by following this blog post you have done many things:

  • Learn about and set up S3
  • Configure S3 in ColdFusion Administrator
  • Programmatically created a bucket, and uploaded and downloaded a file from that bucket. 

In our next blog post we will dig more deeply into the details of S3 and compare them to Azure Blob.