internal static async Task Start() { var region = RegionEndpoint.GetBySystemName(ConfigurationManager.AppSettings["AWSRegion"]); var e2client = new AmazonEC2Client(Args.Value("AccessKey"), Args.Value("SecretKey"), region); var s3client = new AmazonS3Client(Args.Value("AccessKey"), Args.Value("SecretKey"), region); var transferUtility = new TransferUtility(Args.Value("AccessKey"), Args.Value("SecretKey"), region); // Sync files var bucket = Args.Value("bucket"); // Create bucket var bucketExists = (await s3client.ListBucketsAsync()).Buckets.Any(b => b.BucketName == bucket); if (!bucketExists) { await BucketManager.CreateBucketAsync(s3client, bucket); } // Upload files to bucket var skipSections = Args.Value("Skip")?.Split(','); if (skipSections == null || skipSections.Any() || skipSections.Any(v => v == "UploadFiles")) { await BucketManager.UploadFilesAsync(transferUtility, bucket, Args.Value("LocalDirectory")); } // Get launch script var scriptText = File.ReadAllText(Args.Value("LaunchScript")); var matches = Regex.Matches(scriptText, "\"{[^}]+}\""); foreach (Match match in matches) { scriptText = scriptText.Replace(match.Value.Trim(new[] { '"' }), Args.Value(match.Value.Trim(new[] { '{', '}', '"' }))); } scriptText = $"<powershell>\n{scriptText}\n</powershell>"; var scriptAsBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(scriptText)); // Start instance var keyPair = await InstanceManager.CreateInstance(e2client, Args.Value("ImageId"), Args.Value("KeyName"), Args.Value("InstanceName"), scriptAsBase64); }