Статьи

Скала в Appfog

В этой статье мы обсудим, как развернуть отдельное приложение Scala в AppFog.

AppFog — это платформа как услуга (PaaS), которая поддерживает несколько языков, а также несколько облаков. Он построен на основе открытого исходного кода PaaS Cloud Foundry и может поддерживать любой язык, поддерживаемый Cloud Foundry, например PHP, Java, Scala и т. Д. AppFog позволяет вам использовать ваш язык по выбору, а также инфраструктуру публичного облака. При развертывании приложения вы также можете выбрать поставщика облачных услуг — Amazon, Microsoft, Rackspace и другие. Одним из основных преимуществ поддержки нескольких облаков является то, что вы можете развернуть приложение в нескольких облаках, поэтому, если один сервис отключается, вы можете легко переключиться на другого поставщика.

Многие примеры приложений (Jumpstarts) перечислены на панели инструментов AppFog, что упрощает запуск новых приложений. К сожалению, здесь нет приложений Scala. Итак, чтобы запустить наше приложение Scala, мы будем использовать инструмент командной строки.

Использование инструмента командной строки af

AppFog предоставляет инструмент командной строки для создания и управления вашим приложением. Это приложение оболочки ruby, которое вы можете установить с помощью gem. Поэтому для установки на afвашем компьютере должны быть установлены Ruby и RubyGems. Для установки af:

$ gem install af

С этим инструментом доступно несколько команд для создания приложения, запуска / остановки приложения и так далее. Мы увидим их по ходу дела. Для использования у afвас должна быть учетная запись AppFog, поэтому создайте ее, если у вас ее еще нет. Затем вы должны войти в систему из командной строки, прежде чем создавать приложение.

shameerc$ af login
Attempting login to [https://api.appfog.com]
Email: [email protected]
Password: *********
Successfully logged into [https://api.appfog.com]

После успешного входа в систему вы можете запустить приложение в AppFog. Перед созданием приложения в AppFog нам необходимо настроить его на нашем локальном компьютере.

Настройка проекта

Для демонстрации я разработал пример приложения Scala от Cloud Foundry, которое будет тестировать палиндром, который находится в Github . В этом приложении мы используем нефильтрованную библиотеку для обслуживания HTTP-запросов в Scala. Мы используем sbt (Simple Build Tool) с плагином sbt-package-dist для сборки и упаковки приложения. Для начала клонируйте пример приложения из Github на свой локальный компьютер.

shameerc$ git clone https://github.com/shameerc/unfilter-me.git 
scala-unfilter

Шаг внутри scala-unfilterпапки после клонирования исходного кода. Вы увидите исходные файлы Scala, папку проекта sbt и файл сборки (build.sbt). scala.sbt содержит определения сборки, такие как имя приложения, версия и зависимости.

import com.twitter.sbt._

seq(StandardProject.newSettings: _*)
 
packageDistZipName := "af-unfiltered-sample.zip"

organization := "com.example"

name := "scala-unfilter"

version := "0.1.0"

libraryDependencies ++= Seq(
  "net.databinder" %% "unfiltered-filter" % "0.6.4",
  "net.databinder" %% "unfiltered-jetty" % "0.6.4",
  "org.clapper" %% "avsl" % "0.3.6",
  "net.databinder" %% "unfiltered-spec" % "0.6.4" % "test"
)

resolvers ++= Seq(
  "java m2" at "http://download.java.net/maven/2"
)

В первых двух строках мы включаем настройки для sbt-package-dist. packageDistZipNameИмя файла пакета, который будет создан этим плагином. Помните, что sbt требует пустой строки между операторами в build.sbt.

Вы можете протестировать приложение локально, запустив sbt.

scala-unfilter shameerc$ sbt run

Он разрешит все зависимости, скомпилирует и автоматически запустит приложение в браузере. Далее нам нужно упаковать приложение для развертывания в AppFog.

scala-unfilter shameerc$ sbt package-dist

Это упакует приложение в заархивированный файл с именем af-unfiltered-sample.zipи сохранит в app-base/dist/scala-unfilter-0.1.0/. Этот файл содержит все jar-файлы и библиотеки, необходимые для нашего приложения.

Развертывание приложения

При развертывании приложения мы в основном загружаем файл пакета на сервер AppFog. af pushэто команда для создания и развертывания приложения в первый раз.

scala-unfilter shameerc$ af push --path=dist/scala-unfilter-0.1.0/
af-unfiltered-sample.zip

Application Name: scala-unfilter
Detected a Standalone Application, is this correct? [Yn]:
1: erlangR14B02
2: java
3: node04
4: node06
5: php
6: python2
7: ruby18
8: ruby192
9: ruby193
Select Runtime [java]: 2
Selected java
Start Command: java $JAVA_OPTS -jar scala-unfilter-0.1.0/scala-unfilter_2.9.1-0.1.0.jar
Application Deployed URL [None]: scala-unfilter.${target-base}
Memory reservation (128M, 256M, 512M, 1G, 2G) [512M]:
How many instances? [1]:
Bind existing services to 'scala-unfilter'? [yN]:
Create services to bind to 'scala-unfilter'? [yN]:
Would you like to save this configuration? [yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (11M): OK  
Push Status: OK
Staging Application 'scala-unfilter': OK                                       
Starting Application 'scala-unfilter': OK     

Вышеуказанные шаги загрузят и запустят наше приложение в AppFog. Если --pathпараметр не указан, он будет развернут из текущего каталога. Здесь мы указали путь к zip-файлу для загрузки. Далее будет запрошено имя приложения, которое мы дали scala-unfilter. Затем afопределит тип приложения, которое мы развертываем. Например, если это приложение PHP, оно автоматически обнаружит и попросит нас подтвердить это. В этом случае мы развертываем упакованное приложение. Таким образом, afон был обнаружен как отдельное приложение, и поэтому нас просят выбрать среду выполнения. Для запуска приложений Scala нам нужна среда выполнения Java.

Нам нужно использовать команду Start для запуска приложения. После развертывания приложения AppFog разархивирует файл и поместит его в базовую папку и попытается запустить приложение с помощью java $JAVA_OPTS -jar scala-unfilter-0.1.0/scala-unfilter_2.9.1-0.1.0.jarкоманды в AppFog. Затем вам нужно выбрать URL AppFog, резервирование памяти и номер экземпляра для вашего приложения. Здесь мы приняли значения по умолчанию для них. Затем вы можете связать любые новые или существующие сервисы, в которых нуждается ваше приложение (например, базы данных). Мы пропустили этот шаг здесь.

Далее вас спросят, хотите ли вы сохранить конфигурацию приложения локально. afзапишет конфигурацию приложения в файл с именем manifest.ymlи сохранит его в корне приложения. manifest.ymlбудет иметь всю необходимую информацию о приложении, такую ​​как его имя, URL, команда запуска и т. д. Это облегчит дальнейшее развертывание, так как afбудет считывать значения из этого файла конфигурации. Вы можете напрямую написать файл конфигурации для развертывания приложения, когда вы ознакомитесь с инструментом командной строки.

После того, как вы успешно выполните описанные выше шаги, afсоздайте приложение в AppFog. Затем он загрузит упакованное приложение и попытается начать с помощью команды запуска, которую мы дали. Если других проблем нет, у вас будет запущенное приложение Scala в AppFog, к которому вы можете обратиться по указанному URL.

Модификация и обновление приложения

Вам не нужно выполнять вышеуказанные шаги, когда вы хотите обновить приложение после внесения изменений. После того, как вы закончили модификации, протестируйте их локально и убедитесь, что они работают нормально. Затем упакуйте приложение, используя sbt package-distкоманду, и введите приведенную ниже команду из каталога приложения.

Shameers-MacBook-Pro:scala-unfilter shameerc$ af update

Updating application 'scala-unfilter'...
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (11M): OK   
Push Status: OK
Stopping Application 'scala-unfilter': OK
Staging Application 'scala-unfilter': OK                                        
Starting Application 'scala-unfilter': OK

Круто, мы успешно обновили наши изменения в AppFog. При обновлении приложения AppFog полностью удалит старые файлы, заменив их новыми. Поэтому будьте осторожны при хранении статического содержимого, такого как изображения, в AppFog.

Резюме

AppFog — многообещающий многоязычный PaaS. Созданный на основе Cloud Foundry, он поддерживает многие популярные языки, такие как PHP, Java, Ruby и т. Д. В качестве языка на основе Jvm мы также можем запускать приложения Scala в AppFog. В этой статье мы познакомились с использованием инструмента командной строки af и развертыванием автономного приложения Scala в AppFog. Это только начало; Вы можете столкнуться со многими проблемами, когда добавляете в приложение различные функции. Не стесняйтесь оставлять комментарии, если у вас возникли проблемы. Я сделаю все возможное, чтобы ответить на любые вопросы.