private static void Main(string[] args)
        {
            var configurationProvider = Configuration.Configure<ElasticBeanstalkDeploymentConfigurationProvider>()
                 .CreateAndBind(args);
            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 route53Service = new Route53Service(configurationProvider, loggerProvider);
            var configurationOptionSettingsProvider = new ConfigurationOptionSettingsProvider(loggerProvider,
                ec2Service,
                configurationProvider);
            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.DeployDockerApplicationSingleAzAsync().Wait();
        }
        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 route53Service = new Route53Service(configurationProvider, loggerProvider);
            var configurationOptionSettingProvider = new ConfigurationOptionSettingsProvider(loggerProvider, ec2Service,
                configurationProvider);
            var sslUploaderService = new SslUploaderService(configurationProvider, loggerProvider);
            var cloudfrontService = new CloudFrontService(configurationProvider, loggerProvider);
            var ebDeployer = new ElasticBeanstalkDeployer(configurationProvider,
                elasticBeanstalkService,
                s3Service,
                smokeTestService,
                iamService,
                configurationOptionSettingProvider,
                route53Service,
                sslUploaderService,
                cloudfrontService,
                loggerProvider);

            try
            {

                ebDeployer.DeployIisApplicationSingleAzAsync().Wait();
            }
            catch (Exception e)
            {
                loggerProvider.GetLogger().Fatal("Could not deploy IIS Application to Single AZ: {message}", e.Message);
                throw;
            }
        }