Kinesis Data Firehose 및 Amazon S3 사이에서 데이터 전송 실패 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 18일

Amazon Kinesis Data Firehose에서 Amazon Simple Storage Service(Amazon S3) 버킷으로 데이터를 전송하려고 했지만, 실패했습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Kinesis Data Firehose에서 Amazon S3 버킷에 데이터를 넣으려고 하는지 확인하려면 DeliveryToS3.Success 지표를 확인합니다. DeliveryToS3.Success 지표 값이 일관되게 0이면 다음 영역을 확인합니다.

  • 리소스 가용성
  • 수신 데이터 레코드
  • Kinesis Data Firehose 로그
  • AWS Identity and Access Management(IAM) 역할 권한
  • 서버 측 암호화
  • AWS Lambda 호출

​해결 방법

리소스 가용성

Kinesis Data Firehose 전송 스트림에 지정된 S3 버킷의 가용성을 확인합니다. 데이터 변환 기능을 사용하는 경우 지정된 Lambda 함수가 존재하는지 확인합니다.

수신 데이터 레코드

IncomingRecordsIncomingBytes 지표를 보고 Kinesis Data Firehose에 수신되는 데이터가 있는지 확인합니다 IncomingRecords 또는 IncomingBytes에 대한 지표 값이 0이면 Kinesis Data Firehose에 도달하는 레코드가 없음을 나타냅니다. 전송 스트림이 Amazon Kinesis 데이터 스트림을 소스로 사용하는 경우 스트림 소스에 대한 IncomingBytesIncomingRecords 지표를 확인합니다. 또한 전송 스트림에서 DataReadFromKinesisStream.BytesDataReadFromKinesisStream.Records 지표를 내보내는지 확인합니다. 이러한 지표에 대한 자세한 내용은 데이터 전송 CloudWatch 지표를 참조하십시오.

Kinesis Data Firehose에 도달하는 데이터가 없는 경우 업스트림에 문제가 있을 수 있습니다. 직접 PUT 작업의 경우 Kinesis Data Firehose에 레코드를 넣는 데 사용되는 PutRecordPutRecordBatch API가 올바르게 호출되었는지 확인합니다.

Kinesis Data Firehose 로그

Kinesis Data Firehose에 대해 로깅이 활성화되었는지 확인합니다. 로깅이 활성화되지 않은 경우 오류 로그에서 전송 실패를 확인합니다. 오류 로그는 전송 실패에 대한 구체적인 이유를 제공하며, 이를 통해 문제가 있는 영역을 해결할 수 있습니다. 로그 그룹 이름의 형식은 /aws/kinesisfirehose/delivery-stream-name입니다.

그런 다음, 역할에 대해 다음 권한을 사용합니다.

"Action": [
               "logs:PutLogEvents"
           ],
           "Resource": [
               "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name"
           ]

IAM 역할 권한

Kinesis Data Firehose 전송 스트림에 지정된 IAM 역할에 올바른 권한이 있는지 확인합니다. 스트림에서 활성화된 파라미터에 따라 여러 권한이 필요합니다. 자세한 내용은 Amazon S3 대상에 액세스할 수 있는 권한을 Kinesis Data Firehose에 부여를 참조하십시오.

S3 액세스의 경우 다음과 같이 IAM 정책을 업데이트합니다.

"Action": [
                "s3:AbortMultipartUpload",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject"
            ],     
            "Resource": [       
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"                         
            ]

Lambda 함수의 데이터 변환을 허용하려면 다음과 같이 정책을 업데이트합니다.

"Action": [
               "lambda:InvokeFunction",
               "lambda:GetFunctionConfiguration"
           ],
           "Resource": [
               "arn:aws:lambda:region:account-id:function:function-name:function-version"
           ]

소스로 나열된 Kinesis 데이터 스트림의 경우 다음과 같이 정책을 업데이트합니다.

"Action": [
                "kinesis:DescribeStream",
                "kinesis:GetShardIterator",
                "kinesis:GetRecords",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name"

서버 측 암호화

Kinesis Data Firehose는 S3로 전송되는 데이터를 암호화하기 위해 AWS Key Management Service(AWS KMS)를 사용한 S3 서버 측 암호화를 지원합니다. 서버 측 암호화를 허용하려면 IAM 역할 정책을 다음으로 업데이트합니다.

"Action": [
               "kms:Decrypt",
               "kms:GenerateDataKey"
           ],
           "Resource": [
               "arn:aws:kms:region:account-id:key/key-id"          
           ],
           "Condition": {
               "StringEquals": {
                   "kms:ViaService": "s3.region.amazonaws.com"
               },
               "StringLike": {
                   "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::bucket-name/prefix*"
               }
           }

Lambda 호출

전송 스트림에 지정된 Lambda 함수의 가용성을 확인합니다. Lambda 함수가 없거나 삭제된 경우 호출할 새 Lambda 함수를 생성합니다.

Kinesis Data Firehose의 ExecuteProcessingSuccessErrors 지표를 확인하여 Kinesis Data Firehose에서 Lambda 함수를 호출했는지 확인합니다. 호출에 실패한 경우 Amazon CloudWatch 로그 그룹에서 </aws/lambda/functionname> 위치를 확인하여 Lambda가 호출되지 않는 이유를 확인합니다. Lambda 변환이 있고 Lambda 함수가 호출된 경우 호출 기간을 확인하여 제한 시간 파라미터를 초과하는지 확인합니다. 호출 지표에 대한 자세한 내용은 호출 지표 사용을 참조하십시오.

데이터 변환에 실패하면 처리에 실패한 레코드가 S3 버킷의 processing-failed 폴더로 전송됩니다. S3의 레코드 형식에는 오류 메시지도 포함되어 있습니다. 데이터 변환 실패 문제 해결에 대한 자세한 내용은 데이터 변환 실패 처리를 참조하십시오.

참고: S3 버킷 정책에서 aws:SourceIp 또는 aws:SourceVpce와 같은 명시적 거부가 나타날 수도 있습니다. S3 버킷 정책이 명시적으로 거부되었는지 확인하려면 CloudWatch Logs에서 S3.AccessDenied 오류 코드가 있는지 찾습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?