Эта эталонная архитектура (схема) позволяет понять, как использовать AWS Lambda вместе с другими сервисами для создания бессерверной базовой системы для мобильного приложения. Пример приложения, предоставленный в этом репозитории, позволяет пользователям загружать фотографии и заметки с помощью Amazon Simple Storage Service (Amazon S3) и Amazon API Gateway соответственно. Заметки хранятся в Amazon DynamoDB и обрабатываются асинхронно с помощью потоков DynamoDB, а функция Lambda добавляет их в домен Amazon CloudSearch. Помимо исходного кода для функций Lambda, этот репозиторий также содержит прототип приложения для iOS с примерами взаимодействия с базовыми ресурсами, заданными в архитектуре, с помощью пакета AWS Mobile SDK для iOS.
Чтобы запустить пример приложения, сначала необходимо развернуть базовые ресурсы, а затем скомпилировать и запустить приложение для iOS.
Предоставленный шаблон AWS CloudFormation создает большинство необходимых базовых ресурсов, но вам по-прежнему потребуется создать домен Amazon CloudSearch, API REST для API Gateway и пул удостоверений Cognito за пределами AWS CloudFormation.
-
С помощью AWS CLI создайте домен CloudSearch с именем по вашему выбору.
aws cloudsearch create-domain --domain-name [YOUR_DOMAIN_NAME] -
Обратите внимание на ARN нового домена в полученном документе. Вы введете это значение при запуске стека CloudFormation.
-
Определите индексы для полей «headline» и «note_text».
aws cloudsearch define-index-field --name headline --type text --domain-name [YOUR_DOMAIN_NAME] aws cloudsearch define-index-field --name note_text --type text --domain-name [YOUR_DOMAIN_NAME]aws cloudsearch index-documents --domain-name [YOUR_DOMAIN_NAME]
-
С помощью AWS CLI создайте API с именем по вашему выбору.
aws apigateway create-rest-api --name [YOUR_API_NAME] -
Обратите внимание на API ID в полученном документе. Вы введете это значение при запуске стека CloudFormation.
-
С помощью AWS CLI создайте пул удостоверений с именем по вашему выбору.
aws cognito-identity create-identity-pool --allow-unauthenticated-identities --identity-pool-name [YOUR_POOL_NAME] -
Обратите внимание на строку IdentityPoolId в полученном документе. Вы введете это значение в качестве параметра при запуске стека CloudFormation.
Вы можете развернуть весь пример в регионе us-east-1, используя предоставленный шаблон CloudFormation и корзину S3. Чтобы использовать другой регион, создайте корзину Amazon S3 в этом регионе и скопируйте в него шаблон и определения функций Lambda.
Выберите Launch Stack, чтобы запустить шаблон в регионе us-east-1 в вашем аккаунте:
После появления запроса укажите домен CloudSearch, API REST для API Gateway и пул удостоверений Amazon Cognito, созданные ранее.
Сведения о ресурсах, созданных этим шаблоном, представлены в разделе «Ресурсы шаблона CloudFormation» этого документа.
После создания стека CloudFormation вам необходимо обновить API, созданный ранее, чтобы воспользоваться новой функцией NotesApiFunction.
- В консоли Amazon API Gateway выберите ваш API.
- Выберите Create Resource, чтобы создать дочерний ресурс в каталоге «/».
- Укажите имя ресурса «notes» и путь «/notes».
- Выберите Create Resource.
- Выберите новый ресурс «/notes» и нажмите кнопку Create Method.
- Выберите «POST» и установите флажок.
- Выберите тип интеграции Lambda Function, а затем выберите регион, где вы запустили стек CloudFormation, в качестве региона Lambda.
- В поле Lambda Function введите NotesApiFunction, а затем выберите функцию, созданную стеком CloudFormation.
- Нажмите кнопку Save и предоставьте API Gateway разрешения для выполнения функции Lambda.
- Выберите Method Request, чтобы изменить конфигурацию запроса.
- Для параметра Authorization type выберите значение «AWS_IAM».
- Для параметра API Key Required выберите значение «true».
- Нажмите кнопку Deploy API.
- Для параметра Deployment stage выберите значение New Stage и введите имя в поле Stage name.
- Обратите внимание на адрес Invoke URL нового этапа. Вы будете использовать это значение при запуске примера приложения для iOS.
- В консоли Amazon API Gateway выберите APIs, а затем выберите API Keys.
- Нажмите кнопку Create API Key.
- Введите имя ключа и выберите Enabled.
- Нажмите кнопку Save.
- В разделе API Stage Association выберите ваш API, а затем выберите этап, созданный ранее.
- Нажмите кнопку Add.
- Обратите внимание на значение API key. Оно будет использоваться при запуске мобильного приложения.
- В консоли Amazon Cognito выберите ваш пул удостоверений.
- Нажмите кнопку Edit Identity Pool.
- Для параметров Unauthenticated role и Authenticated role выберите роль MobileClientRole, созданную стеком CloudFormation. В выходных данных стека указано полное значение ARN роли.
- Нажмите кнопку Save Changes.
Для запуска примера приложения iOS необходима операционная система Mac OS X версии 10.10 (Yosemite) или более поздней. Рекомендуем установить последнюю версию Xcode и Cocoa Pods.
-
Извлеките или загрузите исходный код приложения ios-sample из этого репозитория.
-
Укажите в файле MobileBackendIOS/Constants.swift значения для вашего развертывания. Большинство из них можно найти в выходных данных стека CloudFormation. Ключ API Gateway и URL доступны в описании вашего API в консоли управления AWS.
-
Запустите Cocoa Pods из корневого каталога ios-sample.
pod install -
Откройте созданный файл MobileBackendIOS.xcworkspace в Xcode.
open -a Xcode MobileBackendIOS.xcworkspace -
Выполните построение проекта и запустите его в Xcode, нажав кнопку воспроизведения в верхней части окна.
Пример приложения предоставляет две возможности: загрузка изображения и публикация заметки.
- Нажмите кнопку Upload Image в приложении.
- Щелкните значок камеры, выберите изображение и нажмите кнопку Choose.
- Нажмите кнопку Upload.
В журнале на панели выходных данных Xcode вы увидите запись о том, что изображение загружено в Amazon S3.
Вы также можете просмотреть корзину, созданную стеком CloudFormation, используя консоль управления AWS, чтобы убедиться, что изображение загружено без ошибок.
- Нажмите кнопку Post a Note.
- Введите заголовок и текст.
- Нажмите кнопку Save Note.
В журнале на панели выходных данных Xcode вы увидите запись о том, что заметка успешно сохранена.
При загрузке заметки мобильное приложение вызывает функцию NotesApiFunction. Журналы выполнения этой функции можно просмотреть в Amazon CloudWatch.
После успешного выполнения функции в таблицу DynamoDB, созданную стеком CloudFormation, добавляется запись. Вы можете проверить, сохранена ли заметка, опубликованная в приложении, в созданной таблице.
Наконец, когда заметка сохраняется в таблице DynamoDB, в ее поток добавляется запись, которую обрабатывает функция DynamoStreamHandlerFunction. Вы можете просмотреть журналы ее выполнения в CloudWatch и убедиться, что в созданный домен CloudSearch добавлен новый документ.
Чтобы удалить все ресурсы, созданные этим примером, выполните следующие действия.
- Удалите все объекты из корзины S3, созданной стеком CloudFormation.
- Удалите стек CloudFormation.
- Удалите пул удостоверений Amazon Cognito, API Gateway и домен CloudSearch.
- Удалите группы журналов CloudWatch, связанные с каждой функцией Lambda, созданной стеком CloudFormation.
-
NotesApiFunction – функция для обработки заметок, публикуемых в мобильном приложении, с использованием API Gateway.
-
SearchApiFunction – функция, использующая домен CloudSearch для поиска индексированных заметок по заданным условиям.
-
DynamoStreamHandlerFunction – функция, которая добавляет индексированный документ в указанный домен CloudSearch на основе записей в потоке PhotoNotesTable.
-
NotesApiRole – роль для функции NotesApiFunction. Она предоставляет разрешения для ведения журнала и обработки элементов в таблице PhotoNotesTable.
-
SearchApiRole – роль для функции SearchApiFunction. Она предоставляет разрешения для ведения журнала и поиска в заданном домене CloudSearch.
-
DynamoStreamHandlerRole – роль для функции DynamoStreamHandlerFunction. Она предоставляет разрешения для ведения журнала и добавления документов в заданный домен CloudSearch.
-
MobileClientRole – эту роль пул удостоверений Amazon Cognito применяет для пользователей, прошедших и не прошедших аутентификацию. Она предоставляет доступ к указанному API REST для API Gateway, а также разрешения на размещение объектов в MobileUploadsBucket.
-
MobileUploadsBucket – корзина S3 для загруженных фотографий.
-
CloudFrontDistribution – база раздачи CDN, где в качестве источника используется корзина MobileUploadsBucket.
-
PhotoNotesTable – таблица DynamoDB, в которой хранятся заметки, опубликованные пользователями в мобильном приложении.
-
ConfigTable – таблица DynamoDB для хранения значений конфигурации, которые используют различные функции Lambda. Имя этой таблицы, «MobileRefArchConfig», строго закодировано в каждой функции, его можно изменить, только обновив код.
-
ConfigHelperStack – вложенный стек, создающий пользовательский ресурс для записи данных в таблицу ConfigTable. Этот стек создает функцию Lambda и роль выполнения, предоставляющую разрешение UpdateItem для таблицы ConfigTable.
-
NotesTableConfig – запись конфигурации, которая определяет имя таблицы PhotoNotesTable.
-
SearchEndpointConfig – запись конфигурации, которая определяет адрес поиска для домена CloudSearch, переданного в качестве параметра.
-
DocumentEndpointConfig – запись конфигурации, которая определяет адрес документа для домена CloudSearch, переданного в качестве параметра.
Данная эталонная архитектура лицензирована в соответствии с лицензией Apache 2.0.
