使用AWSSDK更新AmazonKinesisClient的凭证

时间:2018-09-21 14:15:19

标签: c# .net amazon-web-services aws-sdk amazon-kinesis

我正在.Net中创建一个使用kinesis流的本地应用程序。 如何编写一种方法,可以为我的KinesisClient更新证书(它们仅有效1个小时),而无需重新创建客户端本身。那可能吗?还是我采用了错误的方式?

这是im用于生成客户端的工厂类。

public static AmazonKinesisClient CreateKinesisClient(BasicAWSCredentials credentials, string roleArn, string roleSessionName, RegionEndpoint region, LogWriter logWriter)
    {
        try
        {
            var stsClient = new AmazonSecurityTokenServiceClient(credentials);
            var ownerRoleReq = new AssumeRoleRequest
            {
                RoleArn = roleArn,
                RoleSessionName = roleSessionName
            };
            var ownerRoleResp = stsClient.AssumeRoleAsync(ownerRoleReq).Result;

            logWriter.LogInfo<AmazonKinesisClient>("Role taken:" + ownerRoleResp.AssumedRoleUser);
            return new AmazonKinesisClient(ownerRoleResp.Credentials, region);
        }
        catch (Exception e)
        {
           logWriter.LogError<AmazonClientFactory>(e.Message,e);
           throw;
        }
    }

1 个答案:

答案 0 :(得分:0)

最后,我将最新记录ID保存在并发字典中,并在重新创建客户端时向KinesisStream中注入包含每个分片最新ID的字典。

 private string CreateShardIteratorRequestWithSequenceNumber(Shard shard, string sequenceNumber)
    {
        var iteratorRequest = new GetShardIteratorRequest()
        {
            ShardId = shard.ShardId,
            StreamName = _streamName,
            ShardIteratorType = ShardIteratorType.AFTER_SEQUENCE_NUMBER,
            StartingSequenceNumber = sequenceNumber
        };
        return GetShardIterator(iteratorRequest);
    }