-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
78 lines (67 loc) · 3.22 KB
/
Program.cs
File metadata and controls
78 lines (67 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Collections.Generic;
using Pulumi;
using VirtualFinland.UsersAPI.Deployment.Common.Models;
using VirtualFinland.UsersAPI.Deployment.Features;
return await Deployment.RunAsync(async () =>
{
var config = new Config();
var organization = Deployment.Instance.OrganizationName;
var environment = Deployment.Instance.StackName;
var projectName = Deployment.Instance.ProjectName;
InputMap<string> tags = new()
{
{
"vfd:stack", Deployment.Instance.StackName
},
{
"vfd:project", Deployment.Instance.ProjectName
}
};
var stackSetup = new StackSetup()
{
Organization = organization,
ProjectName = projectName,
Environment = environment,
Region = new Config("aws").Require("region"),
Tags = tags,
};
var isInitialDeployment = await stackSetup.IsInitialDeployment();
var cloudwatch = new CloudWatch(stackSetup);
var vpcSetup = new VpcSetup(stackSetup);
var database = new PostgresDatabase(config, stackSetup, vpcSetup, cloudwatch);
var dbConnectionStringSecret = new SecretsManager(stackSetup, "dbConnectionStringSecret", database.DatabaseConnectionString);
var dbAdminConnectionStringSecret = new SecretsManager(stackSetup, "dbAdminConnectionStringSecret", database.DatabaseAdminConnectionString);
var auditLogSubscriptionFunction = new AuditLogSubscription(config, stackSetup, database, cloudwatch);
var redisCache = new RedisElastiCache(stackSetup, vpcSetup);
var adminFunctionSqses = SqsQueue.CreateSqsQueueForAdminCommands(stackSetup);
// The API
var usersApiFunction = new UsersApiLambdaFunction(config, stackSetup, vpcSetup, dbConnectionStringSecret, redisCache, cloudwatch, adminFunctionSqses, database);
usersApiFunction.SetupErrorAlerting(stackSetup);
var apiEndpoint = new LambdaFunctionUrl(stackSetup, usersApiFunction);
// Admin function for management tasks, scheduled events and triggers
var adminFunction = new AdminFunction(config, stackSetup, vpcSetup, dbAdminConnectionStringSecret, adminFunctionSqses, database, redisCache);
// Admin function schedulers and triggers
adminFunction.CreateSchedulersAndTriggers(stackSetup, adminFunctionSqses);
if (isInitialDeployment)
{
// Initialize database
database.InvokeInitialDatabaseSetupFunction(stackSetup, adminFunction.LambdaFunction);
}
else
{
// Ensure database user
database.InvokeDatabaseUserSetupFunction(stackSetup, adminFunction.LambdaFunction);
// Ensure database audit log triggers
database.InvokeDatabaseAuditLogTriggersSetupFunction(stackSetup, adminFunction.LambdaFunction);
}
// Outputs
return new Dictionary<string, object?> {
{ "ApplicationUrl", apiEndpoint.ApplicationUrl },
{ "LambdaId", usersApiFunction.LambdaFunctionId },
{ "DBIdentifier", database.DBIdentifier },
{ "DBClusterIdentifier", database.DBClusterIdentifier },
{ "AdminFunctionArn", adminFunction.LambdaFunction.Arn },
{ "AuditLogSubscriptionFunctionArn", auditLogSubscriptionFunction.LambdaFunctionArn },
{ "ElastiCacheClusterId", redisCache.ClusterId },
};
});