Skip to content

Commit

Permalink
DynamoStore.Lambda: add env var Literals
Browse files Browse the repository at this point in the history
  • Loading branch information
bartelink committed Oct 7, 2022
1 parent c06300d commit 451f59f
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 21 deletions.
Expand Up @@ -55,8 +55,8 @@ type DynamoStoreIndexerLambda(scope, id, props : DynamoStoreIndexerLambdaProps)
Handler = "Propulsion.DynamoStore.Indexer::Propulsion.DynamoStore.Indexer.Function::Handle",
MemorySize = float props.memorySize, Timeout = Amazon.CDK.Duration.Seconds props.timeout.TotalSeconds,
Environment = dict [
"EQUINOX_DYNAMO_SYSTEM_NAME", props.regionName
"EQUINOX_DYNAMO_TABLE_INDEX", props.indexTableName ]))
Propulsion.DynamoStore.Lambda.Args.Dynamo.REGION, props.regionName
Propulsion.DynamoStore.Lambda.Args.Dynamo.INDEX_TABLE, props.indexTableName ]))
do fn.AddEventSourceMapping("EquinoxSource", EventSourceMappingOptions(
EventSourceArn = props.storeStreamArn,
StartingPosition = StartingPosition.TRIM_HORIZON,
Expand Down
Expand Up @@ -66,7 +66,7 @@ type DynamoStoreNotifierLambda(scope, id, props : DynamoStoreNotifierLambdaProps
Code = code, Architecture = Architecture.ARM_64, Runtime = Runtime.DOTNET_6,
Handler = "Propulsion.DynamoStore.Notifier::Propulsion.DynamoStore.Notifier.Function::Handle",
MemorySize = float props.memorySize, Timeout = Amazon.CDK.Duration.Seconds props.timeout.TotalSeconds,
Environment = dict [ "SNS_TOPIC_ARN", topic.TopicArn ]))
Environment = dict [ Propulsion.DynamoStore.Lambda.Args.Sns.TOPIC_ARN, topic.TopicArn ]))
do fn.AddEventSourceMapping("IndexSource", EventSourceMappingOptions(
EventSourceArn = props.indexStreamArn,
StartingPosition = StartingPosition.TRIM_HORIZON,
Expand Down
Expand Up @@ -83,9 +83,9 @@ type DynamoStoreReactorLambda(scope, id, props : DynamoStoreReactorLambdaProps)
Code = code, Architecture = props.lambdaArchitecture, Runtime = props.lambdaRuntime, Handler = props.lambdaHandler,
MemorySize = float props.memorySize, Timeout = lambdaTimeout, ReservedConcurrentExecutions = reservedConcurrency,
Environment = dict [
"EQUINOX_DYNAMO_SYSTEM_NAME", props.regionName
"EQUINOX_DYNAMO_TABLE", props.storeTableName
"EQUINOX_DYNAMO_TABLE_INDEX", props.indexTableName ]))
Propulsion.DynamoStore.Lambda.Args.Dynamo.REGION, props.regionName
Propulsion.DynamoStore.Lambda.Args.Dynamo.TABLE, props.storeTableName
Propulsion.DynamoStore.Lambda.Args.Dynamo.INDEX_TABLE, props.indexTableName ]))
do fn.AddEventSource(SqsEventSource(queue, SqsEventSourceProps(
ReportBatchItemFailures = true, // Required so Lambda can requeue individual unhandled notification at message level
BatchSize = float props.batchSize)))
Expand Up @@ -5,6 +5,9 @@
</PropertyGroup>

<ItemGroup>
<Compile Include="..\Propulsion.DynamoStore.Lambda\Args.fs">
<Link>PropulsionDynamoStoreLambda\Args.fs</Link>
</Compile>
<Compile Include="DynamoStoreIndexerLambda.fs" />
<Compile Include="DynamoStoreNotifierLambda.fs" />
<Compile Include="DynamoStoreReactorLambda.fs" />
Expand Down
18 changes: 6 additions & 12 deletions src/Propulsion.DynamoStore.Indexer/Function.fs
Expand Up @@ -13,17 +13,11 @@ type Configuration(?tryGet) =
let tryGet = defaultArg tryGet envVarTryGet
let get key = match tryGet key with Some value -> value | None -> failwithf "Missing Argument/Environment Variable %s" key

let [<Literal>] SYSTEM_NAME = "EQUINOX_DYNAMO_SYSTEM_NAME"
let [<Literal>] SERVICE_URL = "EQUINOX_DYNAMO_SERVICE_URL"
let [<Literal>] ACCESS_KEY = "EQUINOX_DYNAMO_ACCESS_KEY_ID"
let [<Literal>] SECRET_KEY = "EQUINOX_DYNAMO_SECRET_ACCESS_KEY"
let [<Literal>] TABLE_INDEX = "EQUINOX_DYNAMO_TABLE_INDEX"

member _.DynamoSystemName = tryGet SYSTEM_NAME
member _.DynamoServiceUrl = get SERVICE_URL
member _.DynamoAccessKey = get ACCESS_KEY
member _.DynamoSecretKey = get SECRET_KEY
member _.DynamoIndexTable = get TABLE_INDEX
member _.DynamoRegion = tryGet Propulsion.DynamoStore.Lambda.Args.Dynamo.REGION
member _.DynamoServiceUrl = get Propulsion.DynamoStore.Lambda.Args.Dynamo.SERVICE_URL
member _.DynamoAccessKey = get Propulsion.DynamoStore.Lambda.Args.Dynamo.ACCESS_KEY
member _.DynamoSecretKey = get Propulsion.DynamoStore.Lambda.Args.Dynamo.SECRET_KEY
member _.DynamoIndexTable = get Propulsion.DynamoStore.Lambda.Args.Dynamo.INDEX_TABLE

type Store(connector : DynamoStoreConnector, table, dynamoItemSizeCutoffBytes) =
let queryMaxItems = 100
Expand All @@ -34,7 +28,7 @@ type Store(connector : DynamoStoreConnector, table, dynamoItemSizeCutoffBytes) =

new (c : Configuration, requestTimeout, retries, dynamoItemSizeCutoffBytes) =
let conn =
match c.DynamoSystemName with
match c.DynamoRegion with
| Some r -> DynamoStoreConnector(r, requestTimeout, retries)
| None -> DynamoStoreConnector(c.DynamoServiceUrl, c.DynamoAccessKey, c.DynamoSecretKey, requestTimeout, retries)
Store(conn, c.DynamoIndexTable, dynamoItemSizeCutoffBytes)
Expand Down
Expand Up @@ -17,6 +17,9 @@
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludePublishedInPackAsTool</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\Propulsion.DynamoStore.Lambda\Args.fs">
<Link>PropulsionDynamoStoreLambda\Args.fs</Link>
</Compile>
<Compile Include="Handler.fs" />
<Compile Include="Function.fs" />
</ItemGroup>
Expand Down
18 changes: 18 additions & 0 deletions src/Propulsion.DynamoStore.Lambda/Args.fs
@@ -0,0 +1,18 @@
module Propulsion.DynamoStore.Lambda.Args

#if !PROPULSION_DYNAMOSTORE_LAMBDA
module internal Sns =

let [<Literal>] TOPIC_ARN = "SNS_TOPIC_ARN"

module internal Dynamo =
#else
module Dynamo =
#endif

let [<Literal>] REGION = "EQUINOX_DYNAMO_REGION"
let [<Literal>] SERVICE_URL = "EQUINOX_DYNAMO_SERVICE_URL"
let [<Literal>] ACCESS_KEY = "EQUINOX_DYNAMO_ACCESS_KEY_ID"
let [<Literal>] SECRET_KEY = "EQUINOX_DYNAMO_SECRET_ACCESS_KEY"
let [<Literal>] TABLE = "EQUINOX_DYNAMO_TABLE"
let [<Literal>] INDEX_TABLE = "EQUINOX_DYNAMO_TABLE_INDEX"
@@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<DefineConstants>PROPULSION_DYNAMOSTORE_LAMBDA</DefineConstants>
</PropertyGroup>

<ItemGroup>
Expand All @@ -15,5 +16,6 @@

<ItemGroup>
<Compile Include="SqsNotificationBatch.fs" />
<Compile Include="Args.fs" />
</ItemGroup>
</Project>
4 changes: 1 addition & 3 deletions src/Propulsion.DynamoStore.Notifier/Function.fs
Expand Up @@ -11,9 +11,7 @@ type Configuration(?tryGet) =
let tryGet = defaultArg tryGet envVarTryGet
let get key = match tryGet key with Some value -> value | None -> failwithf "Missing Argument/Environment Variable %s" key

let [<Literal>] SNS_ARN = "SNS_TOPIC_ARN"

member val SnsTopicArn = get SNS_ARN
member val SnsTopicArn = get Propulsion.DynamoStore.Lambda.Args.Sns.TOPIC_ARN

type Function() =

Expand Down
Expand Up @@ -27,6 +27,9 @@
<Compile Include="..\Propulsion.DynamoStore\AppendsIndex.fs">
<Link>PropulsionDynamoStore\AppendsIndex.fs</Link>
</Compile>
<Compile Include="..\Propulsion.DynamoStore.Lambda\Args.fs">
<Link>PropulsionDynamoStoreLambda\Args.fs</Link>
</Compile>
<Compile Include="Handler.fs" />
<Compile Include="Function.fs" />
</ItemGroup>
Expand Down

0 comments on commit 451f59f

Please sign in to comment.