Material.EBDeployer.DeployLogic.ElasticBeanstalkDeployer.DeployIisApplicationMultiAzAsync C# (CSharp) Method

DeployIisApplicationMultiAzAsync() public method

public DeployIisApplicationMultiAzAsync ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        public async Task DeployIisApplicationMultiAzAsync()
        {
            loggerProvider.GetLogger().Debug("Beginning deploy");

            if (configurationProvider.EnableHttps == "true")
            {
                configurationProvider.SslCertificatePath = await sslUploaderService.GetSslCertArnPathAsync();
            }

            await s3Service.EnsureBucketExistsAsync();
            await s3Service.CopyApplicationToBucketAsync(configurationProvider.PackagePath);

            await iamService.EnsureEc2ServiceRoleExistsAsync(configurationProvider.ExcuteApiUriForPolicy);

            await elasticBeanstalkService.EnsureTerminationsCompleteAsync();
            await elasticBeanstalkService.PurgeOldApplicationVersionsAsync();
            await CreateOrUpdateApplicationAsync();

            loggerProvider.GetLogger().Debug("Constructing list of Configuration Option Settings");
            var configurationOptionSettings = new List<ConfigurationOptionSetting>();

            configurationOptionSettings.AddRange(
                await configurationOptionSettingsProvider.MultiAzConfigurationOptionSettingsAsync());
            configurationOptionSettings.AddRange(GetElbConfigurationOptionSettings());
            await elasticBeanstalkService.IisEnsureInitialEnvironmentSetupAsync(configurationOptionSettings);

            var route53Urls = await route53Service.GetSubdomainUrlAsync(elasticBeanstalkService.CurrentCNamePrefix, elasticBeanstalkService.NextCNamePrefix);
            loggerProvider.GetLogger().Debug($"Verified Route53 DNS entries. [Current Url: {route53Urls.CurrentEnvUrl}] [Next Url: {route53Urls.NextEnvUrl}]");
            var currentBeanstalkEnvUrl = route53Urls.CurrentEnvUrl;
            var newTestUri = route53Urls.NextEnvUrl;

            if (!string.IsNullOrWhiteSpace(newTestUri))
            {
                var oldTestUri = configurationProvider.TestUri;
                configurationProvider.TestUri = newTestUri;
                loggerProvider.GetLogger().Debug($"Changing TestUri. [NewValue: {configurationProvider.TestUri}] [OldValue: {oldTestUri}]");
            }

            await elasticBeanstalkService.UpdateEnvironmentAsync(Environment.Next, GetElbConfigurationOptionSettings());

            if (!string.IsNullOrWhiteSpace(configurationProvider.BinaryRouteConfigurationFilePath))
            {
                await cloudfrontService.MapBinaryRoutesInCloudFrontAsync(currentBeanstalkEnvUrl, configurationProvider.Subdomain, configurationProvider.DeploymentEnvironmentName);
            }

            //Adding delay to allow IIS to spin up
            await Task.Delay(FIVE_SECONDS);

            smokeTestService.RunTests();

            loggerProvider.GetLogger().Debug("Deploy finished");
        }

Usage Example

        private static void Main(string[] args)
        {
            var configurationProvider = Configuration.Configure<ElasticBeanstalkDeploymentConfigurationProvider>()
                .CreateAndBind(args);

            configurationProvider.ValidateConfig();

            Log.Logger = SerilogColoredConsoleConfiguration
                .InitializeColoredConsoleLogger(configurationProvider)
                .ForContext(SerilogTemplateConfiguration.CorrelationIdName, Guid.NewGuid().ToString("N"));
            var loggerProvider = new LoggerProvider();
            var elasticBeanstalkService = new ElasticBeanstalkService(configurationProvider, loggerProvider);
            var s3Service = new S3Service(configurationProvider, loggerProvider);
            var ec2Service = new Ec2Service(configurationProvider, loggerProvider);
            var iamService = new IdentityManagementService(configurationProvider, loggerProvider);
            var smokeTestService = new SmokeTestService(configurationProvider, loggerProvider);
            var configurationOptionSettingsProvider = new ConfigurationOptionSettingsProvider(loggerProvider, ec2Service, configurationProvider);
            var route53Service = new Route53Service(configurationProvider, loggerProvider);
            var sslUploaderService = new SslUploaderService(configurationProvider, loggerProvider);
            var cloudfrontService = new CloudFrontService(configurationProvider, loggerProvider);
            var ebDeployer = new ElasticBeanstalkDeployer(configurationProvider,
                elasticBeanstalkService,
                s3Service,
                smokeTestService,
                iamService,
                configurationOptionSettingsProvider,
                route53Service,
                sslUploaderService,
                cloudfrontService,
                loggerProvider);

            ebDeployer.DeployIisApplicationMultiAzAsync().Wait();
        }