この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
Kinesis Data Firehose で Lambda 関数によるデータ変換を設定しています。データを送信すると、S3 バケットのprocessing-failed
フォルダに次のエラーが記録され、変換に失敗しました。データ変換を正常に実施させるには、どうしたら良いでしょうか?
{
"attemptsMade": 4,
"arrivalTimestamp": 123456789012,
"errorCode": "Lambda.InvokeAccessDenied",
"errorMessage": "Access was denied. Ensure that the access policy allows access to the Lambda function.",
"attemptEndingTimestamp": 123456789012,
"rawData": "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
"lambdaArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:hato_data_transformation_lambda:$LATEST"
}
どう対応すればいいの?
Kinesis Data Firehose に設定した IAM ロールをご確認ください。
データ変換を行う Lambda 関数は Kinesis Data Firehose から呼び出されます。Kinesis Data Firehose には IAM ロール(サービスロール)が設定でき、 Lambda 関数を呼び出すには設定した IAM ロールに Lambda 関数の呼び出し許可が必要となります。
そのため、Kinesis Data Firehose に設定した IAM ロールのアクセス権限を確認し、必要な権限が許可されているか、また許可するリソース名等の条件指定に誤りがないかご確認ください。
なお、Kinesis Data Firehose から Lambda 関数は呼び出す場合は次のアクセス許可が必要となります。
Amazon Kinesis Data Firehose によるアクセスの制御 - Amazon Kinesis Data Firehose
※リソース名(12行目)は適切な値に書き換える必要があります
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction",
"lambda:GetFunctionConfiguration"
],
"Resource": [
"arn:aws:lambda:region:account-id:function:function-name:function-version"
]
}
]
}
Kinesis に設定した IAM ロールがわからないときは?
Kinesis Data Firehose に設定した IAM ロールは、Kinesis コンソールもしくは AWS CLI のdescribe-delivery-streamコマンドから確認できます。
Kinesis コンソールから確認する場合は、「Configuration」タブをクリックします。
ページ最下部の「Permissions」セッションに IAM ロール が表示されます。クリックすると IAM ロールの詳細画面に遷移します。
※右上の「Edit」は設定する IAM ロールを変更する場合に使用します。ポリシーを編集する場合はリンクをクリックしてください。