53
やれるHeroku Java アプリケーション開発編 Mitsuhiro Okamoto Senior Developer Evangelist Salesforce.com

やれる Heroku - Java アプリケーション開発編

Embed Size (px)

Citation preview

Page 1: やれる Heroku - Java アプリケーション開発編

やれるHeroku Java アプリケーション開発編Mitsuhiro OkamotoSenior Developer EvangelistSalesforce.com

Page 2: やれる Heroku - Java アプリケーション開発編

Speaker

Mitsuhiro Okamoto@mitsuhiro

Senior Developer EvangelistSalesforce.com

Page 3: やれる Heroku - Java アプリケーション開発編

Forward-Looking Statements

Statement under the Private Securities Litigation Reform Act of 1995:

This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.

The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site.

Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.

Page 4: やれる Heroku - Java アプリケーション開発編

ソーシャルアカウント

@salesforcedevjp

録画ビデオはYoutube及びWebinar詳細ページにて公開されます(参加登録URLと同じです)

本Webinarは録画されています

Salesforce Developers Japan

Heroku JP@herokujp

Page 5: やれる Heroku - Java アプリケーション開発編

質問がある場合には?質問は最後まで待つ必要はありません!

Questionの機能を使って質問をして下さい可能な場合は別のスタッフが質問について解答しますすぐに解答出来ない場合は、後ほどスピーカーが解答します

ライブQ&Aを最後に行います時間の許す限り、Webinarの最後にQ & Aの時間を設けます

開発者フォーラムを活用しましょうよりたくさんの質問がある場合は?こちらをご利用下さいhttp://developer.salesforce.com/jp/forums

Page 6: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 7: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 8: やれる Heroku - Java アプリケーション開発編

Salesforceのプラットフォームアプローチ

業務のエキスパート自身が、“プログラマーの手を借りなくても”アプリをカスタマイズできる

“プログラマーの生産性を最大化”し革新的なアプリを開発にリソースを集中できる

Page 9: やれる Heroku - Java アプリケーション開発編

あらゆる領域において、アプリケーションの重要度が高まっている今、サーバーやデータベース環境構築を迅速に行い、運用コストを最小限に抑える必要があるとHerokuは考えています。

開発者はサーバーやオペレーティングシステムの事は考える必要はなく、インフラの管理業務ではなくアプリケーション開発に集中するべきです。

アプリケーション開発で頻繁に利用される機能は、一から作る必要はありません。オープンソースを梃子のように使うことで、アプリケーション開発にかかる期間とコストを最小化できます。

Herokuが考えるアプリケーション開発の姿

Page 10: やれる Heroku - Java アプリケーション開発編

Herokuの提供するものモダンなWebアプリを開発するのに必要な考慮点をシンプルにする

Page 11: やれる Heroku - Java アプリケーション開発編

Herokuの提供するものモダンなWebアプリを開発するのに必要な考慮点をシンプルにする

Page 12: やれる Heroku - Java アプリケーション開発編

The Twelve Factor App

Heroku創業者のアダム・ウィギンスがプラットフォームサービス上で稼働する数百のアプリの特性から得た知見をまとめたもの

(原文)http://12factor.net/(日本語訳)http://12factor.net/ja/

現代的なアプリケーションを設計、構築、運用するための12の方法論

Page 13: やれる Heroku - Java アプリケーション開発編

The Twelve Factor App現代的なアプリケーションを設計、構築、運用するための12の方法論

I. コードベースバージョン管理されている1つのコードベースと複数のデプロイII. 依存関係依存関係を明示的に宣言し分離するIII. 設定設定を環境変数に格納するIV. バックエンドサービスバックエンドサービスをアタッチされたリソースとして扱うV. ビルド、リリース、実行ビルド、リリース、実行の3つのステージを厳密に分離するVI. プロセスアプリを1つもしくは複数のステートレスなプロセスとして実行

VII. ポートバインディングポートバインディングを通してサービスを公開するVIII. 並行性プロセスモデルによってスケールアウトするIX. 廃棄容易性高速な起動とグレースフルシャットダウンで堅牢性を最大化X. 開発/本番一致開発、ステージング、本番環境をできるだけ一致させるXI. ログログをイベントストリームとして扱うXII. 管理プロセス管理タスクを1回限りのプロセスとして実行する

Page 14: やれる Heroku - Java アプリケーション開発編

Runtime(Dyno) Developer Experience(DX)

Data Services and Ecosystem

Heroku Platformが提供する機能アプリケーション中心の開発、運用、拡張

アプリケーションのモニタリングや継続的デリバリ

(CD)環境を提供する開発者はアプリケーション

開発に集中できる

Herokuによって管理されるランタイムコンテナ

システムおよび言語スタックは自動的に更新される

PostgresやRedisといったデータベースサービスや、

150以上の拡張機能モニタリング、ビッグデータ、

ログ管理、など

Page 15: やれる Heroku - Java アプリケーション開発編

Heroku ボタンアプリケーションのひな形を使ってデプロイ

Page 16: やれる Heroku - Java アプリケーション開発編

Heroku上で稼働するアプリを統合的に管理Heroku ダッシュボード

アプリに割当てるリソースを統合的に管理

実行中のアプリの状態をリアルタイムに監視

Page 17: やれる Heroku - Java アプリケーション開発編

Dynoの拡張とアドオンの追加ダッシュボードから簡単に実行可能

スライダーでDynoの数を変更

追加するアドオンを選択

Page 18: やれる Heroku - Java アプリケーション開発編

DynoのロールWebサーバ以外にも、バッチプロセスやスケジューラなど

Web Dyno

Worker Dyno

Regular Dyno

Scheduler

Heroku run

One off Dyno

Page 19: やれる Heroku - Java アプリケーション開発編

HerokuのDynoの考え方ひとつのアプリに対して複数のDynoが配備され、ルータよりラウンドロビンする

Page 20: やれる Heroku - Java アプリケーション開発編

HerokuのDynoの考え方サーバーがダウンした場合は・・・

Page 21: やれる Heroku - Java アプリケーション開発編

HerokuのDynoの考え方欠けたコンテナはすぐに別のサーバー上で起動され、ルーティングが変更

Page 22: やれる Heroku - Java アプリケーション開発編

Heroku Private Spaces

開発者

Heroku データベース(Postgres, Redis)

他リソースへのセキュアリンク

標準のHerokuプラットフォーム

Add-onsエコシステム

Private Dynos各種プログラム言語を自動認識し、自在にスケールアウト可能なアプリ実行環境。NWで他と分断され、占有型で提供。

Private データベースHerokuが管理する関係DBのPostgresとキーバリューストア(KVS)型DBのRedisは、Private Spaces上で管理が可能。

Heroku Private Space

Page 23: やれる Heroku - Java アプリケーション開発編

用途に応じてDynoの種類を使い分けるDynoの種類

プログラミングの学習など

(無料)

個人的な小さなプロジェクト

(7USD/月)

業務利用の本番環境やステージング

環境

(25USDまたは

50USD/月)

より高い処理性能が必要なサービス

(250USDまたは

500USD/月)

Page 24: やれる Heroku - Java アプリケーション開発編

https://developer.salesforce.com/content/type/Webinar過去のWebinarをご覧になれます

Page 25: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 26: やれる Heroku - Java アプリケーション開発編

Herokuのアプリケーションデプロイ方法Gitを利用して、コード自体をPushする

Slugコンパイル

アプリ実行環境の判別

依存ライブラリなどのインストール

/セットアップ

Page 27: やれる Heroku - Java アプリケーション開発編

Herokuのアプリケーションデプロイ方法Gitを利用して、コード自体をPushする

Slugコンパイル

アプリ実行環境の判別

依存ライブラリなどのインストール

/セットアップ

Page 28: やれる Heroku - Java アプリケーション開発編

Git Pushされたコードの構成で自動認識

$ git push heroku masterCounting objects: 4, done.Delta compression using up to 8 threads.Compressing objects: 100% (4/4), done.Writing objects: 100% (4/4), 367 bytes | 0 bytes/s, done.Total 4 (delta 3), reused 0 (delta 0)remote: Compressing source files... done.remote: Building source:remote: remote: -----> Node.js app detectedremote: remote: -----> Creating runtime environmentremote: remote: NPM_CONFIG_LOGLEVEL=error…remote: -----> Building dependenciesremote: Pruning any extraneous modulesremote: Installing node modules (package.json)remote: …remote: -----> Launching... done, v4remote: https://agile-meadow-8177.herokuapp.com/ deployed to Herokuremote: remote: Verifying deploy.... done.To https://git.heroku.com/agile-meadow-8177.git

777c350..6219ad4 master -> master

アプリ実行環境の判別

依存ライブラリなどのインストール/セットアップ

アプリの起動

アプリケーションコードの受け取り

Page 29: やれる Heroku - Java アプリケーション開発編

開発者が意識しなくても、Herokuがランタイムの保守管理を行うHerokuが標準でサポートしている言語

Page 30: やれる Heroku - Java アプリケーション開発編

コンテナに任意のランタイムを利用できるようにするための仕組みBuildpackとは

3つのコマンドでビルドをコントロール

bin/detect : アプリにBuildPackが適用できるかを判別する

bin/compile : アプリを実行可能な状態にコンパイルや変換を行う

bin/release : ランタイムに必要なメタデータを付与する

Page 31: やれる Heroku - Java アプリケーション開発編

≒ Heroku自身が管理しているビルドパックHerokuが標準でサポートしている言語

Ruby heroku/ruby https://github.com/heroku/heroku-buildpack-ruby

Node.js heroku/nodejs https://github.com/heroku/heroku-buildpack-nodejs

Clojure heroku/clojure https://github.com/heroku/heroku-buildpack-clojure

Python heroku/python https://github.com/heroku/heroku-buildpack-python

Java heroku/java https://github.com/heroku/heroku-buildpack-java

Gradle heroku/gradle https://github.com/heroku/heroku-buildpack-gradle

Grails https://github.com/heroku/heroku-buildpack-grails

Scala heroku/scala https://github.com/heroku/heroku-buildpack-scala

Play https://github.com/heroku/heroku-buildpack-play

PHP heroku/php https://github.com/heroku/heroku-buildpack-php

Go heroku/go https://github.com/heroku/heroku-buildpack-go

Page 32: やれる Heroku - Java アプリケーション開発編

Herokuがサポートする言語以外を利用する場合は?Heroku ElementsでCustom Buildpackを探す

Page 33: やれる Heroku - Java アプリケーション開発編

HerokuでJavaを利用する方法基本的にMaven or Gradleを使う

Slugコンパイル

アプリ実行環境の判別

依存ライブラリなどのインストール

/セットアップ

pom.xml

build.gradle

1. Javaアプリと判別

2. Maven or Gradleを実行しビルド

Page 34: やれる Heroku - Java アプリケーション開発編

Buildpackを明記したい場合CLI

$heroku buildpacks:set heroku/nodejs$heroku buildpacks:remove heroku/nodejs

{ "buildpacks": [

{ "url": "https://github.com/heroku/heroku-buildpack-pgbouncer" },

{ "url": "heroku/ruby" }]

}

app.json

Page 35: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 36: やれる Heroku - Java アプリケーション開発編

HerokuにおけるJavaのデプロイ方法4つのステップ

1. Maven or Gradleによってプロジェクトを構成

2. Javaのプログラムを作成

3. ProcfileによってMainとなるプログラムを指定

4. HerokuアプリをCreateして、Gitでデプロイ

Page 37: やれる Heroku - Java アプリケーション開発編

Maven or Gradleによってプロジェクトを構成Getting-staredリポジトリを提供しているのでそれを利用

$ git clone https://github.com/heroku/gradle-getting-started.git

$ git clone https://github.com/heroku/gradle-getting-started.git

Mavenの場合

Gradleの場合

Page 38: やれる Heroku - Java アプリケーション開発編

ProcfileとはHerokuは内部でForemanを利用

https://github.com/ddollar/foreman

Procfileをベースにプロセスの複数起動や、並列起動を管理するツール

$ foreman start -c web=2 –p 3000 -e

Page 39: やれる Heroku - Java アプリケーション開発編

Heroku ToolbeltHerokuのコマンドラインツール

Page 40: やれる Heroku - Java アプリケーション開発編

Demo

Page 41: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 42: やれる Heroku - Java アプリケーション開発編

開発者が意識しなくても、Herokuがランタイムの保守管理を行うHerokuが標準でサポートしている言語

Page 43: やれる Heroku - Java アプリケーション開発編

Scalaの場合も基本的にはJavaと同様Sbtを利用してアプリケーションを開発する

1. Sbtを利用してプロジェクトを構成

2. Scalaのプログラムを作成

3. ProcfileによってMainとなるプログラムを指定

4. HerokuアプリをCreateして、Gitでデプロイ

Page 44: やれる Heroku - Java アプリケーション開発編

Demo

Page 45: やれる Heroku - Java アプリケーション開発編

Tips – jarのDeployHeroku Deploy Plugin

$ heroku plugins:install https://github.com/heroku/heroku-deploy

$ heroku deploy:jar --jar <path_to_war_file> --app <app_name>

web: java -jar target/myapp.jar

Procfile

CLI

Page 46: やれる Heroku - Java アプリケーション開発編

Tips – warのDeployMaven Heroku Plugin

<build> <plugins> <plugin> <groupId>com.heroku.sdk</groupId><artifactId>heroku-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <appName>${heroku.appName}</appName>

</configuration></plugin>

</plugins></build>

$ mvn heroku:deploy-war

Page 47: やれる Heroku - Java アプリケーション開発編

Tips – Session Affinity(Labs)Herokuの通常のラウンドロビンによる振り分けを固定

$ heroku labs:enable http-session-affinity

注意点:• セッションは単一サーバに固定はされるが、セッションレプリケーションはされない

-> サーバがクラッシュした場合にはセッションは失われる• ステートレスな設計をし、セッションデータはRedisやMemcacleの利用を推奨

Page 48: やれる Heroku - Java アプリケーション開発編

本日のアジェンダ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 49: やれる Heroku - Java アプリケーション開発編

Add onカタログのサポート

Heroku ElementsのSupported Languageを確認Javaを利用した際のAddonはどうなるか?

Page 50: やれる Heroku - Java アプリケーション開発編

Heroku ConnectのOData対応Heroku Postgresの中身をOdataとして公開可能

Page 51: やれる Heroku - Java アプリケーション開発編

まとめ

ü Heroku の基本ü Heroku の Java サポートü Heroku への Java アプリケーションのデプロイ方法ü JVM 言語のサポートü Javaアプリケーションの外部サービスとの接続

Page 52: やれる Heroku - Java アプリケーション開発編

Salesforce Universityのトレーニング

Heroku基礎http://sfdc.co/bvPw6f

Herokuをつかった実践的なアプリ開発のスキルを獲得できる半日のトレーニングコース

株式会社セールスフォース・ドットコム エデュケーションサービス部TEL : 03-4222-0710

URL : www.salesforce.com/jp/trainingEmail : [email protected]

Page 53: やれる Heroku - Java アプリケーション開発編

Thank you