0

kinesisストリームのレコードに基づいてdynamodbテーブルを更新するラムダ関数を作成しようとしていますが、ストリームからレコードを正しく取得できますが、awsclientを取得できません。したがって、ダイナモテーブルの変更を行います。AWSラムダ関数でAmazonDynamoDBClientを取得できません

私のコードのクライアントを取得するために:私はクライアントを取得し、私のシステムに変更を加えるために、このコードを実行すると

AWSCredentials awsCreds = new BasicAWSCredentials("accessid", "accesskey"); 
AmazonDynamoDBClient client = new AmazonDynamoDBClient(awsCreds).withRegion(Regions.US_WEST_2); 
System.out.println("got the dbclient for uswest2"); 
DynamoDB dynamoDB = new DynamoDB(client); 
//code to update tables in dynamodb 

、それが正常に動作しているが、ラムダの内部で実行している間、それは確認ラインに達していませんクライアントの初期化。 私はこの部分をtry catchブロックに入れていますが、例外はありません。関数呼び出しのタイムアウトが発生しています。実行時間を10秒に設定しようとしました。

答えて

0

lamdba関数の場合、資格情報はEnvironmentVariableCredentialsProviderから入手できます。ラムダコンテナは直接あなたの資格情報で出荷しますが

AmazonDynamoDBClient client = 
    new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider()); 

で確認してください別のコンストラクタでも、あなた

AWSCredentials awsCreds = new EnvironmentVariableCredentialsProvider().getCredentials(); 
AmazonDynamoDBClient client = new AmazonDynamoDBClient(awsCreds).withRegion(Regions.US_WEST_2); 
System.out.println("got the dbclient for uswest2"); 
DynamoDB dynamoDB = new DynamoDB(client); 
//code to update tables in dynamodb 

またはこのいずれかのために働く必要があり、環境変数

次のコードからそれらを取得することができますあなたのラムダ設定を選択して、ダイナモに挿入するのに必要な権限を持つIAMロールを選択します

enter image description here

+0

「ラムダコンテナはあなたの資格情報と一緒に直接出荷されます」という資格情報は?あなたの提案したコードを試し、返された資格情報のためのアクセスキーとIDを印刷しました。それらは私のIAMユーザーとは異なります。これらの資格情報にテーブルを変更するためのダイナミックアクセスがあることをどのように知っていますか。私は依然としてこれらの資格情報からクライアントを取得していませんが、関数呼び出しのタイムアウトのみです。 –

+0

lambdaを実行するIAMの役割(ユーザーではない)を定義し、関数の設定を確認します(https://console.aws.amazon.com/lambda/home?region=<あなたの地域に置き換えてください)#/ functions/<あなたの関数名>?tab = configuration)このロールにテーブルを修正するためのダイナミックアクセスがあることを確認してください。 –

+0

環境変数とIAMロールを自動的にチェックするので、次のこともできます。 ' –

関連する問題