如何在 ASP.Net Core 2.2 Web Api 应用程序中连接到 Amazon Kinesis Firehose

How to connect to Amazon Kinesis Firehose in ASP.Net Core 2.2 Web Api Application

我是 AWS 的初学者,我想使用来自 ASP.Net Core 2.2 Web Api 应用程序的 Amazon Kinesis 将示例数据发送到 s3 存储桶。但是我无法发送数据。以下是我尝试过的。 我做的步骤:

  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.

P.S:我是初学者,我可能会犯任何基本错误,所以请让我知道是否需要提供更多详细信息。我仍然认为我无法与 Kinesis 通信,因此无法与我的 s3 存储桶通信。我是在做错什么还是遗漏了这里的一些设置。

尝试将您的 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" };
    }