2017-11-07 3 views
2

내 모바일 사용자가 Amazon S3에서 파일 (이미지)을 업로드 할 수있게 해주는 AWS 백엔드 API를 구현해야합니다. 업로드 된 파일을 DynamoDB의 사용자 레코드와 상관시킬 수 없으므로 Amazon S3와 직접 인터페이스하는 API를 만드는 것은 옵션이 아닙니다. 다음 단계를 수행하는 API에 의해 트리거 된 람다 함수 (Java)를 생성하려고 생각했습니다. 1) 파일을 업로드하기 위해 Amazon S3 기능 호출 2) 내 Dynamo DB에 레코드를 쓰고 파일 API로 공개 된 Lambda 함수의 입력에 바이너리 파일을 제공하는 방법이 있습니까?S3에서 파일을 업로드하고 DB에 레코드를 기록하는 AWS API

알려주세요. 고맙습니다!

다비드

답변

2

이 작업을 수행하는 가장 좋은 방법은 presigned URLs 함께. 특정 이름과 유형의 파일을 S3에 직접 업로드 할 수있는 URL을 생성 할 수 있습니다. 이렇게하면 큰 파일이 서버 속도를 늦추거나 람다 제한을 두거나 대역폭을 두 배로 늘릴 염려가 없습니다. 대부분의 경우 사용자가 더 빠르며 S3 transfer acceleration을 지원합니다.

같은 것을 볼 수 과정 :

  1. 사용자 요청이 서버에서 링크를 귀하의 서버가
  2. 사용자 업로드 presigned URL을 사용하여 S3에 직접 정보 파일 presigned URL을 DynamoDB의에 항목을 기록하고 반환
  3. (정확한 서버 이름 선택)
  4. 업로드가 완료되면 람다를 사용하여 알림을 받거나 사용자가 서버에 업로드를 알리도록합니다.
  5. 서버는 예, pass binary data to Lambda functions에 방법이, 필요한 사후 처리를 수행하고

그리고 실제 질문에 대답하는 등 준비 파일을 표시합니다. 이 링크는 단계별 자습서이지만 기본적으로 API 게이트웨이에서는 "요청 본문 통과"를 "정의 된 템플릿이 없을 때 (권장)"로 설정하고 예상되는 콘텐츠 유형을 채워야합니다. 매핑에 "base64data": "$input.body"이 포함되어야하며 '이진 지원'에서 유형을 설정해야합니다. 실제 람다 함수에서는 데이터에 "base64data"으로 액세스해야합니다.

+0

업로드 할 때 lamdba가 DynamoDB에 s3 쓰기를 요구하는 대신 응용 프로그램 대신에 쓸 수 있습니다. 그러나 그렇지 않으면 이것이 내가 그것을 또한하는 방법입니다. – strongjz

+1

맞습니다. 주문은 어느쪽으로 든 갈 수 있습니다. 사용자가 이름과 크기가 다른 파일을 업로드 할 수있는 공개 쓰기 가능 버킷이 아닌 미리 설정된 URL을 사용해야합니다. – kichik