Как подключиться к Amazon Kinesis Firehose в приложении ASP.Net Core 2.2 Web Api - PullRequest
0 голосов
/ 06 февраля 2019

Я новичок в AWS и хочу отправить пример данных в корзину s3 с помощью Amazon Kinesis из ASP.Net Core 2.2 Web Api Application.Но я не могу отправить данные.Ниже я попробовал.Шаги, которые я сделал:

  1. Создали учетную запись AWS, а затем создали одну корзину s3.

  2. Создали учетную запись Kinesis и привязали к ней корзину s3.

3.На Главном

  public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
        Amazon.Util.ProfileManager.RegisterProfile("demo-aws-profile", "MyAccessKeyId", "MySecretKey");
    }

Вопрос 1: Что я должен пройти вместо "demo-aws-profile"?Может ли это быть произвольное имя?

Вопрос 2: Требуется ли что-нибудь еще для подключения к AWS?

Фрагмент кода

        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            var o = new
            {
                Message = "Hello World"
            };
            byte[] oByte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(o));
            AmazonKinesisConfig config = new AmazonKinesisConfig();
            config.RegionEndpoint = Amazon.RegionEndpoint.USEast1;
           // QUESTION 3: DO I NEED TO SET ANY OTHER PROPERTY IN CONFIG??
            var client = new AmazonKinesisClient(config);
            try
            {
                using (MemoryStream ms = new MemoryStream(oByte))
                {
                    PutRecordRequest requestRecord = new PutRecordRequest();
                    // QUESTION 4: What is this stream name??? 
                    requestRecord.StreamName = "test-stream";
                    requestRecord.Data = ms;
                    var response = client.PutRecordAsync(requestRecord);
                    response.Wait();
                    return Ok(new
                    {
                        seq = response.Result.SequenceNumber
                    });
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return new string[] { "value1", "value2" };
        }

Я получаю исключение, так как System.Threading.Tasks.TaskCanceledException: A task was canceled.

PS: я новичок, и я мог сделать любую основную ошибку, поэтому, пожалуйста, дайте мне знать, если я должен предоставить какие-либо дополнительные сведения.Я все еще думаю, что я не могу общаться с Kinesis и, следовательно, с моим ведром s3.Я делаю что-то не так или пропустил некоторые настройки здесь.

1 Ответ

0 голосов
/ 08 февраля 2019

Попробуйте передать ваши AccessKeyId, SecretAccessKey и Region непосредственно в конструктор в качестве теста (вы никогда не захотите жестко кодировать их в реальном выпуске).Убедитесь, что у пользователя, связанного с этими учетными данными, настроена политика, разрешающая доступ к Kinesis.

Также используйте async / await.

    [HttpGet]
    public async Task ActionResult<IEnumerable<string>> Get()
    {
        var o = new
        {
            Message = "Hello World"
        };
        byte[] oByte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(o));

        var client = new AmazonKinesisClient(<AccessKeyId>, <SecretAccessKey>, <Region>);
        try
        {
            using (MemoryStream ms = new MemoryStream(oByte))
            {
                PutRecordRequest requestRecord = new PutRecordRequest();
                // QUESTION 4: What is this stream name??? 
                requestRecord.StreamName = <your Kinesis stream name>;
                requestRecord.Data = ms;
                var response = await client.PutRecordAsync(requestRecord);
                return Ok(new
                {
                    seq = response.Result.SequenceNumber
                });
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
        return new string[] { "value1", "value2" };
    }
...