public Provider(string name, ProviderArgs args, CustomResourceOptions?options = null) : base("testcomponent", name, args, options) { }
static Task <int> Main() { var config = new ConfigurationBuilder() .AddUserSecrets(typeof(Program).Assembly) .Build(); var accountId = config.GetValue <string>("AccountId"); var role = config.GetValue <string>("Role"); return(Deployment.RunAsync(() => { var roleArn = Output.Format($"arn:aws:iam::{accountId}:role/{role}"); var providerArgs = new ProviderArgs { Region = "eu-west-1", AssumeRole = new ProviderAssumeRoleArgs { RoleArn = roleArn, SessionName = "session" } }; var provider = new Provider("sandboxEUWest1Provider", providerArgs); var options = new CustomResourceOptions { Provider = provider }; // Worker SNS Notification var notificationTopicArgs = new TopicArgs { Name = "WorkerNotification", }; var workerNotificationTopic = new Topic("workerNotification", notificationTopicArgs, options); // Lambda var functionType = typeof(Worker.Function); var handler = $"{functionType.Assembly.GetName().Name}::{functionType.FullName}::FunctionHandler"; var function = new Function("WorkerFunction", new FunctionArgs { Name = "WorkerFunction", Runtime = "dotnetcore3.1", Environment = new FunctionEnvironmentArgs { Variables = new InputMap <string> { { $"{Worker.Function.NotificationTopicArnKey}", workerNotificationTopic.Arn } } }, Code = new FileArchive("../Worker/bin/Release/netcoreapp3.1/publish"), ReservedConcurrentExecutions = 1, Handler = handler, Role = CreateLambdaRole(options).Arn, MemorySize = 512, Timeout = 60 }, options); var permission = new Permission("WorkerSNSPermission", new PermissionArgs { Action = "lambda:InvokeFunction", Function = function.Arn, Principal = "sns.amazonaws.com", SourceArn = workerNotificationTopic.Arn, }, options); // Subscription var workerSubscription = new TopicSubscription("workerNotificationSubscription", new TopicSubscriptionArgs { Topic = workerNotificationTopic.Arn, Protocol = "lambda", Endpoint = function.Arn }, options); })); }