Как да качвате файлове в Amazon s3 с помощта на NodeJs, Lambda и API Gateway

Качването на двоичен файл в s3 кофата с помощта на Amazon Lambda и API Gateway понякога е сложно и аз ще споделя с вас как успях да го направя.

Работата с счетоводител беше благословия за мен по отношение на посрещането на предизвикателства. Това ми даде възможност да проуча нови технологии и как да се възползвам от много уеб услуги на Amazon.

Имах предизвикателството да създам крайна точка, която ще позволи на потребителите на счетоводителя да качват файлове в своите нови или съществуващи фактури, оферти и покупки в основното приложение чрез API.

Започнах проучванията си и прегледах документацията на Amazon и беше заявено, че потребителите могат да качват двоични файлове директно в s3 с помощта на Lambda, но за мое учудване е трудно да направите това, тъй като шлюзът на API на Amazon API преминава само JSON като Content-Type.

Нека започна като ви покажа как го направих. Ако искате да следвате моите стъпки, трябва да сте регистриран потребител в Amazon и трябва да сте създали кофа на вашия s3.

След като създадете кофата си, ще има още няколко стъпки и ще ви покажа.

Първо, ще трябва да отворите кофата, да кликнете върху свойствата, след това да редактирате правилата и разрешенията. Това ще позволи на потребителя да чете и пише в кофата.

Политика на кофата

{
 „Sid“: „PublicReadGetObject“,
 „Ефект“: „Разрешаване“,
 „Главен“: „*“,
 „Действие“: „s3: GetObject“,
 “Resource”: “arn: aws: s3 ::: bucket-name / *”
 }

Разрешение за кофа



  *
  PUT
  POST
  Получаване на
  Глава
  3000
  разрешението

След като зададете горната конфигурация на новата или съществуващата си кофа, следващото нещо е да създадете нашето приложение Node, което Lambda може да използва за обработка на качването на файл.

Един от най-лесните начини, по който използвах Lambda за качване на файлове в S3, е да го преобразувам в кодиран низ base64 и да го предам в буфера, а след това в s3 putObject метода и е толкова просто като това.

Зависимостите

  • AWS-SDK
  • момент
  • тип файл
  • sha1
Действителната ламбда, която обработва качването на файлаТози код ви осигурява свойствата на файла, напр. Размер на файла, mimeType и така нататък

След като създадете кода по-горе, ще трябва да го zip за по-късна употреба.

Следващото нещо, което трябва да направим, е да създадем нашата функция Lambda в Amazon и също да създадем крайна точка, която очаква POST заявка към създадената от нас Lambda.

Създайте ламбда и импортирайте кода си тук

След като може да сте импортирали кода и дадохте на вашето Lambda смислено име, тогава можете да продължите да създавате крайната точка, където ще можете да изпратите POST заявка и да качите вашия файлов обект в s3.

Трябва да прегледате уеб услугите на Amazon и да щракнете върху шлюза на API.

Създайте тук API и му дайте смислено име

След създаването на API можете да продължите да създавате крайна точка за качване на файл.

Изберете вашия регион и прикачете вашата ламбда функция

След като изберете вашия регион и свържете вашата ламбда функция, тогава пристъпваме към конфигурация на шлюза на API.

Горното ви позволява да зададете вашата заявка и отговор

Те са 4 части, които допълват шлюза на API;

Заявка за метод

Заявка за метод ви позволява да прихванете заявката от потребителя, тук можете да зададете Авторизацията, както и собствения си персонализиран Оторизатор, в случай че искате да използвате JWT за оторизация на маркери. Можете също така да зададете желаните заглавки.

Заявка за интеграция

Тук се осъществява истинското преминаване на тялото. Ще трябва да конфигурирате шаблона за картографиране на тялото. Това ще даде възможност на шлюза на API да разпознае заявката ви към събитието lambda.

Задайте шаблона за картографиране на тялото си тук

Метод Отговор

Тук е необходимо да зададете кода на състоянието на отговора си, напр

  • 404
  • 500
  • 200 - по подразбиране
  • 401
Задайте тук вашите кодове на състоянието

Заявка за интеграция

Тази фаза ви позволява да настроите вашето картографиране да отговаря на кодовете на състоянието, които сте задали в метод Response. Ще трябва да конструирате регулярно изражение за всеки код на състоянието.

Отговорете на кода 404 и оформете шаблона за картографиране, за да форматирате съобщението за грешка

След приключване на горните стъпки следващото е да разгърнем нашия API и да използваме POSTMAN за консумация на крайната точка

Версия на вашия API тукпримерна POST заявка към функцията lambda

Можете да използвате облачен часовник, за да наблюдавате отговора, в случай че има грешка, в противен случай трябва да получите URL файла на файла

{“File_url”: “bucketpath + fullfilepath”}

Много ви благодаря, че преминахте през урока. Моля, не се колебайте да пуснете коментари и errata.