Before you can access data in SimpleDB, you have to have a domain. Domain creation is fairly expensive in terms of time-up to 1/2 a second. Listing domains is really cheap-especially since you will normally have a maximum of 100 domains. When the application starts up, we want to check if the domains we need exist-if not, create them. Otherwise, mark an all clear so that the check doesn’t happen again. To handle all this work, we have a module named PhotoWebInit. The module instantiates a client capable of communicating with SimpleDB by reading the key and secret from configuration. Using that client, the code then checks to see if the domain we want, friseton_com, exists. OK-this code really looks to see if we have 0 domains or more. friseton_com is the first domain we need because if a user needs to be able to log in before any other domains need to exist for my application. If no domains are found, the friseton_com domain is created.
#light
namespace PhotoWeb_AWS
open System
open System.Web.Security
open Amazon.SimpleDB
open System.Configuration
open System.Diagnostics
module PhotoWebInit =
let domainName = "friseton_com"
let SimpleDBClient =
new AmazonSimpleDBClient(ConfigurationManager.AppSettings.["AWSKey"],
ConfigurationManager.AppSettings.["AWSSecret"])
let InitializeAWS =
let listDomains = new Model.ListDomainsRequest()
let domainList = SimpleDBClient.ListDomains(listDomains)
let isInitialized = match domainList.ListDomainsResult.DomainName.Count with
| 0 ->
let createParam = new Model.CreateDomainRequest()
createParam.DomainName <- domainName
let response = SimpleDBClient.CreateDomain(createParam)
()
| n -> (Debug.WriteLine("domain exists"))
()
The corresponding configuration reads as follows:
<appSettings>
<add key="AWSKey" value="Your AWS Key goes here"/>
<add key="AWSSecret" value="Your AWS Secret goes here"/>
</appSettings>
Hey, I wasn’t going to share MY keys. This thing costs money! Next time, we will look at saving and retrieving data from the domain.