AWS S3 binding spec

Detailed documentation on the AWS S3 binding component

Component format

To setup AWS S3 binding create a component of type bindings.aws.s3. See this guide on how to create and apply a binding configuration.

See Authenticating to AWS for information about authentication-related attributes

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: <NAME>
  5. namespace: <NAMESPACE>
  6. spec:
  7. type: bindings.aws.s3
  8. version: v1
  9. metadata:
  10. - name: bucket
  11. value: mybucket
  12. - name: region
  13. value: us-west-2
  14. - name: endpoint
  15. value: s3-us-west-2.amazonaws.com
  16. - name: accessKey
  17. value: *****************
  18. - name: secretKey
  19. value: *****************
  20. - name: sessionToken
  21. value: mysession
  22. - name: decodeBase64
  23. value: <bool>
  24. - name: encodeBase64
  25. value: <bool>
  26. - name: forcePathStyle
  27. value: <bool>

Warning

The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described here.

Spec metadata fields

FieldRequiredBinding supportDetailsExample
bucketYOutputThe name of the S3 bucket to write to“bucket”
regionYOutputThe specific AWS region“us-east-1”
endpointNOutputThe specific AWS endpoint“s3-us-east-1.amazonaws.com”
accessKeyYOutputThe AWS Access Key to access this resource“key”
secretKeyYOutputThe AWS Secret Access Key to access this resource“secretAccessKey”
sessionTokenNOutputThe AWS session token to use“sessionToken”
forcePathStyleNOutputCurrently Amazon S3 SDK supports virtual hosted-style and path-style access. true is path-style format like https://<endpoint>/<your bucket>/<key>. false is hosted-style format like https://<your bucket>.<endpoint>/<key>. Defaults to falsetrue, false
decodeBase64NOutputConfiguration to decode base64 file content before saving to bucket storage. (In case of saving a file with binary content). true is the only allowed positive value. Other positive variations like “True”, “1” are not acceptable. Defaults to falsetrue, false
encodeBase64NOutputConfiguration to encode base64 file content before return the content. (In case of opening a file with binary content). true is the only allowed positive value. Other positive variations like “True”, “1” are not acceptable. Defaults to falsetrue, false

Binding support

This component supports output binding with the following operations:

Create file

To perform a create operation, invoke the AWS S3 binding with a POST method and the following JSON body:

Note: by default, a random UUID is generated. See below for Metadata support to set the name

  1. {
  2. "operation": "create",
  3. "data": "YOUR_CONTENT"
  4. }

Examples

Save text to a random generated UUID file

On Windows, utilize cmd prompt (PowerShell has different escaping mechanism)

  1. curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
  1. curl -d '{ "operation": "create", "data": "Hello World" }' \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
Save text to a specific file
  1. curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-test-file.txt\" } }" \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
  1. curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-test-file.txt" } }' \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
Save a file to a object

To upload a file, encode it as Base64 and let the Binding know to deserialize it:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: <NAME>
  5. namespace: <NAMESPACE>
  6. spec:
  7. type: bindings.aws.s3
  8. version: v1
  9. metadata:
  10. - name: bucket
  11. value: mybucket
  12. - name: region
  13. value: us-west-2
  14. - name: endpoint
  15. value: s3-us-west-2.amazonaws.com
  16. - name: accessKey
  17. value: *****************
  18. - name: secretKey
  19. value: *****************
  20. - name: sessionToken
  21. value: mysession
  22. - name: decodeBase64
  23. value: <bool>
  24. - name: forcePathStyle
  25. value: <bool>

Then you can upload it as you would normally:

  1. curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"key\": \"my-test-file.jpg\" } }" http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
  1. curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "key": "my-test-file.jpg" } }' \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>

Response

The response body will contain the following JSON:

  1. {
  2. "location":"https://<your bucket>.s3.<your region>.amazonaws.com/<key>",
  3. "versionID":"<version ID if Bucket Versioning is enabled"
  4. }

Get object

To perform a get file operation, invoke the AWS S3 binding with a POST method and the following JSON body:

  1. {
  2. "operation": "get",
  3. "metadata": {
  4. "key": "my-test-file.txt"
  5. }
  6. }

The metadata parameters are:

  • key - the name of the object

Example

  1. curl -d '{ \"operation\": \"get\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
  1. curl -d '{ "operation": "get", "metadata": { "key": "my-test-file.txt" }}' \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>

Response

The response body contains the value stored in the object.

Delete object

To perform a delete object operation, invoke the AWS S3 binding with a POST method and the following JSON body:

  1. {
  2. "operation": "delete",
  3. "metadata": {
  4. "key": "my-test-file.txt"
  5. }
  6. }

The metadata parameters are:

  • key - the name of the object

Examples

Delete object
  1. curl -d '{ \"operation\": \"delete\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
  1. curl -d '{ "operation": "delete", "metadata": { "key": "my-test-file.txt" }}' \
  2. http://localhost:<dapr-port>/v1.0/bindings/<binding-name>

Response

An HTTP 204 (No Content) and empty body will be retuned if successful.

List objects

To perform a list object operation, invoke the S3 binding with a POST method and the following JSON body:

  1. {
  2. "operation": "list",
  3. "data": {
  4. "maxResults": 10,
  5. "prefix": "file",
  6. "marker": "hvlcCQFSOD5TD",
  7. "delimiter": "i0FvxAn2EOEL6"
  8. }
  9. }

The data parameters are:

  • maxResults - (optional) sets the maximum number of keys returned in the response. By default the action returns up to 1,000 key names. The response might contain fewer keys but will never contain more.
  • prefix - (optional) limits the response to keys that begin with the specified prefix.
  • marker - (optional) marker is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. Marker can be any key in the bucket. The marker value may then be used in a subsequent call to request the next set of list items.
  • delimiter - (optional) A delimiter is a character you use to group keys.

Response

The response body contains the list of found objects.

The list of objects will be returned as JSON array in the following form:

  1. {
  2. "CommonPrefixes": null,
  3. "Contents": [
  4. {
  5. "ETag": "\"7e94cc9b0f5226557b05a7c2565dd09f\"",
  6. "Key": "hpNdFUxruNuwm",
  7. "LastModified": "2021-08-16T06:44:14Z",
  8. "Owner": {
  9. "DisplayName": "owner name",
  10. "ID": "owner id"
  11. },
  12. "Size": 6916,
  13. "StorageClass": "STANDARD"
  14. }
  15. ],
  16. "Delimiter": "",
  17. "EncodingType": null,
  18. "IsTruncated": true,
  19. "Marker": "hvlcCQFSOD5TD",
  20. "MaxKeys": 1,
  21. "Name": "mybucketdapr",
  22. "NextMarker": "hzaUPWjmvyi9W",
  23. "Prefix": ""
  24. }

Last modified February 18, 2022: Update setup-jetstream.md (#2200) (428d8c2)