Обновите полномочия для AmazonKinesisClient с помощью AWSSDK - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю предварительное приложение в .Net, которое использует поток кинезиса.Как мне написать метод, который может обновить полномочия для моего KinesisClient (они действительны только в течение 1 часа) без повторного создания самого клиента.Это возможно?Или я ошибаюсь?

Это фабричный класс, который я использую для создания клиента.

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 голосов
/ 02 октября 2018

В итоге я сохранил идентификатор последней записи в параллельном словаре и при повторном создании клиента вставлял словарь, содержащий последний идентификатор для каждого сегмента в KinesisStream.

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