コード例 #1
0
        internal static FirehoseSettings Load(NameValueCollection nvc)
        {
            var settings = new FirehoseSettings
            {
                Region               = nvc["region"] ?? string.Empty,
                AccessKey            = nvc["access_key"] ?? string.Empty,
                SecretKey            = nvc["secret_key"] ?? string.Empty,
                Stream               = nvc["stream"] ?? string.Empty,
                RoleArn              = nvc["role_arn"] ?? string.Empty,
                StsTokenAgeInMinutes = GetStsTokenMaxAgeInMins(nvc["sts_token_maxage_minutes"])
            };

            // Parse

            // Handle defaults
            if (string.IsNullOrWhiteSpace(settings.Region) == true)
            {
                settings.Region = Defaults.Region;
            }
            if (string.IsNullOrWhiteSpace(settings.Stream) == true)
            {
                settings.Stream = Defaults.Stream;
            }

            // Calculate and assign signature
            var data = Encoding.UTF8.GetBytes($"{settings.Region}-{settings.SecretKey}-{settings.AccessKey}-{settings.RoleArn}");

            using (var sha = SHA512.Create())
            {
                settings.Signature = Convert.ToBase64String(sha.ComputeHash(data));
            }
            return(settings);
        }
コード例 #2
0
        public async Task <FirehoseClient> CreateAsync(FirehoseSettings settings)
        {
            using (await Lock.ReadLockAsync())
            {
                FirehoseClient client;
                if (Cache.TryGetValue(settings.Signature, out client) && client.IsValid())
                {
                    return(client);
                }
            }

            using (await Lock.WriteLockAsync())
            {
                FirehoseClient client;
                if (Cache.TryGetValue(settings.Signature, out client) && client.IsValid())
                {
                    return(client);
                }

                if (client != null && client.IsValid() == false)
                {
                    client.Dispose();
                    Cache.Remove(settings.Signature);
                }

                var newClient = await CreateNewAsync(settings);

                Cache[settings.Signature] = newClient;
                return(newClient);
            }
        }
コード例 #3
0
        private FirehoseClient CreateNew(FirehoseSettings settings)
        {
            var region = RegionEndpoint.GetBySystemName(settings.Region);

            if (settings.HasKeys == true)
            {
                var credentials = new BasicAWSCredentials(settings.AccessKey, settings.SecretKey);
                return(new FirehoseClient(new AmazonKinesisFirehoseClient(credentials, region)));
            }
            else
            {
                return(new FirehoseClient(new AmazonKinesisFirehoseClient(region)));
            }
        }
コード例 #4
0
        public FirehoseClient Create(FirehoseSettings settings)
        {
            FirehoseClient client = null;

            var waitHandle = new ManualResetEvent(false);

            Task.Factory.StartNew(async() =>
            {
                try
                {
                    client = await CreateAsync(settings);
                }
                finally
                {
                    waitHandle.Set();
                }
            });

            waitHandle.WaitOne();
            return(client);
        }
コード例 #5
0
        private async Task <FirehoseClient> CreateNewWithRoleAsync(FirehoseSettings settings)
        {
            using (var stsClient = new AmazonSecurityTokenServiceClient())
            {
                Credentials credentials = null;

                var assumeRoleRequest = new AssumeRoleRequest()
                {
                    RoleArn         = settings.RoleArn,
                    RoleSessionName = settings.Stream,
                    DurationSeconds = settings.StsTokenAgeInMinutes * 60
                };

                var assumeRoleResponse = await stsClient.AssumeRoleAsync(assumeRoleRequest);

                credentials = assumeRoleResponse.Credentials;

                var region = RegionEndpoint.GetBySystemName(settings.Region);
                var client = new FirehoseClient(new AmazonKinesisFirehoseClient(credentials, region), DateTime.UtcNow.AddMinutes(settings.StsTokenAgeInMinutes));

                return(client);
            }
        }
コード例 #6
0
        private async Task <FirehoseSettings> GetSettings()
        {
            var nvc = await _config.GetGlobalConfigurationAsNameValueCollectionAsync("logging", "firehose");

            return(FirehoseSettings.Load(nvc ?? new NameValueCollection()));
        }
コード例 #7
0
 private async Task <FirehoseClient> CreateNewAsync(FirehoseSettings settings)
 {
     return(settings.HasRole
         ? await CreateNewWithRoleAsync(settings)
         : CreateNew(settings));
 }