Amazon DevPay
Developer Guide (API Version 2007-12-01)
« PreviousNext »
View the PDF for this guide.Go to the AWS Discussion Forum for this product.Did this page help you?  Yes | No |  Tell us about it...

Using Amazon S3 Requester Pays with DevPay

This section describes how the Amazon Simple Storage Service Requester Pays feature works with Amazon DevPay.

Overview of Amazon S3 Requester Pays

Typically, the owner of an Amazon S3 bucket pays all the costs associated with that bucket (for storage, data transfer, and requests). However, Amazon S3 lets a bucket owner designate a bucket as a Requester Pays bucket. This means that each requester who accesses objects in that particular bucket pays for their own data transfer and request costs. The bucket owner still pays the storage costs.

This scenario is useful for Amazon S3 users who want to let the public access objects in their buckets, but don't want to pay the data transfer and request costs. Essentially the bucket owner designates the bucket as a Requester Pays bucket, and then requesters add the x-amz-request-payer=requester header to the GET requests to indicate that they agree to pay for the data transfer and requests. For signed URLs, you include requestPayer=requester in the query string. For more information about Requester Pays buckets, go to Requester Pays Buckets in the Amazon Simple Storage Service Developer Guide.

Using Requester Pays with DevPay to Sell Data

The Requester Pays feature (used alone) lets you give other Amazon S3 users access to your data, but you can't make a profit; you can only avoid paying data transfer and request costs.

DevPay (used alone) lets you give access to your data to anyone who is signed up for your product (regardless if they're Amazon S3 users). But because the DevPay bucket isn't a Requester Pays bucket, you (as the owner of the bucket) still pay for data transfer and requests (at the DevPay product's price).

You need to use DevPay together with a Requester Pays bucket if you want to charge people a premium to download your data (the overall process is described in Selling Your Data). Note that because you're using DevPay, your customers don't have to be Amazon S3 users.

When you register your DevPay product, you specify the price you want customers to pay to download the data. The price could include a monthly fee, a mark-up on the data transfer out costs, and a mark-up on the GET request costs. Because the bucket is a Requester Pays DevPay bucket, the customers pay for the data transfer and requests according to your DevPay product's price when they download your data.

Important

No matter how you price your product, keep in mind that you're still responsible for all AWS costs your customers incur, including AWS costs for data transfer and requests (even though the bucket is a Requester Pays bucket). In other words, your customers pay you your premium to download the data, but you still pay the basic AWS costs for that download.

Note

When you use DevPay with your Requester Pays bucket, your customers download your data to a location outside Amazon S3. They don't copy the data from your bucket to theirs.

If you want to use DevPay with a Requester Pays bucket to sell your data, there are some important data access and pricing considerations you need to understand.

Data Access

If you want to use DevPay to charge people to download your data, then everyone who accesses the bucket must be using the same DevPay application to access it (both you and your customers; for more information, see Customer Access Stored Data). By same DevPay application, we mean tools that use the same DevPay product code. You and your customers don't all have to be using the same specific tool; for example, you could create a tool for your own use to upload data, and a separate tool for your customers to download data. However, both of these tools must use the same DevPay product code.

This restriction on data access means you must sign up for your own DevPay product and become a customer. So (as illustrated in the following figure), you play two roles: You're the DevPay product owner, and you're a customer who owns the Requester Pays bucket. The fact that you play two different roles has implications for how you price your product.

Data access with Requester Pays DevPay bucket

Product Pricing

To help you understand the pricing considerations, we'll first summarize the roles and responsibilities of the different players.

You (as the DevPay product owner):

  • Set the price your customers pay to use your product

  • Pay AWS the Amazon S3 costs your customers incur

  • Pay a 3% DevPay fee on the value-add for each customer and a $0.30 fixed transaction fee per customer bill collected

  • Are billed monthly for the preceding items (you pay with your Amazon Payments account, with your credit card as a backup if needed)

You (as a customer and the bucket owner):

  • Pay the product's price to get the data into the bucket and store it

  • Are billed (as a customer) monthly for the data transfer, storage, monthly fee, etc. (you pay with your credit card)

Your customers (who buy the data):

  • Pay the product's price to get the data

  • Are billed monthly for the costs of getting the data

The important point here is that you are a customer of your own product, and you're treated just like any other customer of your product. You (as the customer) pay to use your product according to the price you set (as the product owner). This also means that you (as the product owner) pay AWS costs and DevPay fees based on your use (as a customer), just as you do for any other customer. There is an important difference, however, between you (as a customer) and the other customers of your product. You (as a customer) are only interested in uploading and storing data in your Requester Pays bucket. Your customers are only interested in downloading the data. This difference has implications for how you design your DevPay application and set your product's price.

One way to handle this difference is to design your DevPay product specifically for selling data from a Requester Pays bucket. You could price your product so you (as a customer) don't pay to upload and store the data. The following table shows an example of how you might price your product (for brevity, it includes pricing only for Amazon S3 in the United States). The "Description" column shows the descriptions you could include to help customers understand your product's price (for more information, see Your Description Page).

DimensionPriceDescription

Monthly fee

$10.00

You can access the data as often as you like for a single low monthly fee, plus data transfer costs

Storage

$0.00

[Your customers won't see this pricing dimension in the product's price]

Data transfer in

$0.00

[Your customers won't see this pricing dimension in the product's price]

Data transfer out

$0.18 per GB

You pay this rate per GB to transfer the data out

PUT or LIST requests

$0.00

[Your customers won't see this pricing dimension in the product's price]

GET and all other requests

$0.00

[Your customers won't see this pricing dimension in the product's price]

If the product has a monthly fee, you (as the customer) would be required to pay the monthly fee, just like any other customer. In this case, we assume the monthly fee covers the costs of the GET requests (which we don't charge for).

You could set the prices for storage, data transfer in, and PUT or LIST requests at $0.00. This means you (as a customer) pay nothing to transfer the data into the bucket and store it there.

You could mark up the price for data transfer out. Note that you could also mark up the price for GET requests (but in this example, we've chosen not to charge for them). So effectively, the price your customers see in this example includes only a $10.00 monthly fee, and a data transfer out price of $0.18 per GB.

Note

If a request to get the data in your bucket comes from an Amazon EC2 instance, the requester doesn't pay for data transfer (because data transfer between Amazon S3 and Amazon EC2 is free).

If you were to set your product's price as listed in the preceding table, what would the charges be if Bob were to access 500 GB of data in your Amazon S3-US bucket once in the month of April? Let's assume you upload the data at the beginning of April, and 1000 requests are required to either upload or download the data. For a list of the costs to use Amazon S3, go to http://aws.amazon.com/s3.

The following table shows your usage in April as a customer and the corresponding price you pay.

Price DimensionPrice You Pay as Customer

Monthly fee

$10.00

PUT requests

$0.00

Data transfer in (for 500 GB)

$0.00

Storage (for 500 GB for entire month)

$0.00

Total

$10.00

The next table shows the corresponding AWS costs you pay as the product owner.

Price DimensionAWS Costs You Pay as Product Owner

Monthly fee

N/A

PUT requests

$0.01

Data transfer in (for 500 GB)

$50.00

Storage (for 500 GB for entire month)

$75.00

Total

$125.01

You (as the customer) pay a bill of $10.00 for April. AWS collects the $0.30 transaction fee and gives you (the product owner) the remaining $9.70. There's no value-add in this case, so you (as the product owner) pay no 3% DevPay fee for you (as a customer). You (as the product owner) pay the $125.01 in AWS costs that you (as a customer) incurred in April to upload and store the data.

Now, let's look at Bob's usage. The following table shows his usage in April and the corresponding price he pays.

Price DimensionPrice Bob Pays

Monthly fee

$10.00

GET requests

$0.00

Data transfer out (for 500 GB)

$90.00

Total

$100.00

The next table shows the corresponding AWS costs you pay as the product owner.

Price DimensionAWS Costs You Pay as Product Owner

Monthly fee

N/A

GET requests

$0.001

Data transfer out (for 500 GB)

$85.00

Total

$85.01

Note

AWS rounds up any line item that is less than a penny to one penny. Therefore, the $0.001 charge for GET requests is rounded up to $0.01.

Bob pays a bill of $100.00 for April. AWS collects the $0.30 transaction fee and gives you (the product owner) the remaining $99.70. Your value-add for Bob in April is $100.00 - $85.01 = $14.99, so you pay 3% * $14.99 = $0.45 in DevPay fees. You also pay the $85.01 in AWS costs that Bob incurred in April to download the data. Your net profit for Bob in April is $14.24. You can see that if you get just 10 customers in April, your profits more than cover the costs to upload and store the data in your bucket during the month.

Note

If you hadn't designated your DevPay bucket as a Requester Pays bucket, then you as the bucket owner (and not Bob) would be billed the $90.00 for the data transfer out. This is why it's important that you use DevPay with a Requester Pays bucket, and not just an ordinary bucket.

How would the numbers for this scenario look in future months? If you continue to sell the data that's already in the bucket, then you would incur no new data upload costs and pay only for storage, effectively increasing your profits.

Selling Your Data

The following diagram and table describe the flow for using DevPay with a Requester Pays bucket to sell your data. The process assumes you use a DevPay upload tool and a separate DevPay download tool.

Using DevPay with Requester Pays

Process for Using DevPay and Requester Pays to Sell Data

1

You register a product with Amazon DevPay and set its price.

In return you get the product code. For more information, see Registering Your Product.

2

You create DevPay tools to upload and download data.

The upload tool must use your product code and (at a minimum) be able to create a Requester Pays bucket, upload data to it, and set the Amazon S3 ACL on the data.

The download tool must use your product code and be able to include the x-amz-request-payer header in the GET requests for your data.

For more information, go to Requester Pays Buckets in the Amazon Simple Storage Service Developer Guide.

3

You buy your product, so you can upload your data.

4

You create a Requester Pays bucket and put data in it.

As a customer, you use the DevPay upload tool to create the bucket and put your data in it.

5

You set the Amazon S3 ACL on the data. Make sure you set the read permission on the objects in the bucket, and not the bucket itself. We recommend you don't give read permission on the bucket.

You use your upload tool to grant read permission to authenticated users. For more information, go to Access Control Lists in the Amazon Simple Storage Service Developer Guide.

6

A customer buys your product.

7

The customer downloads your data.

The customer uses your download tool, which includes the x-amz-request-payer header in the GET requests.

8

All the involved parties pay their monthly bills.

You (the customer and bucket owner) pay yourself (the product owner) the product's price to upload and manage the data.

The customers pay you (the product owner) the product's price to download the data.

You (the product owner) pay all the AWS costs that all your customers incurred, plus the applicable DevPay fees. Remember that the AWS costs include the costs you incur as a customer, and the data transfer and request costs your other customers incur.