Как да внедрите Swift бекенд на Amazon AWS

Чували ли сте някога думата „бекенд“? Ако за първи път чувате тази странна дума и се чудите дали това е животно или определен вид растение или дори наистина вкусна храна, или ако знаете какво е това, но чувствате, че наистина не знаете много за него, следвайте ме по време на това ръководство и в крайна сметка ще бъдете доста експерт по въпроса.

В края на това ръководство ще имате основен бекенд за своето приложение. За да постигнем тази цел, ще използваме Kitura, сървърна уеб рамка, която ни позволява да изградим сървър, използвайки Swift, за крайните точки на API, Postgres, релационна база данни с отворен код, за съхранение на данни и Docker за управление на ресурсите.

Вероятно сега сте WAT ?! Какво е крайна точка на API? Ще ти помогна!

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

В това ръководство ще използваме HTTP вместо HTTPS, защото, за да подкрепим очевидно нерелевантното писмо, в крайна сметка има много трудни и дълги стъпки.

В края ще имаме три крайни точки на API. Ние ще бъдем в състояние да проверим тези крайни точки, получавайки JSON отговор. Базата данни е база данни, направена от три таблици, които описват структурата на пътуващото приложение.

Действие!

Тук сме. На първо място, са необходими някои предпоставки. За Kitura, ако използвате macOS, трябва да инсталирате Xcode 9 или по-нова версия и да стартирате xcode-select --инсталиране на терминала. Ако използвате Linux, следвайте това ръководство.

За да продължите, ще ви трябват някои други пакети на вашия компютър. Препоръчвам да инсталирате Homebrew, мениджър на пакети, който опростява живота ви с използваните до бъркотия инсталации.

Сега, когато всичко е настроено, инсталирайте Kitura през Homebew:

$ brew tap ibm-swift / kitura
$ brew инсталирайте kitura

Сега е време да инсталирате Docker, мощен инструмент, който ви помага да управлявате мащабируеми пакети и да го разгърнете с лекота. Изтеглете Docker и го инсталирайте, като следвате стъпките в приложението. Отделете време и след като го инсталирате, влезте и се върнете тук.

Току-що сте инсталирали всичко необходимо, поздравления! Сега имаме нужда от папка на проекта. Нашата йерархия е съставена от основна папка, наречена „MyFirstBackend“. В него ние ще създадем две други папки: „бекенд“, „сертификати“ и „база данни“. Ще използваме тези папки, за да съхраняваме правилата за изображенията на контейнерите за докер. По-късно в папката на базата данни ще поставим правилата за създаване на ... познайте го: база данни. В резервната папка вместо това ще инсталираме проекта Kitura. Изглежда забавно, нали? Нека се разровим в него!

Postgres, ваш ред е!

Както вече беше казано, Докер е наистина мощна програма, която извършва виртуализации на операционната система. Ние го използваме, защото ще разгърнем нашия гръб в облака. По този начин няма да ви пука за паметта, пространството и всички ограничения на нормалния уеб хостинг. Това е възможно благодарение на облака и мащабируемостта на него.

Нека сега изградим базата данни! В папката „база данни“ ще дадем правилата за базата данни Postgres. Върнете се към терминала и cd папката на базата данни. Там създайте Dockerfile и SQL файл

$ cd път / до / база данни /
$ touch Dockerfile
$ touch CreateDB.sql

В папката на базата данни са създадени два файла. Единият е Dockerfile, файл с всички инструкции за създаване на изображението на Docker, а другият е поддържащ файл, който ни е необходим, за да създадем действителната структура на базата данни. Да отворим Dockerfile. Сега, когато имате празен текстов файл пред себе си, нека напишем някои инструкции за контейнера Docker.

ОТ postgres: най-късно
ENV POSTGRES_USER корен
ENV POSTGRES_PASSWORD админ
ENV POSTGRES_DB myFirstDatabase
ADD CreateDB.sql /docker-entrypoint-initdb.d/

Когато ще изградим тези правила, Docker ще изтегли последното изображение на Postgres от DockerHub, ще създаде потребител за базата данни с root като потребителско име и администратор като парола. Името на базата данни ще бъде myFirstDatabase. Всичко ще се базира на файла CreateDB.sql, който създадохме преди минута.

Сега е време да създадете структурата на базата данни

Това е структурата, която ще използваме. Има три таблици: потребители, места и пътувания.

С първата команда създаваме таблицата на потребителите, която има:

  • user_id: първичен ключ на autoincremetal (SERIAL)
  • потребителско име, имейл, парола: текстовите свойства за всеки пакет потребители
  • потребителско име, имейл: тези свойства са маркирани УНИКАЛНО, което означава, че няма да е възможно да се вмъкне стойност, която вече съществува

След това попълваме таблицата на потребителите с куп стойности. Направихме същия процес, за да създадем таблицата с места. След това създадохме третата таблица, наречена пътуване, която е връзка между предишните две таблици. В тази таблица имаме 2 полета, които са в зависимост от другите таблици и правим това със синтаксиса FOREIGN KEY () REFERENCE ().

Kitura, аз те избирам!

Просто се придвижете в папката и използвайте Kitura, за да генерирате готов за изграждане на OpenAPI проект на място:

$ cd път / до / заден ден /
$ kitura init

Сега отворете генерирания Xcode проект. За да комуникираме с базата данни, трябва да импортираме някои рамки. Във файла Package импортирайте тези две рамки на IBM и актуализирайте зависимостите. Първият означава „Обектно релационно картографиране“ и ще ни улесни с заявките към нашата база данни. Вторият е необходим, тъй като използваме PostgreSQL. Имайте предвид, че за разширени персонализирани заявки бихте избрали да използвате директно Swift-Kuery, а не Swift-Kuery-ORM.

.package (url: „https://github.com/IBM-Swift/Swift-Kuery-ORM.git“, от: „0.4.1“),
.package (URL: „https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git“, от: „2.1.0“)
.target (име: "Приложение", зависимости: ["SwiftKueryPostgreSQL", "SwiftKueryORM", ...

Трябва да регенерирате проекта за новите зависимости. Първо, затворете Xcode и използвайте тези команди:

$ cd бекенд /
$ swift пакет generator-xcodeproj

Отворете отново проекта, сега можете да ги импортирате във файла Application.swift:

импортира SwiftKueryORM
импортира SwiftKueryPostgreSQL

Сега нека подготвим модела ни за връзка с базата данни. Нуждаем се от това, за да съответства на протоколите Codable, Equatable и Model:

  • Codable: позволява структурата да се експортира в JSON
  • Изравним: позволява да се сравняват за равенство различни потребителски обекти
  • Модел: това разкрива нови методи за запазване, намиране, изтриване и т.н. от база данни

Сега трябва да установим връзката с базата данни. Вмъкнете тази функция в класа на приложението в Application.swift:

Просто променете параметрите съответно с вашата база данни, име, потребителско име и парола.

Сега нека поддържаме GET заявки в два варианта в рамките на класа на приложението:

Ей, готови сте да тръгнете!

Докер: как да!

На този етап трябва да имате структура като тази:

Сега имаме всички Dockerfiles, от които се нуждаем. Няколко реда по-горе създадохме Dockerfile за нашата база данни и след това създадохме проект Kitura, който автоматично създава Dockerfile. В този Dockerfile липсва променлива. Отворете файла, който можете да намерите в резервната папка, премахнете всичко и напишете:

ОТ ibmcom / kitura-ubuntu: най-ново
RUN mkdir / външен && apt-get update && apt-get -y ъпгрейд && apt-get -y инсталирате къдряне
RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
RUN apt-get update && apt-get -y надграждане && apt-get install -y nodejs libpq-dev
RUN npm инсталирайте -g yo
ЕКСПОЗИЦИЯ 8080
ENV DATABASE_URL 127.0.0.1
ДОПЪЛНЕНИЕ ./ / външно /
RUN ["/ bin / bash", "-c", "cd / external /; бързо изграждане"]
CMD ["/ bin / bash", "-c", "cd /external/.build/x86_64-unknown-linux/debug/; ./backend"]

Сега просто трябва да изградим изображенията на докера. За да постигнем това, трябва да изпълним някои команди. На първо място, стартирайте докер отваряне на приложението, което инсталирахме в началото. Когато се изпълнява, върнете се към Terminal и променете директории в папката на основния проект (myFirstBackend). За да изградите накрая изображенията, трябва да изпълните следните команди:

docker build -t потребителско име / mydatabase: v1 ./database
docker build -t потребителско име / mybackend: v1 ./backend

Където:

  • потребителско име: потребителското име на вашия акаунт в DockerHub
  • mydatabase - mybackend: име на изображенията
  • v1: таг на версията, която изграждате

Можете да тествате вашите изображения, като ги пускате на вашата машина. Базата данни трябва да работи на порт 5432:

docker run -p 5432: 5432 потребителско име / база данни: v1

Когато базата данни работи, стартирайте задния ред на порт 8080 и променете променливата на средата с вашия локален IP. За да намерите вашия локален IP, отворете System Preferences, след това отидете на Network и погледнете текущия си IP адрес. Задайте този адрес като DATABASE_URL:

docker run -p 8080: 8080 -e DATABASE_URL = '' потребителско име / mybackend: v1

Когато тази стъпка е извършена, трябва да качите тези изображения в DockerHub с:

потребителско име / моята база данни: v1
потребителско име / docker push / mybackend: v1
Не забравяйте да замените потребителското име с вашето потребителско име DockerHub.

Разгърнете всичко

Почти сме готови! Сега е моментът да разгърнете това, което сте направили досега, в облака, че в случая е Amazon AWS. На първо място, имате нужда от акаунт там. Ако нямате такъв, създайте го тук. След като имате такъв, влезте и под услуги изберете EC2. В горния десен ъгъл можете да изберете региона на сървъра, върху който искате да работите. В този урок използваме САЩ. Запад (Северна Калифорния), но можете да решите този, който по-добре отговаря на вашите нужди.

За да стартирате вашите изображения на докер на AWS, имате нужда от екземпляр. За да създадете такъв, изберете Инстанции в менюто отляво и изберете син бутон „Стартиране на инстанцията“ в средата на страницата.

Сега е време да конфигурирате вашата машина. Изберете Amazon Linux 2 AMI, като щракнете върху бутона Избор.

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

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

Забележка: За целите на тестване задаваме SSH източници навсякъде, но за по-добра сигурност SSH порта трябва да бъде отворен само за вашия IP адрес. По този начин никой не може да получи достъп до вашата инстанция чрез SSH.

След като прегледате всички подробности, щракнете върху Стартиране. По този начин ще разгърнете инстанцията и ще можете да създадете чифт ключове, които ще трябва да влезете с SSH от вашия терминал. Изберете Създаване на нова двойка ключове и след това й дайте име (в този случай „debug_tutorial“). След това изтеглете двойката ключове, извадете разширението .txt от файла и го поставете в папката със сертификати. Ще се върнем там по-късно.

Свършен. На страницата трябва да се появи зелено съобщение за успех. Вашият екземпляр вече работи на облака. Проблемът е, че всичко ще се зареди, тъй като е празно. Нека го попълним!

На първо място се нуждаем от CLI (интерфейс на командния ред) за Amazon AWS. Отворете отново терминала и с помощта на Homebrew единствената команда, която трябва да изпълните, е:

$ brew инсталирайте awscli

След като го направите, трябва да конфигурирате подробностите за Aws с:

$ aws конфигуриране

Първият вход, от който се нуждаете, е идентификационният ви ключ за достъп, който можете да намерите, като щракнете върху името си в менюто в горния десен ъгъл и след това върху „Моите идентификационни данни за сигурност“. Там изберете ключ за достъп, създайте такъв и изтеглете файла. Поставете изтегления файл в папката със сертификати. Сега имате два ключа: идентификатор на ключа за достъп и секретен ключ. Следващите данни, които ще ви трябват за конфигурацията, е името на региона по подразбиране, което трябва да отразява региона, който сте избрали в началото (в нашия случай е us-west-1). Тук можете да намерите списък на наличните региони:

ap-североизток-1 - Азиатско-тихоокеанският регион (Токио)
ap-североизток-2 - Азиатско-тихоокеанският регион (Сеул)
ap-юг-1 - Азиатско-тихоокеанският регион (Мумбай)
ap-югоизток-1 - Азиатско-тихоокеанският регион (Сингапур)
ap-югоизток-2 - Азиатско-тихоокеанският регион (Сидни)
ca-central-1 - Канада (Централна)
eu-central-1 - Централен ЕС (Франкфурт)
eu-west-1 - EU West (Ирландия)
eu-west-2 - EU West (Лондон)
eu-west-3 - EU West (Париж)
sa-east-1 - Южна Америка (Сао Пауло)
us-east-1 - US East (Вирджиния)
us-east-2 - US East (Ohio)
us-west-1 - US West (Н. Калифорния)
us-west-2 - US West (Орегон)

Задайте формат за извеждане на данни като текст и конфигурирането е извършено. Сега трябва да се свържете с вашия случай чрез SSH. За целта трябва да стартирате командата по-долу, където i-0f2103a2a2417f4cd е идентификаторът на вашата инстанция.

$ aws ec2 get-console-output --in substance-id i-0f2103a2a2417f4cd

В Terminal променете директории в папката със сертификати, която съдържа .pem файла, създаден по-рано. Тук трябва да стартирате тази команда, където debug_tutorial е името на вашия сертификат.

$ chmod 400 debug_tutorial.pem

Нека се свържем с инстанцията най-накрая! Изпълнете тази команда:

$ ssh -i debug_tutorial.pem ec2-user@ec2-13-57-229-28.us-west-1.compute.amazonaws.com

Тъй като в началото сме избрали „Linux“, потребителят е ec2 потребител. След @ името DNS е Public DNS, което можете да намерите в описанието на инстанцията. Вместо това debug_tutorial.pem е името на вашия сертификат. След това въведете да и всичко е настроено.

Сега сте свързани чрез SSH към вашия случай. Време е да инсталирате докер на машината:

sudo yum update -y
sudo amazon-linux-екстри инсталират докер

Стартирайте услугата за докер:

sudo service docker start
sudo usermod -a -G докер ec2-потребител

Излезте с излизане и влезте обратно и след това проверете инсталацията на докера:

информация за докер

Сега инсталирайте и стартирайте двата контейнера:

docker run -p 5432: 5432 потребителско име / база данни: v1
docker run -p 8080: 8080 -e DATABASE_URL = '' потребителско име / mybackend: v1
DATABASE_URL е публичният IP на вашата инстанция.

Всичко е готово! Честито! Сега можете да получите достъп до вашия API чрез публичния IP адрес.