コード例 #1
0
        /// <summary>
        /// Check service health.
        /// </summary>
        /// <param name="client">Instance of <see cref="AmazonKinesisFirehoseClient"/> class.</param>
        /// <returns>Success, RountTripTime.</returns>
        public static async Task <(bool, double)> CheckServiceReachable(AmazonKinesisFirehoseClient client)
        {
            var stopwatch = new Stopwatch();

            try
            {
                stopwatch.Start();
                await client.DescribeDeliveryStreamAsync(new DescribeDeliveryStreamRequest
                {
                    DeliveryStreamName = "KinesisTap"
                });

                stopwatch.Stop();
            }
            catch (AmazonKinesisFirehoseException)
            {
                stopwatch.Stop();
                // Any exception is fine, we are currently only looking to
                // check if the service is reachable and what is the RTT.
                return(true, stopwatch.ElapsedMilliseconds);
            }
            catch (Exception)
            {
                stopwatch.Stop();
                return(false, stopwatch.ElapsedMilliseconds);
            }

            return(true, stopwatch.ElapsedMilliseconds);
        }
コード例 #2
0
        public FirehoseSender()
        {
            var config = new AmazonKinesisFirehoseConfig();

            config.RegionEndpoint = Amazon.RegionEndpoint.GetBySystemName(ConfigurationSettings.AppSettings[ConfigurationKeys.Region]);
            _client = new AmazonKinesisFirehoseClient(ConfigurationSettings.AppSettings[ConfigurationKeys.AccessKeyId],
                                                      ConfigurationSettings.AppSettings[ConfigurationKeys.AccessKeySecret],
                                                      config);
        }
コード例 #3
0
 public void Dispose()
 {
     try
     {
         _firehose?.Dispose();
         _firehose = null;
     }
     catch
     {
         // ignored
     }
 }
コード例 #4
0
        public string PushToFirehose(string stuffToPush)
        {
            var retVal = string.Empty;

            var config = new AmazonKinesisFirehoseConfig();

            config.RegionEndpoint = RegionEndpoint.USEast2;
            config.ServiceURL     = string.Empty;

            var client = new AmazonKinesisFirehoseClient(config);

            return(retVal);
        }
コード例 #5
0
        protected IAmazonKinesisFirehose CreateClient(AWSCredentials credentials, RegionEndpoint region)
        {
            var config = new AmazonKinesisFirehoseConfig {
                RegionEndpoint = region
            };

            Amazon.PowerShell.Utils.Common.PopulateConfig(this, config);
            this.CustomizeClientConfig(config);
            var client = new AmazonKinesisFirehoseClient(credentials, config);

            client.BeforeRequestEvent += RequestEventHandler;
            client.AfterResponseEvent += ResponseEventHandler;
            return(client);
        }
コード例 #6
0
ファイル: AWSLogger.cs プロジェクト: talkolker/DataExtractor
        private void updateAmazonKinesisFirehoseClient()
        {
            bool isOldClientNeedsRecreation = m_ClientCreatedDateTime == DateTime.MinValue ||
                                              DateTime.Now.Subtract(m_ClientCreatedDateTime) >= TimeSpan.FromHours(1);

            if (m_shouldInitializeClient && isOldClientNeedsRecreation)
            {
                try
                {
                    SSMParameter arnParameter = SSMClient.Instance.GetParameter("/FSL/Firehose/ARN");
                    string       firehoseArn  = arnParameter?.Value;

                    SSMParameter   regionParameter        = SSMClient.Instance.GetParameter(SSMLibrary.Constants.FSL_FIREHOSE_REGION_PATH);
                    RegionEndpoint firehoseRegionEndpoint = RegionEndpoint.GetBySystemName(regionParameter.Value);

                    if (string.IsNullOrEmpty(firehoseArn))
                    {
                        // Create client without assume role, same account as firehose.
                        m_Client = new AmazonKinesisFirehoseClient(firehoseRegionEndpoint);
                    }
                    else
                    {
                        // Create client with assume role
                        SSMParameter STSRegion = SSMClient.Instance.GetParameter("/FSL/Firehose/STSRegion");
                        AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient(RegionEndpoint.GetBySystemName(STSRegion.Value));
                        AssumeRoleRequest stsRequest = new AssumeRoleRequest
                        {
                            RoleArn         = firehoseArn,
                            RoleSessionName = string.Format("{0}_{1}_Monitoring", m_Product, m_Feature)
                        };
                        AssumeRoleResponse stsResult = stsClient.AssumeRoleAsync(stsRequest).Result;
                        m_Client = new AmazonKinesisFirehoseClient(stsResult.Credentials, firehoseRegionEndpoint);
                    }
                    m_ClientCreatedDateTime = DateTime.Now;
                }
                catch (Exception ex)
                {
                    m_logger.LogError(string.Format("Failed to initialize AWSLogger\n{0}", LogUtils.GetExceptionDetails(ex)));
                }
            }
        }
コード例 #7
0
        static void Main()
        {
            var deliveryStreamName             = ConfigurationManager.AppSettings["AWS.Kineses.DeliveryStreamName"];
            var millisecondsToSleepBetweenPuts = Convert.ToInt32(ConfigurationManager.AppSettings["MillisecondsToSleepBetweenPuts"]);
            var awsRegion = RegionEndpoint.GetBySystemName(ConfigurationManager.AppSettings["AWS.Region"]);

            //spit out the delivery stream names available
            var firehoseClient = new AmazonKinesisFirehoseClient(awsRegion);
            var streams        = firehoseClient.ListDeliveryStreams();

            Console.WriteLine("Here are your delivery stream names:");
            foreach (var stream in streams.DeliveryStreamNames)
            {
                Console.WriteLine($"{stream}");
            }

            Console.WriteLine("Starting PutRecord infinite loop:");
            while (true)
            {
                //throw un some dummy data
                var data = new FooDataPoint
                {
                    Bar       = "wut",
                    SomeInt   = (int)(DateTime.UtcNow.Ticks % 100),
                    WhenWasIt = DateTime.UtcNow
                };

                using (var ms = new MemoryStream(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(data))))
                {
                    var response = firehoseClient.PutRecord(new PutRecordRequest {
                        DeliveryStreamName = deliveryStreamName, Record = new Record {
                            Data = ms
                        }
                    });
                    Console.WriteLine($"{response.HttpStatusCode} {DateTime.Now:s}");
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(millisecondsToSleepBetweenPuts));
            }
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: fernandoseguim/Poc.Kinesis
        static async Task Main(string[] args)
        {
            const string AWS_ACCESS_KEY_ID     = "AWS_ACCESS_KEY_ID";
            const string AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY";

            var firehoseClient = new AmazonKinesisFirehoseClient(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, RegionEndpoint.USWest2);

            var message = new Message
            {
                Name     = "Gabriela Orselli",
                Document = "22733611810",
                Phone    = "+5511953494000",
                Metadata = new Dictionary <string, string> {
                    { "amount", "250.00" }
                }
            };

            var kinesisPublisher = new KinesisPublisherSample(firehoseClient);

            var recordid = await kinesisPublisher.PutAsync(message, "poc-firehore-stream");

            Console.WriteLine($"Record Id {recordid}");


            //var s3Client = new AmazonS3Client(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, RegionEndpoint.USWest2);

            //var s3Consumer = new S3ConsumerSample(s3Client);

            //var s3ResponseMessage = await s3Consumer.ConsumeAsync("poc-kinesis-firehose", "pkfs-2019/06/14/01/poc-firehore-stream-2-2019-06-14-01-41-18-c4289cfc-b357-4b8f-9a59-28a4d667169c");

            //Console.WriteLine($"Reponse document: {s3ResponseMessage.Document}");
            //Console.WriteLine($"Reponse document: {s3ResponseMessage.Name}");
            //Console.WriteLine($"Reponse document: {s3ResponseMessage.Phone}");

            //foreach (var metadata in s3ResponseMessage.Metadata)
            //{
            //    Console.WriteLine($"Reponse metadata: {metadata}");
            //}
        }
コード例 #9
0
 public KinesisPublisherSample(AmazonKinesisFirehoseClient client)
 {
     _client = client;
 }
コード例 #10
0
        /// <summary>
        /// Kinesis Firehoseへデータを書き込む関数です
        /// ローカル開発環境として localStack を使用しています
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task<string> FunctionHandler(FunctionInput input, ILambdaContext context)
        {
            #region ローカル開発用のコード
            // S3 の作成
            var creds = new BasicAWSCredentials("dummy", "dummy");
            var s3Client = new AmazonS3Client(creds, new AmazonS3Config
            {
                ServiceURL = "http://localhost:4572",
                UseHttp = true,
                ForcePathStyle = true,
                AuthenticationRegion = "us-east-1",
            });

            if (!await AmazonS3Util.DoesS3BucketExistAsync(s3Client, _bucket))
            {
                await s3Client.PutBucketAsync(new PutBucketRequest
                {
                    BucketName = _bucket,
                    UseClientRegion = true
                });
            }

            // Kinesis Firehose の作成
            var request = new CreateDeliveryStreamRequest
            {
                DeliveryStreamName = _deliveryStream,
                ExtendedS3DestinationConfiguration = new ExtendedS3DestinationConfiguration
                {
                    BucketARN = $"arn:aws:s3:::{_bucket}",
                    Prefix = "firehose/",
                    RoleARN = "arn:aws:iam::dummy:role/dummy",
                }
            };

            var client = new AmazonKinesisFirehoseClient(creds, new AmazonKinesisFirehoseConfig
            {
                ServiceURL = _serviceURL,
            });

            var response = await client.ListDeliveryStreamsAsync();
            if (!response.DeliveryStreamNames.Any(_ => _ == _deliveryStream))
            {
                await client.CreateDeliveryStreamAsync(request);
            }
            #endregion

            var data = JsonConvert.SerializeObject(input);
            var record = new Record()
            {
                Data = new MemoryStream(Encoding.UTF8.GetBytes(data))
            };

            // Kinesis Firehose に対してデータを書き込む
            var res = await client.PutRecordAsync(_deliveryStream, record);
            if (res.HttpStatusCode == HttpStatusCode.OK)
            {
                return $"RecordId: {res.RecordId}";
            }
            else
            {
                return "Error";
            }
        }
コード例 #11
0
 public FirehoseClient(AmazonKinesisFirehoseClient client, DateTime validUntil)
 {
     _firehose   = client;
     _validUntil = validUntil;
 }
コード例 #12
0
 public FirehoseClient(AmazonKinesisFirehoseClient client)
 {
     _firehose   = client;
     _validUntil = DateTime.MaxValue;
 }
コード例 #13
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            APIGatewayProxyResponse APIResponse = new APIGatewayProxyResponse();

            try
            {
                bool EVSendToFirehose = Environment.GetEnvironmentVariable("PUSH_TO_FIREHOSE").ToUpper() == "TRUE";


                if (EVSendToFirehose)      // Only Processes if SentToFirehose==True
                {
                    /*Json to Telemetry List*/
                    TelemetryList telemetryList = JsonConvert.DeserializeObject <TelemetryList>(request.Body);
                    int           ItemCount     = telemetryList.Telemetry.Count;

                    /*Get Environment Vars*/
                    string EVDeliveryStream = Environment.GetEnvironmentVariable("FIREHOSE_DELIVERYSTREAM");
                    string EVRegion         = Environment.GetEnvironmentVariable("REGION");
                    byte[] oByte;

                    Amazon.RegionEndpoint Region = Amazon.RegionEndpoint.GetBySystemName(EVRegion);

                    foreach (Telemetry telemetry in telemetryList.Telemetry)
                    {
                        telemetry.Instant = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

                        oByte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(telemetry));
                        using (MemoryStream ms = new MemoryStream(oByte))
                        {
                            Record RecordToSend = new Record
                            {
                                Data = ms
                            };

                            PutRecordRequest DeliveryRequest = new PutRecordRequest
                            {
                                DeliveryStreamName = EVDeliveryStream,     //DigitalPlatformTelemetry
                                Record             = RecordToSend
                            };

                            AmazonKinesisFirehoseClient FirehoseClient = new AmazonKinesisFirehoseClient(Region);

                            PutRecordResponse Response = FirehoseClient.PutRecord(DeliveryRequest);
                        }
                    }

                    APIResponse.StatusCode = 200;
                    APIResponse.Body       = "Sucess, processed " + ItemCount + " items " + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
                    return(APIResponse);
                }
                APIResponse.StatusCode = 200;
                APIResponse.Body       = APIResponse.Body = "Sucess, no entries processed ( PUSH_TO_FIREHOSE = False ). " + DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
                return(APIResponse);
            }
            catch (InvalidCastException e)
            {
                APIResponse.StatusCode = 500;
                APIResponse.Body       = e.Message;
                return(APIResponse);
            }
        }