heroku

2015年5月27日 (水)

Heroku基礎トレーニング 開催中

こんにちは、浅野です。

次はPullRequest Deployの手順について書くよ、と宣言したものの別のポストです、ごめんなさい。 (PullRequest Deployは Review Appsという名前が与えられたみたいです)

今回は、Salesforceさんが主催されているHeroku基礎トレーニングを紹介します。

というのも、5月22日(金)に、私がこのトレーニングの講師を担当させていただいていたのです。

このブログを見てくださる方は、Herokuに興味をお持ちの方だと思うので、 そういった方が「そのトレーニング、ここはどうなっているの?」 と疑問に思われる事に回答します。

どうしてSalesforceさんが開催される教育をFlectが?

Salesforceさんとはお仕事で密接な関係があり、Herokuのテクニカルなテーマでは何かとお手伝いさせていただいている御縁で協力させていただいております。昨年末に開催された、Salesforce World Tour TokyoのHerokuブースもFlectメンバーが協力していました。 @herokujpのPOST

このトレーニングの講師は、FlectでHerokuを使ったシステム開発を担当しているメンバーが務めています。

受講する為に必要な前提知識は?

必須となる知識はありません。講習の内容の理解をより深めるには下記の3つです。

  1. gitの基本的な操作(リポジトリをクローンする、変更をコミットする、リモートリポジトリへ変更をプッシュする)
  2. Java(演習で簡単なJavaのWebアプリケーションをつくるため)
  3. Windowsのコマンドプロンプト操作

どんな事をやっているの?

4章で構成されており、それぞれ以下のような内容になっています。

  • 第1章 Herokuの特徴・市場での位置づけ、Herokuを操作する環境の構築・アプリケーションのデプロイ
  • 第2章 Herokuの内部コンポーネントの動作
  • 第3章 Herokuのアドオン紹介
  • 第4章 Heroku開発でのトラブルシュート(開発編、運用編)

何ができるようになるの?

受講後には以下のようなことが可能になっている、と想定しています。

  • Heroku上に典型的なWebアプリケーションを作って公開する
  • 必要なアドオンが何かがわかる

でも、お高いんでしょう?

半日の講義で、受講料は3万円となっております。

会場はどんな感じ?

会場は、Salesforceさんのトレーニングルームで、とても綺麗な会場です。

Classroom1


教室の後ろには、 文房具やちょっとつまめるお菓子、空調が寒いと感じる方の為のひざ掛け等が用意されています。

Classroom2

こういった配慮は嬉しいですね。

会場のマシン環境はどんな感じ?

マシンはお一人様毎に1台、環境セットアップ済みのWindowsのノートPCが用意されています。 演習には問題のないスペックのマシンです。

演習時、自分で持ち込んだPCを使うのは可能?

環境が教室のマシンと違って演習が上手く進められない場合があるリスクはありますが、お使いいただいてもかまいません。

会場用のマシンには、JDK、Apache Maven, PostgreSQLがインストールされています。 (Herokuを操作するためのHeroku Toolbeltは演習時にセットアップします)

動作確認

それぞれ、下記のコマンドを実行してバージョンが表示されることを確認してください。

javac -version
mvn -version
psql --version

(psqlだけ、半角ハイフンが2つです。)

この他にもご質問ございましたら、ぜひコメント欄等でお知らせください。可能な範囲で回答いたします。

次回の開講は7月を予定しておりますので、興味のある方はぜひこちらをチェックしてみてくださいませ。

続きを読む "Heroku基礎トレーニング 開催中" »

2015年5月22日 (金)

なかやまがゆくHeroku本社への道 no.2

こんにちは。なかやまです。

今回も技術話ではないので、ゆるっと見てやってください。

Heroku2_01

前回の記事→no.1

順調に行けば、9月で終わるコーナーですが、今年行けない場合はさらに1年間続ける予定です。

Heroku2_02_2

パスポートの期限は大丈夫でした!2019年までチャレンジできそうです!

Heroku2_03_2

サンフランシスコに行ったことのある人に話を聞いてみる。

Heroku2_04_2

かに食べる、ゴールデンゲートブリッジに行く、チョコレートを買う。。

あと向こうで知り合って行動した人たちとは今も仲良しと聞いて、いいなぁと思いました。

(せっかくお会いしたのにWAZAの話を聞き逃しました。。)

Heroku2_05_2

そういえば、Salesforceユーザー会で自慢大会があるのですが、その景品がDreamforceご招待券だそうです。ユーザー会はSalesforceを利用してる会社さんが集まるコミュニティです。

(しかしパートナーが出て行くわけにもいかず、、Salesforceユーザーのみなさんはチャンスですよ~)

今年の「Dreamforceご招待」を手にするのは?

Heroku2_06_2

Herokuの日々のアップデートには感心します。

Salesforceは年3回なので、Herokuのupdateの速さについていくのが大変。

Heroku2_07_2

ちなみに、前回ポストのご案内をして終わったのですが。

なんと1通入ってました!(ありがとうございます!!)

Heroku2_08_2

なので今後も細々と続けていきます↓

Heroku_1_09

おたより(なかやま直通)

おたよりまってまーす!

なかやま。

2015年5月13日 (水)

Herokuの新料金はお得なのか

こんにちは。 ゴールデンウィーク中に入籍をしましたおっぴーです。

Herokuさんも、Dockerが利用できるにようなったりあたらしい料金体系が発表されたりと、驚きの(というか、影響が大きそうな)発表が多いですね。 すでに、Dockerや新料金については下記のように記事をまとめている方がいらしゃいます。

Herokuの'docker:release'の動き

HerokuがDockerのサポートを開始、DockerコンテナがPaaSで運用管理可能に。その仕組みは

Herokuの新しいプライシングがついに公開。Freeは1日6時間以上Sleepする必要あり

そこで今日は、新料金について「結局、お得なんだろうか」という点と「こんなときどうな動きをするの?」という疑問についてまとめてみました。 疑問については、実際の調査はまだですので、少々、お待ちくださいませ。

いままでは無料でサイトを運用できたのに。。。

まずは、現状のdynoについて整理しましょう。 現状のdynoには下記の特長があります。

  • 1X Dynoを750時間運用する分の料金が無料(750 dyno hourの無料利用枠)
  • PXDyno以外では1Dynoで運用していると1時間非アクティブだとsleepする

この無料枠ですが、750時間を日付に換算すると31日分です。

このため、バットノウハウと言って良いかもしれませんが、1XDynoを1つだけ立ち上げて、定期的にアクセスをするcronなどを仕組むことでsleepさせず、 サイトを無料で運営することができました。

企業サイトのような比較的アクセス数が少ないサイト(そもそもサイトがそういう状態なのが問題だよね、と言うのは別の話)などは、こうした運営をしている方もいらっしゃるかも知れませんね。 僕自身は上記の方法で、営業日のみだけ定期的なスケジュール通知をしてくれるhubotを動作させています。

ちなみに今回、大きな影響を及ぼしているsleepという概念ですが、下記を読んでいたので、 単純に、アクセスが1時間ない場合に、dynoがsleepしている状態でもdyno hourを消費していると思っておりました。

https://devcenter.heroku.com/articles/usage-and-billing#dyno-sleeping

今回からはsleep=dyno hourの消費なし、という定義になったのか、など疑問点があるのですが、もはや利用しない概念になりそうなので調べるのも微妙ですね。。。

お安くなった?Professional Dyno

あたらしい料金の一番の違いは、いままであった750dyno hourの無料枠がなくなったことです。 このため、無料でサイト運用したいと考えた場合、適当な手段がなくなった、といえるでしょう。

ただし単純に価格が上がったわけではありません。 公式ブログでも30%ぐらい安くなったよ、書いてあるとおり、2Dyno構成の場合は従来よりもお安く運用できます。 ただし、750dyno hourの無料枠がなくなったので、1dynoの場合は実質の料金が上がっています。

  • 1Dynoの構成の場合
Dyno Type現料金(750dyno hour の無料枠含む)新料金
1X(Standartd-1X)$0$25(3000円)
2X(Standartd-2X)$34.5(4140円)$50(6000円)
PX(Performance)$538.50(64620円)$500(60000円)

(※円の表記は1ドルが120円の換算です)

  • 2Dynoの構成の場合
Dyno Type現料金(750dyno hour の無料枠含む)新料金
1X(Standartd-1X)$34.50(4140円)$50(6000円)
2X(Standartd-2X)$106.50(12780円)$100(12000円)
PX(Performance)$1,114.50(133740円)$1000(120000円)

(※円の表記は1ドルが120円の換算です)

1Dynoの運用を考えると価格は上がったのですが、本番環境の冗長化を考える場合は、かならず2Dynoで動作させます。 このように考えると、Standar-1X Dyno以外は、本番の運用費用がさがった、といえる体系になったようです。

新しいfree dynoは開発・検証向き

今回の新料金ではDynoTypeが見直され、free dynoとhobby dynoが新たに加えられました。

free dynoはいままでのよう無料で運用できるweb dynoにくわえて、無料のworker dynoを含みます。 ただし、下記のような制限があるため無料で、24時間365日動かすようなサービスを運営できません。

  • 30分、非アクティブの状態でSleepする
  • 1日18時間までしか起動できない
  • web dynoとworker dynoを1つだけしか起動できない

一方、hobbyは月額7ドル確実にかかるようになりました。 このため「無料」を利用の条件とすると選択肢から外れるdynoになってしまいました。 しかし、下記のような特長をもっているため、お安い料金で本番で利用できる環境を手に入れられます。

  • 1Dynoでもsleepしない
  • 24時間365日稼働する

また、free、hobbyともに、いままで課金の対象であったheroku schedulerで起動されるone-off dynoやheroku run bash で起動されるone-off dynoも無料になります。

個人的にはfree dynoはかなり嬉しいdynoですね。 web dynoにくわえて、worker dynoやheroku schedulerを利用すると無条件で課金されていましたが、そんなことを気にすることなく利用したアプリケーションを社内公開などができます。 また、スケジュールを通知するbotなど、営業時間のみ運用したい場合にも十分な利用ができそうです。

で、結局は

今回の新料金では、

  • hobby dynoをつくり、Ping作戦などで無料利用していたユーザーがからしっかりとサービス提供分の料金を徴収するようにした
  • free dynoをつくり、開発や検証で利用できる環境として利用できるようにした
  • Performance dynoは本番運用を想定して、2Dyno構成でさらに低額で利用できるようにした

ということで、フリーミアム的なビジネスモデルから脱却し、しっかりと利用しているユーザーにお得な価格体系にきりかわった、と言えると思います。

一方で、いままで無料でサイト運営しているユーザーさんからすると「えっ!値上げ!」という感想になりそうですね。

ですが、hobby dyno に切り替えることを想定しても、小規模サイトを運用するPaaSとして7ドル、日本円で840円(1ドルが120円の換算です)で利用できるってかなりお得な気がします。

これってどうなるの?

ただし、新価格にともないでてきたDynoTypeについてはまだまだ挙動や仕様に謎が多いです。

  • free dynoのsleep時間は選択できるのか。1日6時間のsleepを違反するとどうなるのか。
  • free dyno でworker dynoやheroku schedulerを設定しているとsleepしたことになるのか。
  • hobby dynoは再起動しちゃうのか。prebootができなそうだけど、その時どうなるのか。
  • Professional dynoのworker dynoやone-off dynoの料金は無料になったのか。

これらの点は、近いうちに調査、検証して見たいと思います。

続きを読む "Herokuの新料金はお得なのか" »

2015年5月 7日 (木)

Heroku Github PullRequest Deploy の巻

Heroku Github PullRequest Deploy の巻

こんにちは、浅野です。

今回は、PublicBetaで復活した Github PullRequest Deployの紹介です。

簡単に3行で

  1. GithubのPullRequestに同期して自動的にHerokuアプリが作られます
  2. 設定が必要なapp.jsonを母体アプリから生成するウィザードが用意されました
  3. 親アプリの環境変数の値コピーができるようになりました

実際に設定を行って使ってみた手順、は次回のポストで紹介します。

Github PullRequest Deploy とは

Herokuアプリケーションと同期させたGithubリポジトリへプルリクエストが送られた時に、 そのプルリクエストの内容のHerokuアプリケーションが自動的に作られる仕組みで、下記のような特徴があります。

  • HerokuアプリケーションはPullRequest単位で自動的に作られます(親アプリ名がhogeだった場合、#1のPullRequestで作られるアプリ名はhoge-pr-1)
  • そのHerokuアプリケーションのライフサイクルはPullRequestのライフサイクルと自動で同期します。
    • PullRequestが作られた時にHerokuアプリケーションも作られます
    • PullRequestが更新された時(コードが追加でPushされた時)にHerokuアプリケーションも更新されます
    • PullReqeustがマージされた時にHerokuアプリケーションも消滅します

何が嬉しいの?

  • PullRequestの変更点を確認する時に、動く環境を作るのが省力化できます
    • これまでは自分でブランチをチェックアウトして、ローカルで動かすとか・Herokuにデプロイ、などの対応だった
  • 動的テスト(Seleniumを使ったWebUIテスト、Vaddyのような脆弱性スキャン、お客様側の受け入れテスト)を実行しやすくなる

app.jsonの生成ウィザード

PullRequestDeployを使用するには、リポジトリ直下に app.json を置く必要があります。 このapp.jsonは、規模の大きなアプリになればなるほど後から作るのが面倒になります。(使用するaddonの数が増えたり、環境変数の数が増えたり) このウィザードを使用すると、母体アプリケーションで定義されている内容からアドオン・環境変数の項目が設定済みの app.json の雛形が作られ、それをカスタマイズした後にgithubリポジトリへコミットまでを行うことができます。

親アプリの環境変数の値コピー

親となるHerokuアプリケーションの環境変数の値を、PullRequestごとに生成される子Herokuアプリ―ケーションでコピーできるようになりました。 これによって、コード管理したくない秘匿情報(DBの接続情報、何らかのサービスのAPIキー等)を子Herokuアプリケーションに引き渡す事ができます。

例えば、開発環境で子HerokuアプリケーションともDBを共有するようにできるようになるので、 developブランチの内容をデプロイした親Herokuアプリケーションで、特定のデータの組み合わせで発生するバグが そのバグ修正を実施したPullRequestのブランチをデプロイした子Herokuアプリケーションで解消されている、が簡単に確認できるようになります。

app.jsonの書き方

親Herokuアプリケーションから値をコピーしたい環境変数 INHERIT_THIS_CONFIG_VAR をapp.jsonの "env"で以下のように定義します。 これで親Herokuアプリケーションで定義されている値をそのまま利用できるようになります。

"env": {
    "INHERIT_THIS_CONFIG_VAR": {
      "required": true
    }
  }

次回ポストでは、これらを実際に設定して使ってみた手順をご紹介いたします。

公式の情報ソース

2015年4月30日 (木)

HerokuにMEANアプリをデプロイする

はじめまして、昨年の10月に入社した三宅です。 フロントエンドを中心に、JavaScriptを得意としています。

今回は、MEANアプリをHerokuへデプロイするまでを書いていきます。

MEANとは

MEANはWebアプリケーションを開発するためのスタック(環境)です。 以前からWebアプリの開発でよく用いられていたLAMP(Linux/Apache/MySQL/PHP)に代わる構成として、最近注目を集めています。

MEANスタックは次の技術で構成されています。
* M: MongoDB
* E: Express
* A: AngularJS
* N: Node.js

これらで構成されるMEANスタックは、
* フロントエンドからバックエンドまでJavaScriptで開発できる
* 全てのデータのやり取りをJSONフォーマットで行う
という特徴があり、アプリケーション全体をシンプルに開発することができます。

MEAN.IO

MEAN.IOは、Linnovateによるオープンソースプロジェクトで、MEANアプリを素早く構築するためのコマンドラインツールなどを提供しています。
今回は、このMEAN.IOを用いてローカルにMEANアプリを構築し、それをHerokuへデプロイしたいと思います。

MEAN.IOのインストール

まず、MEAN.IOのインストールを行います。
今回はMax OS 10.10.3で試しましたが、もちろんLinuxやWindowsでもサポートされています。
OSXではNode.js、MongoDB、gitなど、MEAN.IOの前にインストールが必要なものがあります。
MEAN.IO Documentationを参考にしてください。

MEAN.IOはnpmパッケージとして提供されており、次のコマンドでインストールします。

$ npm install -g mean-cli

この時、Node.jsのv0.10.xを必要とする旨が表示されますが、最新のNode.jsのバージョンはv0.12.2となります。
最新のv0.12.2とv0.10系の最新であるv0.10.38の両方で試してみましたが、私の環境ではどちらとも問題なく動作しました。

インストール完了後、次のコマンドでバージョンの確認ができます。

$ mean -v

このブログを書いている時点では、0.9.29でした。

MEAN.IOによるアプリケーションの作成

作業ディレクトリに移動後、次のコマンドを実行することでMEANアプリが生成されます。

$ mean init 

この操作でGithubのリポジトリからソースコードがCloneされるのですが、「--depth 1」のオプションで実行され最新のソースファイルのみローカルにコピーされます。
ローカル環境で動作させるだけなら特に問題ないのですが、Heorkuにデプロイする際にはリポジトリの全てのデータをcloneしておく必要があります。
生成されたアプリケーションのルートディレクトリで次のコマンドを入力することで、全てのデータを取得することができます。

$ git fetch --unshallow

生成されたアプリケーションを、ローカルで動かしてみます。
アプリケーションのルートディレクトリに移動して依存するパッケージをインストールして、タスクを実行します。

$ npm install
$ gulp

localhost:3000でアプリケーションが起動します。
アプリケーションにはユーザ管理の機能も用意されており、ブラウザからユーザの登録を行うと、ローカルのMongoDBにドキュメントが保存されることを確認することができます。

MEANアプリのHerokuへのデプロイ

続いて、MEAN.IOによって生成されたアプリをHerokuへデプロイします。

アプリケーションのルートディレクトリで次のコマンドを入力し、Herokuアプリを作ります。

$ heroku apps:create 

次に、作成したHerokuアプリにMongoDBのアドオンを追加します。MongoDBのアドオンはいくつかありますが、今回はMongoLabを利用しました。

$ heroku addons:add mongolab:sandbox

configにMongoDBへのパスがMONGOLAB_URIとして登録されるので、Herokuにデプロイした際にそのDBを利用できるように設定ファイルを更新します。
config/env/production.jsのdbを次のように変更します。

db: process.env.MONGOLAB_URI

続いて、ビルドパックの設定と、Herokuの環境変数の設定を行います。

$ heroku config:add BUILDPACK_URL=https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.git
$ heroku config:set NODE_ENV=production

いよいよHerokuへのデプロイです。変更をコミットし、HerokuのGitリポジトリにpushします。

以上で、Heroku上でMEANアプリを動かすことができます。

実際のサービスを構築するにあたっては、考えなければいけないことはいろいろとありますが、素早くMEANアプリを試してみたいという場合にはMEAN.IOは非常に強力です。
また、一からMEANアプリを開発する場合にも生成されるアプリケーションの構成は非常に参考になるかと思います。
この記事を読んで、もしMEANに興味を持たれましたら、ぜひMEAN.IO + Herokuを試してみてください。

続きを読む "HerokuにMEANアプリをデプロイする" »

2015年4月22日 (水)

なかやまがゆくHeroku本社への道 no.1

はじめまして。なかやまです。昨年の12月からフレクトにお世話になってます!

今日は技術話ではないので、ゆるっとみてやってください。

Heroku_1_01

 

最近、Herokuに興味を持ちました。

普段はSalesforce開発が主な業務ですが、Herokuとつながるとすごいことできそうですよね。

Heroku_1_02

  

ちなみに好きなコマンドは、git push heroku masterです。

一番王道でかっこよい感じが、好き。

Heroku_1_03

 

Herokuを勉強するからには、いつかはHeroku本社前で記念写真を撮りたいものです。

Heroku_1_04

 

ちなみに、Heroku本社はサンフランシスコにあるようで。。

Heroku_1_05

 

これは次回のDreamforceのついでに遊びに行けそうな感じです!

ちなみに、DreamforceはSalesforceが主催する年に1回の大祭り(なイメージ)

Heroku_1_06

 

ちなみに、Dreamforceに行く方法を考えてみました。

過去のSalesforceイベントを参考に。あと会社でも過去に何人か旅立っているようなので、その人たちにも聞いてみよ~。

Heroku_1_07

 

まずは、パスポート取得からですね!

Heroku_1_08

みなさんも一緒にDreamforce目指してみませんか!

(サンフランシスコにいけるまで、このタイトルで書き続けてみようと思います。)

Heroku_1_09

おたより(なかやま直通)

おたよりまってまーす!

なかやま。

2015年4月15日 (水)

heroku-postgresqlのアップグレードをしてみました

はじめまして、昨年の12月からフレクトにお世話になっている、おっぴーです。 前職ではオンプレミスのサーバーでアプリケーションの運用をしていたので、フレクトにはいってから本格的にHerokuをさわりはじめました。 この情報見れないの!?等色々もどかしい思いをしつつ、その便利さに感動しています。

さて、今回はheroku-postgresqlのアップグレードについて書いてみたいと思います。

記事の要点を3行で。

  • heroku-postgresqlのUpgradeにはデータ移行が必要です
  • Upgradeの方法は3つあります
  • pg:copyを使った方法はdowntimeを伴います

Herokuへアプリケーションをデプロイするとheorku-postgresqlをHobby Devという無料のプランで自動追加してくれます。 このプランは無料で利用できるものの、レコード数による制限があるなど、開発環境といえども使い続けるのに不便を感じることがあります。 そんなときには、レコードの数の制限のない有償のバージョンにアップグレードをおこないたくなります。 が、その際は、Papertrailなどようにupgradeのコマンドを打つだけ!ではなく、少し手間のかかる作業、データ移行が必要になります。

下記に参考のURLをご紹介していますが、HerokuのDevCenterで紹介されているheroku-postgresqlのアップグレードの方法は全部で3つあります。 今回は、開発中には最も一般的な方法(と思われる方法)をご紹介します。

ちなみに今回、ご紹介する方法の他には、

  • followerとして新たにPostgresqlを追加してchangeoverする方法
  • pg:upgradeを利用する方法

の2つがありますが、これらの詳しい方法と使いみちなどについては、下記の参考URLでご確認ください。

pg:copyを用いたheroku-postgreqlのアップグレード方法

今回は、Hobby Devプランでつかっていたものを、レコード件数制限がないStandard-0プランにあげるという想定で流れをご紹介します。 下記では、記事を公開するために架空のアプリケーション名やWorker dyno名をコマンドで指定していますので、ご自身で試される際は適宜、ご自身の環境にあわせて実行してください。

アップグレードしたプランのheroku-postgreqlを追加する

まずはアップグレードしたプランを適用したheroku-postgresqlを追加します。 今回の場合は、hobbyプランをstandard-0プランにしたいので、standard-0プランを追加します。 なお、有償プランを利用する場合は、あらかじめ支払情報の登録が必要になります。

下記のコマンドにより、standard-0プランのheroku-postgresqlが追加されます。 なお、--version はheroku-postgresqlのversionを指定するときに利用します。現状で、指定をしなければ9.3のpostgreqlが追加されます。 また、--appは対象のアプリを指定するコマンドです。作業するherokuアカウントが複数のアプリケーションをHeroku上にデプロイしている場合は、アプリケーション名の指定を求められるのため今回もつけています。

 
heroku addons:add heroku-postgresql:standard-0 --version 9.3 --app geisya

新たにheroku-postgreqlを追加した場合、利用可能になるまで時間がかかります。 下記のようにpgのwaitコマンドを利用すると、プロビジョニングが完了すると通知してくれます。

 
heroku pg:wait --app geisya

Dynoを停止してメンテナンスモードにする

あたらしいDatabaseの準備完了したら、データ移行の準備を開始します。 まずは、データ移行中にDatabaseが更新されないようにします。

ひとまず現状のDynoの状態を確認します。 psコマンドを入力するとアプリの現状に合わせて、Dynoのプロセスが表示されます。 なお「※Prodfileの起動コマンドが表示されます※」という部分にはProcfileに定義されている起動コマンドが表示されます。

 
heroku ps --app geisya
=== geisya_worker (1X): `※Prodfileの起動コマンドが表示されます※`
gisya_worker.1: starting 2015/04/13 15:41:58 (~ 3s ago)
=== web (1X): `※Prodfileの起動コマンドが表示されます※`
web.1: up 2015/04/13 14:47:22 (~ 54m ago)
web.2: up 2015/04/13 14:47:19 (~ 54m ago)

上記を見ると、Worker Dynoが1つとWeb Dynoが2つ起動しています。 これからWorker Dynoを停止し、Web Dynoをメンテナンスモードにします。

 
heroku maintenance:on --app geisya

次に、Worker Dynoを停止しましょう。

 
heroku ps:scale gisya_worker=0 --app geisya

ちなみに、gisya_worker=0 のworker部分はProcfileで指定した名前を指定しましょう。 たとえば、hoge_workerとProcfile上で指定している場合は、上記のコマンドは、下記のように変更になります。

 
heroku ps:scale hoge_worker=0 --app geisya

もしも、Worker Dynoをご利用の場合、ご自身のProcfileの内容に従って、コマンドを変更してください。

追加したDatabaseに既存のデータをコピーする

メンテナンスモードになり、データ更新がされない状態になったら、コピー元のDatabaseのデータを新たに作成したDatabaseにコピーしましょう。 下記のコマンドは、DATABASE_URLで指定されている既存のDatabaseのデータを、新たに作成したHEROKU_POSTGRESQL_BLUEに移行すること意味します。

 
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_BLUE --app geisya

上記のようにコマンドを打つと確認のため、対象のアプリケーションの名前を入力を求められます。 アプリケーションの名前(今回の場合はgeisya)を、入力するとデータの移行が始まります。

データのコピーには1Gごとに約3分程度かかります。今回のようにhobbyプランの場合、データの容量がそもそも大きくないためすぐに完了するはずです。 今回も10秒もかからずコピーは完了しました。 完了すると「Copy completed」と表示されます。

データがちゃんとコピーされているか、ざっと見たい方は、ここでheroku-posregsqlにつなげてデータの状況を見てもよいでしょう。

ちなみに、プロダクションの環境で大容量のデータをコピーする場合は、事前にどれだかかるかテストすることをHerokuのDevCenterの記事では推奨しています。 テストの方法は、単純です。 これからご紹介する手順をDatabaseの昇格なしで実行し、処理時間を計測する、というものです。 なお、昇格についてはのちほど、ご説明します。

なお、pg:copyはpgbackupsが削除されたことに伴い、pgbackups:transferの代わりとしてheroku-postgresqlに加えられた機能です。

コピーが完了したらDatabaseを昇格させ、メンテナンスモードを解除する

すべてのデータが新しいDatabaseにコピーされたら、新しいDatabaseを昇格させましょう。 昇格とは、新しく加えたDatabaseをアプリケーションから使うように設定を切り替える行為を指します。 具体的には、Heroku上でDatabaseのURLを指定する環境変数であるDATABASE_URLの値が書き換えられます。

下記のコマンドで、新しいDatabaseが昇格し、これ以降アプリケーションからは新しいDatabaseが使われるようになります。

 
heroku pg:promote HEROKU_POSTGRESQL_BLUE --app geisya
Promoting HEROKU_POSTGRESQL_BLUE_URL to DATABASE_URL... done

ちなみに、ちゃんと昇格されているか、に関しては下記のコマンドで確認できます。

 
heroku pg:info --app geisya
=== HEROKU_POSTGRESQL_BLUE_URL (DATABASE_URL)
Plan:               Standard 0
Status:             Available
Data Size:          9.0 MB
Tables:             10
PG Version:         9.3.6
Connections:        3/120
Fork/Follow:        Available
Rollback:           earliest from 2015-04-13 05:54 UTC
Created:            2015-04-13 05:47 UTC
Maintenance:        not required
Maintenance window: Tuesdays 21:00 to Wednesdays 01:00 UTC

新しく追加した、HEROKU_POSTGRESQL_BLUE_URLの横に (DATABASE_URL)が表記されており、昇格したことが確認できます。

その後、メンテナンスモードを解除します。 まずは、Worker Dynoを元に戻します。

 
heroku ps:scale geisya_worker=1 --app geisya
Scaling dynos... done, now running geisya_worker at 1:1X.

worker=1の1の部分は、追加するDyno数です。今回は1つで動かしていたので、1を指定して元に戻しました。 ご自身の環境では、運用状況に従って、Dyno数を指定してください。

Worker Dynoのあとは、Web Dynoのメンテナンスモードを解除します。

 
heroku maintenance:off --app geisya
Disabling maintenance mode for geisya... done

上記のコマンドを実施することで、新しいDatabaseを利用した状態でアプリケーションがデプロイされた状態になります。

念のため、アプリケーションのDyno状況を見てみましょう。 ここでもpsコマンドを利用します。

 
heroku ps --app geisya
=== geisya_worker (1X): `※Prodfileの起動コマンドが表示されます※`
geisya_worker.1: up 2015/04/13 15:49:26 (~ 14s ago)
=== web (1X): `※Prodfileの起動コマンドが表示されます※`
web.1: up 2015/04/13 15:48:28 (~ 1m ago)
web.2: up 2015/04/13 15:48:27 (~ 1m ago)

Worker Dynoが1つ、Web Dynoが2つ動いていることが確認できます。 この状態ですと、Web Dynoが問題なく動いているか、という点は確認できていません。 ですので、アプリケーションのログなどをみて、動作に問題がないことを確認したら、古いheroku-postgresqlの方は削除してください。

既存Databaseの削除は、Addonから該当のheroku-postgresqlを削除することになります。 下記のように、addonsのremoveコマンドはで削除対象のheroku-postgresqlの環境変数(今回の場合は、HEROKU_POSTGRESQL_CYAN_URL)を指定します。

 
heroku addons:remove HEROKU_POSTGRESQL_CYAN_URL --app geisya

removeコマンドを入力すると、削除の実行を確認するためアプリケーション名(geisya)の入力を求められるので、入力します。 以上で、heroku-postgresqlのプランのアップグレードは完了です。

いかがでしたでしょうか。 新しいDatabaseの追加→データのコピー→Databaseの昇格という一連の流れをご理解いただけたでしょうか。 実際の本番運用では、前もってサイジングを行うはずですので、なかなかheroku-postgresqlのプランをアップグレードをすることはないかもしれませんが、開発環境では利用されることもあると思うので、ご参考になれば幸いです。

記事を読んで、ご質問やご指摘がございましたら、ぜひコメントもしくはメールでお知らせください。 これからも自分とみなさまにとって役に立ちそうな記事を作成してゆきますので、コメントをいただけますと幸いです。

参考情報

続きを読む "heroku-postgresqlのアップグレードをしてみました" »

2015年4月 9日 (木)

pgbackupsアドオンの統合

Heroku PGBackupsの統合

ご無沙汰しております、浅野です。(案件が忙しく、ブログかけてませんでした...)

今回は、PGBackupsアドオン(以下PGBackups)の heroku-postgresqlアドオン統合の話題です。

簡単に3行で

  1. 2015年3月11日から Heroku PG backups アドオンが Heroku-postgresqlアドオンに統合されました。
  2. heroku toolbelt での操作が heroku backups [subcommand] から heroku pg:backups [subcommand] に変更されています。
  3. バックアップ開始は、コマンドでバックアップスケジュールを手動設定して行う必要があります。

詳しく

公式のお知らせはコチラ
確かに、Heroku Addonsを「backup」などのキーワードで検索しても、みんなが大好きだったPG Backupsは見つかりません。

変わったこと

  1. Heroku-postgresqlアドオンを導入するだけで、Postgresqlのバックアップができるようになりました
  2. これまで使っていたheroku pgbackups [subcommand] 系のコマンドが非推奨になり、 heroku pg:backups [subcommand] のようにheroku-postgresqlアドオンのサブコマンドに変更になりました。
  3. バックアップスケジュールの設定は heroku pg:backups schedule を使って手動設定する必要があります。
  4. バックアップスケジュールは任意の時間が設定できるようになりました。

2つ目のコマンドの変更は新旧対応関係一覧に、どんなコマンドに変更されたかが記載されています。(大体は、 pgbackups:hoge が pg:backups hoge のように変わっただけですが、 pgbackups:transferpg:copy に変わっています。)

何が嬉しいの?

これまでできなかった日次バックアップの時間帯指定ができるようになりました。

コマンド操作でバックアップスケジュール設定するのは若干手間ですが、毎日x時にバックアップを実施する、のような運用要件には応えやすくなっています。

バックアップスケジュールの設定コマンド

 heroku pg:backups schedule [DATABASE_URL] --at ':00 '

パラメータ

  • DATABASE_URL ... バックアップ対象となるDATABASEのURL。 HEROKU_POSTGRES_[COLOR]_URL を指定します。
  • hour ... バックアップを実施する時間。午前9時の場合は '09'のように2桁で指定してください。
  • timezone ... バックアップを実施する時間のタイムゾーン。 PDT のような値を設定します。 PDTができるならJSTでもできるのでは?と試してみたのですが、JSTではコマンドが成功せずでした。

実行例: 日本時間 01:00 にDBバックアップを実行する

ターミナルから heroku pg:backups schedule を実行して

heroku pg:backups schedule HEROKU_POSTGRESQL_COBALT_URL --at '08:00 PDT'

以下のように出ると成功です。

Scheduled automatic daily backups at 08:00 PDT for HEROKU_POSTGRESQL_COBALT

設定されたスケジュールは pg:backups schedules で確認できます。 実行すると以下のようになります。

heroku pg:backups schedules
=== Backup Schedules
HEROKU_POSTGRESQL_COBALT_URL: daily at 8:00 (America/Los_Angeles)

まとめ

この変更によってDBのバックアップ方法が変更になりました。 本番環境でDBバックアップを取らない選択はないので、忘れずにスケジュールを設定しましょう。

続きを読む "pgbackupsアドオンの統合" »

2015年1月30日 (金)

Heroku Meetup #13 参加レポート

こんにちは、浅野です。 開催から時間が経ってしまいましたが、1月13日に開催されたHeroku Meetup#13の参加レポートです。

あの時に見たスライドどこだっけ?とならないように保存しておく目的のPOSTです。

目次

  • 本編
  • 懇親会 兼 LT大会
  • 参加された方のブログ etc.

本編

目次

  • Heroku Inc. 新入社員紹介
  • Heroku Update
  • 大企業でも、小さく始めるためにHerokuを導入してみた
  • シャトルバスとHerokuをつなぐ、IoTサービス実践事例

当日のハッシュタグは #herokujp でした。

Heroku Inc. 新入社員紹介

Herokuに、新たに日本語が母国語の方が入社された。@zundan さん。

ハワイで勤務されているとのことで、現地時間深夜にも関わらずビデオチャットでご挨拶してくださいました。

これからサポート等お世話になるかもしれません、よろしくお願いいたします。

ちなみに、一番好きなherokuコマンドは git push heroku master だそうで、相澤さんから間髪いれず「それ、gitコマンド」とツッコミが入っていました。

Heroku Update

スピーカ

Heroku Inc. 相澤さん

2014年のHerokuの状況について。

  • ビジネスとして前年比200%以上の成長をした1年だった
    • リクルートのHeroku導入事例
  • IoTのトピックでHerokuをあつかう事例が増えてきた
    • フレクトのSalesforce World Tour Tokyoでのデモサービス

なるほど、これは後半の事例紹介のイントロダクションもかねているのですね。

Heroku Updates

2014年のHerokuの機能アップデートは大体以下のようなもの。

Heroku DXでの追加以外にも色々ありますね。

Github Integration/Dropbox Sync は当日はまだベータ版でしたが、DropBox Syncは1月26日に、Github Integrationは1月28日に正式版になりましたね。

One more things

近日公開予定だけどまだオフレコ、ということで、会場にいた方だけのお楽しみ。 (1月30日時点でまだ公開されていないです)

Herokuがいっそう使いやすくなるなーと期待しています。

大企業でも、小さく始めるためにHerokuを導入してみた(仮)

スピーカ

株式会社リクルートジョブズ 奥村 命さん

メインターゲット

  • Herokuを導入したいが上司の説得が面倒な方
  • IT企業を目指すような会社はいまどきHerokuを入れているんだ、リクルートでもできるらしいという事実が欲しい方

スライド

内容

  • ターゲット
    • Herokuをプロジェクトで導入したいけれど、上司の説得が面倒な方
    • リクルートのような大きな会社でもHerokuが入れられるんだ、という事実がほしい方
  • 大きなサービスの裏側で小さなサービスを追加している
    • 50以上のアプリを作ってきた
  • アプリを作るうえで開発環境をどうするか?どうやれば楽に開発が進められる?が課題に
    • Herokuを使って大体解決したかも(他にグループ内基盤などとの比較検討を実施した)
  • Herokuはアプリケーションを動かすまでが圧倒的に速いのが良いところ
    • グループ内基盤は申請/スケール見積もり等大変
    • AWSは、インフラ周りの知識だったり、AWSのサービスに精通する必要があったり大変
    • Herokuは、git push heroku masterで作れるし、DBだなんだもAddonがよしなに計らってくれる
  • Herokuではカバーできない部分は、AWS等を使って自分たちで構築する必要がある。

Herokuを使うと本質的な価値の創造に専念できるのでとても良いです。

シャトルバスとHerokuをつなぐ、IoTサービス実践事例

スピーカ

株式会社フレクト 大橋正興

スライド

http://www.slideshare.net/masaoki_ohashi/heroku-meetup-13shuttlebusheroku

内容

弊社が Salesforce World Tour Tokyo 2014で展示していた2会場間を結ぶシャトルバス運行状況通知アプリケーションの事例紹介。

アプリの様子はこんな感じです。

  • IoTサービスをHerokuで構築した実例
  • OBD2デバイスをシャトルバスに接続して、アップロードされた情報をHerokuへ集約
  • Webシステムの開発では遭遇しない、ハードウェアとの境界で課題が多かった
    • Try & Error
    • 色々な工夫をして乗り越えた
  • 基調講演終了後がアクセスのピークで 約 5200req/min
    • この程度のアクセスはHerokuでさばける
  • それぞれ専門分野を持つ関係者が多くなる
    • 意見を言うのに萎縮してしまう
    • それを打ち破っていく。「的外れかもしれませんが...」

IoTサービスの構築には、Try & Error のサイクルをまわしやすいHerokuが有効です。

大事なこと

フレクトではHerokuエンジニアを募集しています。今回の事例に興味をもたれた方はぜひこちらへお越しくださいませw

懇親会 兼 LT大会

スペシャルゲスト?の Matz の乾杯からスタート。 会場は「空箱」というリクルートさんの社員食堂でした。夜景がとても綺麗でした(写真うまく撮れず...)

LT大会メニュー

  • Salesforceのハッカソンに参加したよ 小西俊司さん スライド
  • Project Based Learning using by PaaS よしおかひろたかさん スライド
  • 2人月の開発に105人のエンジニアが参加する世界 髙須俊宏さん
  • クラウドソーシングで作るHerokuシステム 岩崎輝之さん スライド
  • 他人が3人集まって、Herokuでアプリ公開した話 西村美沙さん スライド
  • HerokuでGroonga 須藤功平さん スライド
  • Herokuを使って学ぶ「Railsチュートリアル」の中の話 安川 要平さん スライド

参加された方のブログ etc.

会場を提供してくださったリクルートホールディングス様、登壇者の皆様、スタッフの皆様、参加された方、お疲れ様でした。

2015年1月26日 (月)

Addon のアプリ間共有

Addon のアプリ間共有

はじめまして、2015年からこのHerokuブログを担当することになりました、浅野です。 今後ともよろしくお願いいたします。

今回のポストは Heroku blog の Expanding the Power of Add-onsを試してみました。

できるようになったこと

1つのアプリが使用しているaddonを別のHerokuアプリケーションで共有できるようになりました。 複数Herokuアプリケーションでaddonが共有できると MicroServices を作りやすくなるよね、とのこと。

動作検証

早速、どんな風に操作するかをためします。

大まかな流れ

  1. addon-attachmentsプラグインのインストール
  2. アプリケーション作成
  3. Addonの追加
  4. アプリケーションのデプロイ
  5. Addonを共有するアプリケーションの作成
  6. Addon共有の設定
  7. Addonを共有するアプリケーションのデプロイ

addon-attachmentsプラグインのインストール

Addonを追加する前に、addon 共有のためのプラグインをインストールします。

$ heroku plugins:install https://github.com/heroku/heroku-addon-attachments.git

アプリケーション作成

Herokuにデプロイするアプリケーションを作ります。 今回はFlectのgithubリポジトリにある ht-java-demo を使います。

$ git clone git@github.com:flect/ht-java-demo.git
$ cd ht-java-demo
$ heroku create

1つ目のアプリの名前は hogehoge とします。

Addonの追加

アプリケーションに Addonを追加します。 定番の heroku-postgresql を使用します。 アドオンの追加は addons:create を使います。--name オプションでこのアドオンを共有する名前を設定します。 ここでは my-share-db という名前にしています。

$ heroku addons:create heroku-postgresql --name my-share-db

アプリケーションのデプロイ

hogehoge をHerokuへデプロイします。

$ git push heroku master

このプログラムは https://hogehoge.herokuapp.com/db で、DBから読み込んだ値を表示します。 デプロイしただけだと、テーブル・レコードがないので、エラーが表示されます。 テーブル・レコードを生成するにはプロジェクトのルート階層にある create.sql を実行します。

$ heroku pg:psql
hogehoge::PURPLE=> \i create.sql

これで再度、https://hogehoge.herokuapp.com/db を開くとHello test が表示されます。

ここまでは、いつも通りです。

Addonを共有するアプリケーションの作成

hogehoge で使用している共有名my-share-dbのheroku-postgresql を使用する別のアプリケーションを作ります。 このアプリも今回はht-java-demo を使います。

実際にAddonを共有したいケースはコードベースを共有しない別アプリケーションのはずなので、別のディレクトリにクローンして、Herokuアプリケーションとして初期化します。

heroku create

2つ目のアプリの名前は piyopiyo とします。

Addon共有の設定

Herokuの設定

Addonを共有するときには addons:attachを使います。第1パラメータにアドオンの共有名 --asオプションでこのアプリが参照する名前を指定します。

hogehoge の heroku-postgresql アドオン my-share-db を、 SHARED_DB という名前で参照するには以下のコマンドを実行します。

heroku addons:attach my-share-db --as SHARED_DB

これで、piyopiyoアプリには、環境変数SHARED_DB_URLが定義されて hogehogeの heroku-postgresql アドオンが提供するDBに接続できるようになります。

ソースコードの変更

ht-java-demoで接続先DBの情報を読み込んでいるのはここ なので、この"DATABASE_URL""SHARED_DB_URL"に変更します。

Addonを共有するアプリケーションのデプロイ

これはいつも通りの

$ git push heroku master

です。デプロイが正常終了したら、ブラウザでhttps://piyopiyo.herokuapp.com/dbを開きます。 hogehogeの時は、DBテーブルが存在しない、とエラーになっていたページが問題なく表示されていて、DBが共有されていることが確認できました。

まとめ

アプリ間でAddonを共有したいケースは時々あって、環境変数の値を共通の値にする等の対応をしていた部分が今回の変更でずいぶん楽になった気がします。 個人的に、 GitHub Integration の PullRequest ごとの自動デプロイでテスト用データが入ったDBを共有できるのでは、と思って調べてみたのですが、今(2015/01/26)見たら、PullReqeust毎の自動デプロイの機能が見当たらない、っていう。ベータ版機能なのでしかたないですよね...。

おまけ

addon-attachmentsプラグインをインストールして追加される addon コマンドは以下の通りでした。

addons:attach

Usage: heroku addons:attach ADDON

 attach add-on resource to an app

 --as ATTACHMENT_NAME  # (optional) name for add-on attachment
 --confirm APP_NAME    # overwrite existing add-on attachment with same name

addons:attachments

Usage: heroku addons:attachments

 list add-on attachments

 --all # list attachments across all apps in account

addons:create

Usage: heroku addons:create PLAN

 create an add-on resource

 --name NAME             # (optional) name for the resource
 --as ATTACHMENT_NAME    # (optional) name for the initial add-on attachment
 --confirm APP_NAME      # (optional) ovewrite existing config vars or existing add-on attachments

addons:destroy

Usage: heroku addons:destroy ADDON

 destroy an add-on resources

 -f, --force # allow destruction even if this in not the final attachment

addons:detach

Usage: heroku addons:detach ATTACHMENT

 detach add-on resource from an app

addons:plans

Usage: heroku addons:plans

 list all available add-on plans

 --region REGION      # specify a region for add-on plan availability

Example:

 $ heroku addons:plans --region eu
 === available
 adept-scale:battleship, corvette...
 adminium:enterprise, petproject...

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart