Git Product home page Git Product logo

aws-cfml's Introduction

aws-cfml

aws-cfml is a CFML library for interacting with AWS APIs.

It requires Lucee 4.5+ or ColdFusion 11+.

It currently supports the following APIs:

  • cognitoIdentity
  • connect
  • dynamodb
  • ec2
  • ec2 auto-scaling groups
  • elasticsearch
  • elastictranscoder
  • polly
  • rekognition
  • s3
  • secretsmanager
  • ses
  • sns
  • ssm
  • sqs
  • translate

Note: It has full support for the AWS S3 and AWS DynamoDB REST APIs. Other services are supported to varying degrees - if you are using a service and add a method you need, please consider contributing it back to this project. My thanks to @davidsf and @sjdaniels who contributed the translate and rekognition service components respectively.

aws-cfml also supports making signed requests to arbitrary AWS endpoints. It currently supports only AWS Signature v4 for authentication.

Installation

This wrapper can be installed as standalone library or as a ColdBox Module. Either approach requires a simple CommandBox command:

$ box install aws-cfml

Alternatively the git repository can be cloned into the desired directory.

Standalone Usage

Once the library has been installed, the core aws component can be instantiated directly:

aws = new path.to.awscfml.aws(
    awsKey = 'YOUR_PUBLIC_KEY',
    awsSecretKey = 'YOUR_PRIVATE_KEY',
    defaultRegion = 'us-east-1'
);

Note: An optional httpProxy argument is available when initializing the core aws component (a struct with server and port keys). When set this will proxy all AWS requests.

ColdBox Module

To use the library as a ColdBox Module, add the init arguments to the moduleSettings struct in config/Coldbox.cfc:

moduleSettings = {
    awscfml: {
        awsKey: '',
        awsSecretKey: '',
        defaultRegion: ''
    }
}

You can then leverage the library via the injection DSL: aws@awscfml:

property name="aws" inject="aws@awscfml";

Note: You can bypass the init arguments altogether and use environment variables, a credentials file, or an IAM role with aws-cfml. See Credentials below.

Getting Started

// aws.cfc contains components for interacting with AWS services
aws = new aws(awsKey = 'YOUR_PUBLIC_KEY', awsSecretKey = 'YOUR_PRIVATE_KEY', defaultRegion = 'us-east-1');

buckets = aws.s3.listBuckets();
tables = aws.dynamodb.listTables();

// you can make signed requests to any AWS endpoint using the following:
response = aws.api.call(service, host, region, httpMethod, path, queryParams, headers, body, awsCredentials);

// using named arguments you can supply a `region` to any method call
// this overrides the default region set at init
response = aws.s3.listBucket(region = 'us-west-1', bucket = 'mybucket');

All responses are returned as a struct with the following format:

response = {
    responseHeaders: { } // struct containing the headers returned from the HTTP request
    responseTime: 123 // time in milliseconds of the HTTP request
    statusCode: 200 // status code returned
    rawData: bodyOfHTTPResponse // whatever was in the body of the HTTP request response
    data: parsedRawData // the rawData response parsed into CFML (from XML or JSON)
};

Note: The data key might not be present if the request is one where it does not make sense to parse the body of the response. (For instance when getting an object from S3.)

Credentials

You can supply an aws key and secret key at initialization:

aws = new aws( awsKey = 'YOUR_PUBLIC_KEY', awsSecretKey = 'YOUR_PRIVATE_KEY' )

If you do not then aws-cfml will follow the configuration resolution followed by the AWS CLI: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html - see Configuration Settings and Precedence. In order, it will check for the presence of environment variables, a credentials file, and IAM role credentials (which are only valid on EC2).

You can also pass credentials as a named argument to any service method:

aws = new aws();
awsCredentials = {awsKey: 'ANOTHER_PUBLIC_KEY', awsSecretKey: 'ANOTHER_PRIVATE_KEY'};
response = aws.s3.listBucket(awsCredentials = awsCredentials, region = 'us-west-1', bucket = 'mybucket');

DynamoDB

DynamoDB data is typed. The types supported are Number, String, Binary, Boolean, Null, String Set, Number Set, Binary Set, List and Map. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes

This library's DynamoDB implementation is set up to work with CFML types by default, so that you can supply data in a struct containing string, number, boolean, binary, null, array and struct values. Structs and arrays can be nested. Everything is then type encoded automatically.

Note: This has worked really well for me on Lucee, however, it might not work as well with ColdFusion due to its less accurate variable typing. In both cases, keep in mind that data will typed as a Number if an isNumeric() check returns true, which it may well do in situations you do not expect. In addition, when using ColdFusion the serializeJSON() function seems to want to encode anything that can be cast as a number to a number in the JSON string, so the JSON string has to be edited by dynamodb.cfc before posting it to DynamoDB. It seems to work in my (limited) testing, but it is quite possible I have missed some of the encoding mistakes, which would lead to DynamoDB returning errors for invalidly encoded JSON strings.

Similarly when you retrieve data from a DynamoDB table, it will be automatically decoded for you, so that you get back a struct of data for each row.

Here is an example:

// putting an item with a HASH key of `id = 1`
// note that table HASH and RANGE key values are included in the item struct
item = {
    'id': 1,
    'thisisnull': javaCast( 'null', '' ),
    'number': 3.45,
    'nested': {
        'list': [ 'foo', 2 ]
    }
};
putItemResult = aws.dynamodb.putItem( 'myTableName', item );

// getting that item
itemFromDynamoDB = aws.dynamodb.getItem( 'myTableName', { 'id': 1 } );

If you do not want your data to be type encoded automatically you have two options. The first is to pass the argument typeDefinitions = typeDefStruct into a method where typeDefStruct is a struct whose keys match keys in your item, and whose values are the types of the key values in your item. Where a key match is found, dynamodb.cfc will use the specified type for encoding rather than attempting to determine the type.

The other option is to pass dataTypeEncoding = false to any method, and data will be not be encoded at all. (Thus you will need to encode items yourself.)

Note: If you want to use non-native CFML types such as the various set types, you will need to use one of these latter two options when putting items.

Polly

The following operations have been implemented: DescribeVoices, SynthesizeSpeech.

You can configure the default language and default engine by using a constructorArgs struct in your module settings (or by passing this struct in at init if you are using this as a standalone library):

{
    translate: {
        defaultLanguageCode: 'es-ES',
        defaultEngine: 'neural'
    }
}

Example of synthesizing text using "Kendra" voice for default language (en-US).

response = aws.polly.synthesizeSpeech( 'Hello World', 'Kendra' );
// The stream data is in: response.rawData

Rekognition

The following basic image processing operations have been implemented: DetectText, DetectFaces, RecognizeCelebrities, DetectLabels, DetectModerationLabels.

Here is an example for detecting unsafe content in an image:

imageBinary = fileReadBinary(expandPath('/path/to/image.jpg'));
imageBase64 = binaryEncode(imageBinary, 'base64');

response = aws.rekognition.detectModerationLabels({'Bytes': imageBase64});
moderationlabels = response.data.ModerationLabels;
// moderationlabels is an array of moderation label structs
// see https://docs.aws.amazon.com/rekognition/latest/dg/moderation.html

S3

Most basic operations are supported for S3. However, there is currently no support for updating bucket settings. Support for encrypted buckets and objects is also missing.

TODO: provide an example for using the getFormPostParams() method.

Secrets Manager

Only the GetSecretValue operation has been implemented. Here's an example of using it:

response = aws.secretsmanager.getSecretValue( 'YourSecretId' );
secretValue = response.data.SecretString;

SSM

Only the getParameter and getParameters operations have been implemented. Here's an example of using it:

response = aws.ssm.getParameter( 'YourParameterName', true );
decryptedValue = response.data.Parameter.Value;

Translate

You can configure the default source and target languages by using a constructorArgs struct in your module settings (or by passing this struct in at init if you are using this as a standalone library):

{
    translate: {
        defaultSourceLanguageCode: 'es',
        defaultTargetLanguageCode: 'en'
    }
}

Also you can override in the translate call:

response = aws.translate.translateText( Text = 'house', SourceLanguageCode = 'en', TargetLanguageCode = 'de' );
// The translated text is in: response.data.TranslatedText;

You can see the supported language codes by the service in the api docs: https://docs.aws.amazon.com/en_en/translate/latest/dg/API_TranslateText.html

aws-cfml's People

Contributors

aliaspooryorik avatar barronbud avatar bigtony13 avatar billvsd avatar cybersonic avatar daemach avatar davidsf avatar elpete avatar evbrew avatar garciadev avatar giancarlogomez avatar harrymuc avatar heanthor avatar i-lie avatar illequipped avatar ivanubi avatar jcberquist avatar jfmontanaro avatar jordanclark avatar justincarter avatar killian-vetter avatar lucidsolutions avatar mjclemente avatar nathfy avatar nolanerck avatar sjdaniels avatar zspitzer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aws-cfml's Issues

Upload to MinIO using S3

I don't know whether this code support for MinIO or not.

I'm using Lucee 5.3.9.141 when I use listBuckets function it showed all the bucket list. When I try to getBucketAccess or putObject it showed Connection Failure with empty respond header.

Intermittent Issue

Installed code and everything was working flawlessly yesterday on CF implementation. I have made no code changes and today it no longer works. Further, I am getting no errors just a blank page. If I comment out the aws() call my page loads. I am only using the S3 service. Any ideas on how to troubleshoot what is going on?

aws = new cfcs.aws( awsKey = '*****', awsSecretKey = '*****', defaultRegion = 'us-east-2' );

// all_buckets = aws.s3.listBucket(delimiter='/',bucket='smartsys-website-images');
// all_buckets = all_buckets.data.CommonPrefixes;

//bucket = aws.s3.listBucket(delimiter='/',prefix='#url.p#/',bucket='smartsys-website-images');
//s3_images = bucket.data.Contents;
//s3_image_count = arraylen(s3_images);

Any help would be appreciated?

listBuckets returns struct or array

This is more a question than an issue, depending on the answer..

Invoking s3.listBuckets(), if there is one bucket the data.Buckets value is a struct, if there is more than one, it's an array.

Is this the expected/desired behaviour?

Thanks!

How to put a file to Wasabi S3?

I am trying to put a file to s3.wasabisys.com instead of amazon. Their compatibility with Amazon is 100%.

Where is the code below can i specify the different end-point?

aws = new aws(
    awsKey = 'YOUR_PUBLIC_KEY',
    awsSecretKey = 'YOUR_PRIVATE_KEY',
    defaultRegion = 'us-east-1'
);

zipFileData = fileReadBinary('myfile.zip');
aws.s3.putObject(bucket = 'mybucket', objectKey = 'xxxx', fileContent = zipFileData);

Using presigned url to get a version of an object

Hi. Is it possible to use the generatePresignedURL function to link to a version of an object? I have tried adding the s3 object version ID to the query string (e.g. https://s3-eu-west-2.amazonaws.com//?versionId=&...) but it generates an error: 'The request signature we calculated does not match the signature you provided. Check your key and signing method.' I also tried adding it as the X-Amz-Version-Id header but this seems to be ignored. Any help would be greatly appreciated.

Thanks
Richard

Would love some help

No matter what I do I am getting SignatureDoesNotMatch as a response. We are initially just trying to use the sts service to get an access token. If I run it via Postman it works, same with CURL. @jcberquist are you open to consulting, would be happy to pay for your time.

Put file to S3

How would I use this to move a zip file to S3? And how would I get that file back from S3 to my filesystem?

Creating a presigned PUT URL with public-read ACL

Hello,

I am trying to generate a presigned PUT URL where the file has public-read acl after it is uploaded. Googling around the different SDKs I do see it is possible, but I cannot seem to figure out the spot in this library to add it.

I was able to upload the file just fine with the correct content type by taking the generatePresignedURL function and changing the verb to PUT.

Any help would be appreciated. If I do get it figured out I will report back.

Add servicesPath arg to init()

When an application already has a directory or mapping named services, the constructor throws an cfc not found exception.

A servicesPath argument would resolve this as below.

public struct function init(
	string awsKey = '',
	string awsSecretKey = '',
	string defaultRegion = '',
	struct constructorArgs = {},
	struct httpProxy = {server: '', port: 80},
	string servicesPath = 'services'
) {
	this.api = new com.api(awsKey, awsSecretKey, defaultRegion, httpProxy);

	for (var service in variables.services) {
		if (StructKeyExists(arguments.constructorArgs, service)) {
			StructAppend(variables.constructorArgs[service], arguments.constructorArgs[service]);
		}
		this[service] = new '#arguments.servicesPath#.#service#'(this.api, variables.constructorArgs[service]);
	}

	return this;
}

In my case, I'd instantiate it like so:

awscfml = new services.awscfml.aws(
	awsKey = "foo",
	awsSecretKey = "bar",
	defaultRegion = "ap-southeast-2",
	servicesPath = "app.services.awscfml.services"
);

Question, not issue - what to do with a PEM file?

Does anyone have a guide for how this works?

Need to upload to a S3 bucket and client will only provide PEM file.
Not really familiar with using these and having trouble finding the info online.

Lucee on Windows.
Already using aws-cfml for S3 with awsKey/awsSecretKey for credentials.

Can i just take the PEM file somehow and extract what i need for above,
or does it have to be installed on the server somehow (ugh),
or something else entirely?

How could I create signed cloudfront urls?

I see there's a method for creating signed s3 urls, but I would like to create signed cloudfront urls. I'm guessing there's an overlap here... would it be possible to use this library for this purpose?

The use case is that I have a cloudfront distribution that serves public and restricted content. I need all links to this content to go through cloudfront.

I'm trying to make sense of this set of AWS docs: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html

Signature fails when path is URL encoded with CF-2016

I was fighting with a AWS signature does not match issue and narrowed it down to a specific line in coldfusion.cfc:20. Original line is:

var fullPath = utils.encodeUrl( path, false ) & ( !queryParams.isEmpty() ? ( '?' & utils.parseQueryParams( queryParams ) ) : '' );

Changing to:

var fullPath = path & ( !queryParams.isEmpty() ? ( '?' & utils.parseQueryParams( queryParams ) ) : '' );

fixes the issue.

I was posting a request to the execute-api service at AWS. My URI is:
https://someletters.execute-api.us-west-2.amazonaws.com/beta/@connections/a0abIc59PHcCJQQ=

Question: S3 Upload speed very slow

I guess it s not an issue with aws-cfml but i would be interested to see if this is normal behavior.
It takes about 1 second to upload 100kb to s3. I tested it with a 1,7mb image at first wich took about 18 seconds. I i do the same on the same server with the web interface of S3 it takes under 1 second.

Any experiences / ideas how to speed that up?

Does this integrate with Cloudwatch?

Hey John, I love using your ST3 plugin for ACF/Lucee, and your quick responses to issues that come up, so I'm intrigued about this project.

I'm currently looking for a way to monitor the health of my Lucee apps using CloudWatch Events, which is new to me. Looks like I need to use the put-events AWS API call (https://docs.aws.amazon.com/cli/latest/reference/events/put-events.html)

Have you done this? I'm assuming this would be possible using your wrapper. Yes? No? Not sure? Thanks!

PutObject - PDF

By any chance do you have a sample using the S3.putObject request? I have a page that accepts an upload of a PDF from a client, reads the file contents in using fileReadBinary(), and I cannot figure out the correct usage of the putObject() call. I've tried passing the file contents raw, with toBinary, with toBase64, with toBinary and then toBase64, even tried various encodeForXML as the message I'm receiving back references an Bad Request - Invalid XML.

"S3RESPONSE":{
	"responseHeaders":{
		"Explanation":"Bad Request",
		"Connection":"close",
		"Transfer-Encoding":"chunked",
		"Date":"Thu, 29 Aug 2019 20:01:21 GMT",
		"Server":"AmazonS3",
		"x-amz-id-2":"p3BuX1V4L/f0zexSJ+crfZxZQI1M+jj6XBlCm/KcCYj8lPeDPpgGHwkk4mGofUyavACP6H9c/iU=",
		"Content-Type":"application/xml",
		"Status_Code":400,
		"x-amz-request-id":"FBA1B419A83083C3",
		"Http_Version":"HTTP/1.1"
	},
	"rawData":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>MalformedXML</Code><Message>The XML you provided was not well-formed or did not validate against our published schema</Message><RequestId>FBA1B419A83083C3</RequestId><HostId>p3BuX1V4L/f0zexSJ+crfZxZQI1M+jj6XBlCm/KcCYj8lPeDPpgGHwkk4mGofUyavACP6H9c/iU=</HostId></Error>",
	"statusCode":400,
	"responseTime":580.0,
	"error":{
		"Message":"The XML you provided was not well-formed or did not validate against our published schema",
		"Code":"MalformedXML",
		"RequestId":"FBA1B419A83083C3",
		"HostId":"p3BuX1V4L/f0zexSJ+crfZxZQI1M+jj6XBlCm/KcCYj8lPeDPpgGHwkk4mGofUyavACP6H9c/iU="
	}
}

Secret Manager

Hi

For the secret manager usage:

response = aws.secretsmanager.getSecretValue( 'YourSecretId' );
secretValue = response.data.SecretString;

is YourSecretId the ARN of the secret and SecretString the Secret Key?

Suppose my values in secret manager as follows:

Secret key | Secret value

password | xxxxxxxxxxxx

YourSecretId == arn:aws:secretsmanager:ap-southeast-2:123456789012:secret:MyRDSSecret-C4t4tS
SecretString == password

response = aws.secretsmanager.getSecretValue( 'arn:aws:secretsmanager:ap-southeast-2:123456789012:secret:MyRDSSecret-C4t4tS' );
secretValue = response.data.password;

does that look about right?

Request: make code CF10 compatible

Thanks for this code! I'm trying to use it on a CF10 project with DynamoDB. I modified the code locally to work around CF11-specific code, but am stuck on the parseQueryParams() method in the utils.cfc.

If you could write that method to work work in CF10, I'd be happy to share the rest of my code that works with cf10. I wish I could upgrade, but it's not an option at this time.

Amazon SP-API Example

Hello All,

Does anyone have an example of how to use this plugin with the Amazon SP-API? I've tried a few things but have been unsuccessful.

Thanks!

Download is corrupted

Hey John,

I'm sure this is not an issue so much as something I'm doing wrong & I would really appreciate any insight you could provide as I'm having the devil of a time trying to get to the bottom of it. I'm using your excellent library inside a function thusly:

        try {

            response = aws.s3.getObject(
                Bucket = "#arguments.s3_bucket#",
                ObjectKey = "#arguments.s3_file_key#"
                );

            if (response.statusCode eq 200) {

                file_content = response.rawData;
                file_disp = response.responseHeaders['Content-Disposition'];
                file_type = response.responseHeaders['Content-Type'];
                file_length = response.responseHeaders['Content-Length'];

                cfheader(name="Content-Disposition" value=file_disp);
                cfheader(name="Content-Type" value=file_type);
                cfheader(name="Content-Length" value=file_length);
                cfcontent(file=file_content reset="true" type=file_type);

                return "Success";

            } else {
                return "S3 Download Error!";
            }

        } catch (any e) {
            return "Error: #e.message#";
        }

Authentication has already been done. Files look OK on S3 (They've been uploaded using your library) & will download successfully through the console.

It looks like it works OK & "success" is returned with the downloaded file - but the file content is corrupted (as in I can't open it). Do you have any idea why this might be? Do I need to process the rawData somehow? Any help would be very gratefully received. TIA

How to pass in SSML on Polly

I am trying to run this:

form.inString = "<speak><prosody pitch='medium' rate='medium'>Ginelle, Middens</prosody></speak>"
form.voice = "Joanna"

 response = variables.aws.polly.synthesizeSpeech(
          text = form.inString.replacelist("'", '"', "all"), 
          voiceid = form.voice,
          textType = "ssml", 
          )

What I get in response is as if the SSML (XML) tags were not even there.

It is responding as if it were

speak prosody pitch medium rate medium Ginelle, Middens prosody speak

I have tried encodeForXML and canonicalize.

I wonder what it needs

aws.api.call returns "signature we calculated does not match the signature you provided"

Any ideas?

Here is the response:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
   <Code>SignatureDoesNotMatch</Code>
   <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
   <AWSAccessKeyId>[REDACTED]</AWSAccessKeyId>
   <StringToSign>AWS4-HMAC-SHA256 20171207T174452Z 20171207/us-east-1/s3/aws4_request 763b7c22df8a9fd0d780c11fd576dfcfb85fb5673eb9b1925f0bdfd607c046b7</StringToSign>
   <SignatureProvided>0286f3f0236dcfd0f9b96a600bbcd3636693df6319fe19f77f91010c2dd07b3b</SignatureProvided>
   <StringToSignBytes>41 57 53 34 2d 48 4d 12 43 2d 53 48 41 32 35 36 0a 32 30 31 37 31 32 30 37 54 31 37 34 34 35 32 5a 0a 32 30 31 37 31 32 30 37 2f 75 73 2d 65 61 73 74 2d 31 2f 73 33 2f 61 77 73 34 5f 72 65 71 75 65 73 74 0a 37 36 33 62 37 63 32 32 64 66 38 61 39 66 64 30 64 37 38 30 63 31 31 66 64 35 37 36 64 66 63 66 62 38 35 66 62 35 36 37 33 65 62 39 62 31 39 32 35 66 30 62 37 37 64 36 30 37 63 30 34 36 62 37</StringToSignBytes>
   <CanonicalRequest>GET /resourceFile/2017/0362337b-fa9b-4e06-a393-aa87e91c71bc.82892e8d-079f-4c7c-b5d3-c683c55712dc.zip tagging=true host:my-bucket.s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD x-amz-date:20171207T171252Z host;x-amz-content-sha256;x-amz-date STREAMING-AWS4-HMAC-SHA256-PAYLOAD</CanonicalRequest>
   <CanonicalRequestBytes>47 45 54 0a 2f 72 65 73 6f 75 72 63 65 46 69 6c 65 2f 32 30 31 37 2f 30 33 36 32 33 33 37 62 2d 66 61 39 62 2d 12 65 30 36 2d 61 33 39 33 2d 61 61 38 37 65 39 31 63 37 31 62 63 2e 38 32 38 39 32 65 38 64 2d 30 37 39 66 2d 34 63 37 63 2d 62 35 64 33 2d 63 36 38 33 63 35 35 37 31 35 64 63 2e 7a 69 70 0a 74 61 67 67 69 6e 67 3d 74 72 75 65 0a 68 6f 73 74 3a 65 64 65 78 66 65 2d 70 75 62 6c 69 63 2d 64 65 76 2e 73 33 2e 61 6d 61 7a 6f 6e 61 77 73 2e 63 6f 6d 0a 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3a 53 54 52 45 41 4d 49 4e 47 2d 41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 2d 50 41 59 4c 4f 41 44 0a 78 2d 61 6d 7a 2d 64 61 74 65 3a 32 30 31 37 31 32 30 37 54 31 37 34 34 35 32 5a 0a 0a 68 6f 73 74 3b 78 2d 61 6d 7a 2d 63 6f 6e 74 65 6e 74 2d 73 68 61 32 35 36 3b 78 2d 61 6d 7a 2d 64 61 74 65 0a 53 54 52 45 41 4d 49 4e 47 2d 41 57 53 34 2d 48 4d 41 43 2d 53 48 41 32 35 36 2d 50 41 59 4c 4f 41 44</CanonicalRequestBytes>
   <RequestId>C1E5F6C594F122D8</RequestId>
   <HostId>0O1AJDyY8Vz8NIGvY4ExNdgI5JA0cFks9D12HuznsgIXQkHG4Kt02MMEetTpo0CyLVk3Et8zUT0=</HostId>
</Error>

how to get the size of a bucket?

Hi,
sorry to be posting this question here.. :)

I am using the s3 hookup of your library and I need to be able to get the size in MB or GB of a specific bucket. How would I do that?

Thanks in advance!
Art

Question: handling arbitrary JSON?

We have JSON that can have a variety of arbitrary schemas, and it could change significantly over time. It seems, at least compared to MongoDB, that DynamoDB is not very good at handling arbitrary JSON formats, but is more suited for formats that you have complete control over. Would you agree?

Or do you have more samples of dealing with arbitrary JSON in various complex formats?

Thank you!

Using getFormPostParams

I know it says TODO, but can you TODO it now? lol.
I am getting a signature mismatch and wondering if it's because I am not using this.

Implement versioning of the project (tagging)

Hi there, we're using your library in this project: https://github.com/pixl8/s3-commandbox-commands - many thanks for the hard work! :)

We're pulling in your project as a commandbox dependency and simply pointing to your github repo. The issue with this is that, when you change the code, our project can then break (as it did with the recent rename of the 'region' argument to the API).

Simple tagging with git would be enough for us to be able to peg the dependency to a specific version - but you could consider registering the project with forgebox also and releasing versions there also.

Anyways, its not a huge deal - but would be helpful for others I think. Happy to help getting setup to push to forgebox if wanted too.

Regards,

Dominic

how to implement seller partner api with this

Having some struggle here, the documentation is not worth and i read it many times but unable to move ahead due to the confusion, how can i make the seller partner api working this aws (either by using IAM or without IAM)

VSCode: No symbols found in library

I'm not sure what that message means, but it can't pull the functions into the outline view which is REALLY handy for navigating large files. I'm using the kamasamasomething cfml plugin and that view is really helpful in coldbox programming.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.