使用 AWSSDK 为 AmazonKinesisClient 更新凭证

Renew cridentials for AmazonKinesisClient using AWSSDK

我正在 .Net 中创建一个使用运动流的本地应用程序。 我如何编写一种方法来更新我的 KinesisClient 的证书(它们仅在 1 小时内有效)而无需重新创建客户端本身。那可能吗?还是我处理方法不对?

这是我用来生产客户端的工厂 class。

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;
        }
    }

我最终将最新的记录 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);
    }