MyCSS

2012/12/17

テレワーク関連で登壇します、的なお知らせ はてなブックマークに追加

テレワーク1周年記念シリーズの第2回目の記事にて、「次のエントリに続く」と書いておきながら第3回目がさっぱり出ないデルデル詐欺な今日この頃ですが、皆様いかがお過ごしでしょうか?

さて、今年もあと半月を残すだけ、来年の話をすると鬼が笑うと言いますが、そんな事言っても若い人にはサッパリ通じず、ジェネレーションギャップに苦しむ事になりますから自重しておきますが、来年1月に東京と札幌で「テレワーク」に関してお話しする機会を頂きましたので、お知らせしておきたいと思います。

エンジニアサポートCROSS 2013
2013年1月18日(金)ベルサール新宿グランドにて行われる、@nifty エンジニアサポート主催のイベント、エンジニアサポートCROSS 2013にて、エッジの聞いたテッキーなセッション満載の中、

「クラウドな働き方 x 介護 〜来るべき育児と介護をどうITの力で乗り越えるか!?〜」

という、異色?のセッションで登壇します。

福岡の小室(@ayakomuro)さん、金沢の相羽さん(@aibax)、東京の竹下さん(@dynakou)、札幌の私(@dateofrock)の4名で、実際に「クラウドな働き方」で「育児」や「介護」を実践している皆さんと一緒に登壇します。

どんな話になるのか、クラウドな働き方、テレワークはこれからのワークスタイルの一つになりうるのか?そういった漠然とした疑問をお持ちの貴方と貴女、お待ちしておりますw そして、会場の皆さんと一緒にこういった問題について議論出来たら大変嬉しいです!

もちろん、このCROSSというイベント自体が相当楽しそうなので、私も一参加者として純粋に楽しみたいと思います。

LOCAL DEVELOPER DAY'13 / Infra & Security

2013/1/26(土) 札幌市生涯学習総合センター ちえりあ 6F 講堂 にて開催される、 LOCAL DEVELOPER DAY'13 / Infra & Security というイベントにて、

「エンジニアのお仕事 実際の話」

というセッションで、AWSを活用したテレワークに関してお話しようかと考えています。

北海道には、技術系コミュニティの活動を支援している一般社団法人LOCALという団体があります。有名どころではオープンソースカンファレンスHokkaidoなんかを運営されているのですが、今回のイベントでは実際に現場に立っている人に話をしてもらいたい、と言う有り難いオファーを頂戴致しました。そこで、

東京の
中小企業の
印刷会社の
ソフトウェアエンジニアが
AWSを全面的に活用して
札幌でリモート勤務している
という、一見わかりにくい実際のケース(つまり私w)をご紹介出来れば、と思います。

いずれにしても、まずは「テレワーク」という勤務スタイルの実際をちょっとでも知って頂ければありがたいですし、そもそも北海道(特に札幌)はこう言ったワークスタイルの受け皿として有望な地域だと言う事を実感しています。そして、クラウドはエンジニアの生き方を変える事が出来る強力なイノベーションだとも思っています。

ですので、ブログだけじゃなく、こういったリアルな場があれば微力ながらも出て行こうと思いますので、機会がありましたら是非、足をお運びくださいませ。

2012/12/02

Amazon SWF Flow Frameworkのエラー処理について はてなブックマークに追加

AWS Advent Calendar 2日目担当の@dateofrockです。初日は横浜支部の吉田さんが書いておられます。なんでもラスベガスで開催されたAWSのグローバルイベントに参加された後、シアトルのホテルから記事をアップしたとか。うらやましー。

こちらはすっかり冬景色の札幌からお送り致しますww


どうでも良い前フリ
http://www.flickr.com/photos/trasroid/3108074700/
えーと、全然関係ないですけど、サンタクロースってトナカイが引っ張るそりに乗って来ますよね。しかも、煙突から入ってきますよね。
クリスマスの季節には雪で真っ白な札幌に生まれ育った自分にとって、このサンタクロースはリアルに感じられておりました。
クリスマスが近づいても雪が少なかったりすると、そりが滑らないんじゃないか?とマジで心配したり、自宅の煙突はきちんと掃除されているか気になったり...(笑)

神奈川に住んで、東京で仕事を20年やってきましたけど、関東のクリスマスって雪も降らないし空っ風ピュ〜だから、子供達は皆どう思っているのか、長年の疑問でしたww

うちの息子もいったいどう思っていたのか・・?彼が大人になったら聞いてみたいと思います(笑)


ネタはSWFです
さて、このAWS Advent Calendarは執筆陣が豪華なので、このメンツの中でいったい何を書けば良いのやら、結構悩みました。JAWS-UG札幌支部から代表?として書くからには、あまり下手な事はかけないし、さらに日程をAWSの荒木さんに譲って頂いたので、これはガッツリ「ディープな話題」で行くしか無いとwww

先日のラスベガスで日本初のCDP(クラウドデザインパターン)を世界に対して発信されたAWSの片山さんが、すでにスベってるタイトルでSWFを取り上げるらしいのですが、楽しく正確な記事はそちらを見て頂くとして、私は以前書いたFlow Frameworkをさらに掘り下げることをやってみたいと思います。

なので、前回の記事を読んでいない方はそちらを先に読んでください!じゃないと、今から書く記事の意味が分からないと思いますwww

あと、コードはgithubに置いてありますので、そちらもどうぞ!

失敗を恐れるべからず
SWFで処理するワークフローはこのような感じでした。
  1. だれかがS3へ画像をアップロードする
  2. S3から画像をダウンロードする
  3. モノクロに変換する
  4. 処理完了をメールでお知らせする
これを見ると、危険な場所が沢山ありますよね。例えば、ファイルをアップロード・ダウンロードする訳ですから、ネットワーク障害などで失敗する可能性もあります。また、画像変換処理も危険な香りがしますよね。

ワークフローの途中で処理に失敗した場合、その先の処理は当然出来ないのできちんとワークフローを中断させる必要があります。
また、処理が失敗した事をログに書いたり、管理者にお知らせしたくなってますよね?

こういう面倒な事をスッキリ実現出来るクラスがFlow Frameworkに用意されています。では実際のコードを書いてみましょう。


話を簡単にする為に、S3からのアップロード、ダウンロードに失敗する事を想定してみます。もとのActivityのコードはこんな感じでした。 これらのメソッドに対して、きちんと例外をスローするように変更しましょう。


想定されるエラーを分析すべし!
もともとAWS SDKではAPIの呼び出しでエラーが発生した場合、AmazonClientExceptionのサブクラスが投げられます。これはRuntimeExceptionを継承したクラスなので、try/catch節を書かなくて済む、という利点がありますが、ついつい忘れがちなので注意が必要です。また、実装クラスの中ではローカルにテンポラリファイル作ったり、ストリームを読み書きしている部分があります。これもIOExceptionが投げられる可能性があります。

この二種類の例外は性質が全く異なるものですので、一緒くたにせずにきちんと分けて処理する事にします。その為に、オレオレExceptionを定義しておきます。(これが後で効いてきますよ!


この例外をスローするように、アクティビティの実装を改良してみましょう。



エラーは謙虚に受け止めた上で、雲になげてしまえ!
さて、WorkflowImplの方ですが、普通に考えたらスローされる例外をJavaのtry/catch/finally節で処理するでしょう。そのようなコードは一見問題なさそうに見えますが、忘れちゃならないのが「非同期実行される」という事実です。各アクティビティをわざわざメソッドに切り出して、@Asynchronousアノテーションを付けている事を忘れないでくださいw


SDKではTryCatchFinallyクラスが用意されています。実装のやり方は簡単。Javaのtry/catch/finally節を書くのと同じ要領です。


doCatch()の中では、ログを書いて、管理者にメールを送って、例外を再スローしています。
doFinally()の中では今回は特に何もしていませんが、後始末などが必要であればここで行います。

ちなみに、スローされた例外を握りつぶしてしまう(再スローしない)と、SWFから見た場合そのアクティビティの実行がうまく行ったと判断されてしまいます。(タイムアウトなどを除いて)

例えば、アップロードに失敗したのに、ダウンロードがうまく行くはずがありませんが、前段のアクティビティがエラーになってしまった、という事実をSWFが把握出来れば、次のアクティビティの実行をきちんとキャンセルしてくれます。ですので、我々は例外に対して何も心配する必要はありません。

起きてしまったエラーはそれはそれとして心の中で事実として受け止め、大いに反省し、次のステップへの大いなる啓示として前向きにとらえた上で、えいやっ!とその例外をもう一度クラウドの中に放り投げましょう。

心広きSWFは、その邪悪なワークフローをしっかりと止める事が出来ます。



失敗したって、もう一度やってみればイイじゃないか。
さて、例外処理が出来て一安心ですが、実際に問題が起きた時に、そのリカバリーを誰がするのか?という事になります。SWFにはRe-Run(ワークフローの再実行)という機能があるので、それを手動(やそれに近い方法)で行う事も可能ですけど、今イチあか抜けないですよね。そういう貴方にFlow Frameworkが提供するのは、Exponential Retryです。つまり、自動リトライ機能です。早速これを実装してみましょう。

Exponential Retryでは、「何秒後にリトライを開始して、それを何回やるか」を設定します。例えば以下のような事が簡単に実現出来ます。
  1. アクティビティが失敗したら、5秒後にリトライ
  2. 1回目のリトライに失敗したら、10秒後にリトライ
  3. 2回目のリトライも失敗したら、今度は20秒後にリトライ
  4. 3回リトライしてもダメだったら、そのワークフローは終了
リトライの間隔はExponential(指数的)に倍増します。 実装は非常に簡単。@ExponentialRetryアノテーションを自動リトライさせたいメソッドに加えるだけです。ここでは例として、S3Activitiesのdownload()メソッドに自動リトライをかけてみましょう。


簡単すぎて、このスゴさが伝わらないんじゃないか?と若干心配ではありますが(笑)、ここで一旦立ち止まって、深呼吸をして、胸に手を当てて、本当にコレで良いのかよ〜く考えてみてください。


・・・
・・・
・・・



オレはこんなにもSWFに頼っていいのか・・・いくらクラウドが無限にスケールする、って言っても、何でもかんでもリトライさせるのは賢くないよね・・・


賢くリトライするべし
download()の実装で考えられる例外は、大きく分けて二つあります。
  1. S3のAPIエラー
  2. ローカルファイルシステムのI/Oエラー
2番目の原因がディスク障害だったりすると、これはどう考えてもリトライさせない方が良いですよね。その場合は、S3のAPI例外がスローされた時だけリトライする、という設定をしましょう。exceptionsToRetryという属性を追加します。


S3の例外は、先ほど作ったMyS3Exceptionです。オレオレExceptionをあえて作った理由はここにあります。「リトライするかしないか」と言う事を切り分けたかったからなんです。「あとで効いてきますよ!」というのは、ここの事です。

ちなみに、@ExponentialRetryアノテーションでは粒度が大きすぎる!なんて言う場合は、RetryDecoratorなんてのもあります。これはワークフローの実装の中で、Activityクライアントのリトライポリシーを動的制御したい、なんて時に有用そうです。 さらには、AsyncRetryingExecutorなんていうExecutorもあるようです。

え〜、両方とも使った事無いので、「ある」という事実だけお伝えし、コメントは控えておきますwwww

と言う訳で、複雑になりがちで、かつ信頼性の高いリトライ機能を組み込むのは非常に大変ですが、Flow Frameworkはこのように非常に簡単に組み込む事が可能です。


まとめ
以上、簡単にまとめてみましたが、自前でコレと同じ事を実装するとえらい大変な事になる事は皆さんお分かりでしょう。Flow Frameworkはこのように非常に実践的で、しかも簡単に作れるようになっています。

でも、一点、言っておきたいのが、設計をきちんとしておかなければ、このような有用な機能が全然活かせない、という点です。ここはある意味非常に難しい(笑)インターフェースをきちんと定義しておかないと、あとで「なまらわやくちゃ」になるので頑張りどころです。

これに関しては、中の人の名言がありますので、最後に引用させていただいて、JAWS-UG仙台の小泉さんにバトンを渡したいと思います!




2012/11/01

札幌という街に一年暮らしてみて はてなブックマークに追加

おかげさまで、本日でテレワーク開始から丸一年が経ちました。

これも、理解していただいた弊社の経営陣、協力して頂いた弊社スタッフ、暖かく受け入れてくれた札幌の方々、そして何よりも不慣れな北の大地で全く新しい生活を共に歩んでくれた妻と息子のおかげです。

とにかく感謝です。ありがとう!!

感謝の気持ちを込めて、ご近所の美しい風景をお裾分けしますww。

仕事は相変わらずキチキチな感じなんですけど、最近はこちらに来てから知り合った人達と仲良くさせて頂く事も多くなり、徐々に札幌人(?)として自覚が芽生えてきましたw 

そんなわけで、一年と言う節目もあり、ここしばらく北海道や札幌に関して感じている事を、つらつらと書いてみたいと思います。


20年の時を超えて
札幌時計台 posted by (C)まっちゃん☆大阪
札幌は大都市だけど、自然がイッパイで食べ物がおいしくて人が優しくて…などと良く賞賛されます。 

私は20年振りに札幌人に戻って、一年過ごしてみて、本当にしみじみそう思います。(自然がイッパイってのは若干疑問で、都心や住宅街なんかはそれほど緑が多いとは思えないです。勿論郊外に出ればフツーに原生林がありますけれど。)

20年前と最も違うと感じる点は、都市の規模が大きくなった事かなぁ。札幌にプロ野球チームがあって、しかもリーグ優勝して今まさに日本シリーズで戦っていて、北海道が盛り上がっている様子を見ると、野球に全く興味がない自分でも(笑)単純にいいなぁ、と思います。

それに、通勤ラッシュも結構なものになりました。(自分は通勤してないけど)

とはいえ、東海道や京浜東北で乗車率200%な通勤をしていた身からすると、
「そこ、詰めればもっと入るよ」
とは思いますけどwww

あともう一点、やはり「東京との時差が無くなった事」でしょうか。まさしく物流・交通網とインターネットの発達のおかげだと思いますが、弊害として地方都市の均一化も感じます。

郊外に行けば、どこも同じようなショッピングセンターがあって、同じようなテナントが入っている... これは北海道に限らず、日本国内、ひいては世界的にも同じ傾向かもしれないですが...


地元愛がスゴい
私の札幌時代の友人は、首都圏に就職した人間も全て北海道に帰ってきました。私が一番最後です。 この一年間でお会いした方々の中にも、結構な確率でUターン経験者がいます。また、北海道何らかの目的をもって(別に仕事に限らない、というのがポイントかも)別の街から移住してきた方も少なからずいらっしゃるようです。

みなさんに共通して言える事は、北海道、もしくは札幌が大好きなんですね。地元が好きなので、逆に北海道から出たくない、という人もチラホラ... 北海道生まれ、北海道育ちな純粋な道産子も、みな北海道が好きなんです。

こんなに沢山雪が降って、なんまらシバレルにも関わらず(笑)。


二ヶ月に一度、「北海道の楽しい100人」というイベントが札幌で開催されてます。これは毎回様々なジャンルの人達が、思い思いに自分の取り組みや経験をスピーチして、それをみんなでひたすら聞いて、カオスな懇親会(前回は90名参加で、居酒屋のビールが無くなったとかw)になだれ込むというとんでもなく楽しいイベントなのですが、皆さんの地元愛もスゴい。毎回感心しながらお話を聞いているのですが、北海道と言う土地は昔から開拓の地で、その精神は変わっていないのかなぁ、なんて思ったりもします。


Video streaming by Ustream


思うに、住んでいる人達が地元に愛着を持っていて、かつ他の地域からも憧れられる地域ってのは、なかなか無いのでは?と思います。これって本当に素敵な事だし、大切にしていかなければならない事だなぁ、と思います。


薄いけど濃厚
トーキョー時代、IT系のイベントや勉強会なんかに顔を出すと、スゴい人達がゴロゴロいて、とても刺激を受けたり、逆に自分の力の無さに凹んだりしました。これはこれで大変貴重な経験だったし、そういう経験があったからこそ今の自分があると思います。自分に取っては絶対に必要なステップだった事は間違いないです。

今、札幌で暮らしてみて、同様なイベントや勉強会に顔を出してみると、さすが札幌、スゴい人達が沢山います。 ただ... なんと言いますか、東京の雰囲気とはちょっと違うんです。

言うなれば、
「薄いけど濃厚」
なんです(笑)

トーキョーは絶対的に人の数が多い事もあって、人が集まると自然と特化された集団になりがちな印象です。でも、そこで交わされる情報はとても密度が高いし、ハイレベル。さらに量も多いです。(ま、ノイズも多いんだけどw)

札幌は大都市と言えども、トーキョーから比べれば相当小さいから、数では絶対に負けます。だから、ぱっと見「薄い」 です。でも、中に入ってみると、交わされる情報レベルは薄いなんて事は全くなく、それなりに「濃厚」です。

まさしく札幌の醤油ラーメンのように、見た目スッキリ醤油スープだけども、味わうと実に濃厚、でも後味スッキリみたいなwwwww(札幌は味噌ラーメンだったか??)



しょうゆラーメン!
しょうゆラーメン! posted by (C)snakecats

首都圏ではこの手のイベントや勉強会はたくさんあって、参加出来る機会が多くあるのですが、やはり札幌では限られてしまいます。でも、その分自然と集まるメンバーが凝縮されて「コユく」なるのかな?

でも、コミュニティの雰囲気がいい意味で「ユルい」ので、閉鎖的な感じはあまりしません。これも開拓時代から引き継がれてきた精神ですかね(笑)?これは、外部から新しく入ってきた人間にとって、とても優しい雰囲気があります。


やはり地元愛に帰結する
トーキョーの経験を持ち帰ってきた人達も多くて、それらを
「愛する地元に還元しよう」
という意思のある人も多い印象です。


やはり、地元愛最強ですねw



2012/10/26

テレワークの様子 その2 ~ Skypeを使い倒す方法 はてなブックマークに追加

テレワーク1周年記念シリーズ、その1に引き続き、その2です(笑)

このエントリでは、テレワークの一番の難問、コミュニケーションについて取り上げてみたいと思います。
そして今回も、なるべくITの専門用語は使わずに頑張って書いてみたいと思いますw

テレワークするためにやった事
経緯に関しては、旅立つ前に書いたエントリにあります。ようするに、テレワークという形態で仕事をする環境がすべて整っている状態で、あとは技術的な事とは無関係の事をどうするのか?という事でした。一番の大きな問題はコミュニケーションの問題です。

双方の体感が大事
まずは色々言う前に、一度やってみて自分も会社側も「体感」してみよう、という事をやりました。

夏の比較的忙しくない時期を選んで、一週間「在宅勤務」を行い、打ち合わせや定例会議なども出社しているのと同じタイムスケジュールで実際にやってみました。
そこで、お互いに問題になりそうな点があれば、そこをどうするか?という点で話し合おうという事だったのですが・・・実際にやってみると拍子抜けするくらい「フツーに」仕事が出来てしまい、あまり指摘する点も出ずに終わってしまいました(笑)

・・・ただ、これには一つ、理由がありそうです。

10年一緒に仕事をしてきた仲間だから
私は今の会社に入社して10年以上になります。その間、ほぼ同じメンバーで仕事をやり続けてきたので、ある意味お互いの事が分かっているから、という点は大きいかもしれません。やはり、一度も顔を実際に付き合わせていないメンバーとテレワークでやれるかどうかは、その人次第な所もありそうです。

ただ、間違いなく言える事は、ある程度の信頼関係をもった人間同士であれば、SkypeなどのTV会議ツールを組み合わせれば、想像よりもスムーズに協調して仕事が出来る、という点です。
こういったネットの便利なサービスは世の中に沢山ありますし、無料で試せるものもありますから、興味のある方は一度「体感」されてはいかがでしょうか?きっと、考え方が変わると思います。

出社しているのと同じような感覚を持つ
前の記事にも書いた通り、勤務時間中は常にSkypeをONにしています。たとえ地理的にはなれていたとしても、用事があればすぐに私にコンタクト出来るように(その逆も)するためです。これは、会社から見ると「コイツは一応仕事の席に着いている」と言う事を確認出来る安心材料?にもなります。

やはり、仕事を円滑に進めるためには、連絡がすぐに取れないといけません。通常であれば「電話」ということになるでしょうけれども、相手の顔が見えるSkypeは、向こうの「空気」も伝わってきますので、事務的になりがちな「電話」とは全然違う会話をする事が出来ます。

例えば、相手の後ろを別の部署の人間が横切ったりすると、
「あ、どうも。こんにちは。おつかれさまです。」
的な、まるでオフィスですれ違ったような感覚で極自然に話しかけられます。

また、言葉だけではなかなか伝わらない場合、その場でノート型ホワイトボード NUboardに図を書いてカメラに映したり、こちらのパソコンの画面を映して状況を説明したりと、リアルに顔を突き合わせている感覚で打ち合わせをする事が可能です。

ツールの選択
コミュニケーションのツールとしては、昔ながらのEメール、というのもあります。ですが、送受信のタイミングによっては「行き違い」になってしまいがちなので、コミュニケーション、というよりも、むしろ連絡記録を残しておくため、位にとらえておいた方が良いでしょう。

また逆に、YammeryouRoomChatworkなどのイマドキの便利ツールは、使うのにある程度学習が必要なため、人によっては嫌がられます。(私個人的には使いたかったのですが…)

ですので、ツールの選定は
「誰でも分かる」
というのを基準にしました。

SkypeはTV電話なので、誰でも理解出来ます。ただ、各個人のパソコンにセットアップする、というのは敷居が高かったので、会社に余っているノートパソコンをSkype専用機としました。

このパソコンはタイマーをかけており、午前9時に自動で電源が入ってSkypeが自動で立ち上がるようにしてあります。また、午後8時に自動で電源が切れるようになっています。
結構原始的な事をやっていますが、こうすれば部内の人間は誰でもSkypeを使えますし、会議ではそのSkypeマシンの周りに人が集まる形で行うと、遠隔の人間も会議に参加している感じが出ます。

まぁ、向こうから見れば、私は「パソコンの中から出てくる人」なんですけどね(笑)

報連相
社会人の基本中の基本は「報連相」と良く言われます。なんだかんだ言って、とても大事な事です。

今まで述べた通り、「連」に関しては、このようなツールを駆使して行う事が出来ます。
では、残る「報」「相」はどうしているか?と言う事ですが、まず「報」に関しては本社勤務をしていた頃と全く分かっていません。理由は社内のシステムを引き続きテレワークでも使い続けることが出来るからです。(※ソフト開発の仕事に関する社内システムは、3.11を契機に全てクラウド上に集約しました。)

例えば、仕事の進捗状況は「社内ブログ」に毎日書きます。
また、専門的な実際のプロジェクトの進捗管理などは、RedMineというオープンソースのツールを社内システムに入れて、部内の人間がいつでも見られるようにセットしてあります。
その他、情報共有の為のWiki(PukiWiki)、プログラムのデータを関係者で共有しつつ、管理するツール(Subversion)などを、TPOに応じて使い分けます。

これらの作業は本社勤務をしていた頃と全く変わらず、テレワークになったからと言って特段変わる事がありませんでした。

残る「相」ですが、これは相の中身にもよるのですが(笑)、よっぽどな事が無い限りはSkypeで済ませてしまいます。

例えば、上司と私とでなにか話をしたい場合、本社側で共有スペースでの会話がしにくいような内容の場合は、上司がSkypeが起動するノートパソコンを会議室に持ち込んでやります。

一見変な感じにも見えますが、よく考えればこの状況は、上司と私が会議室で話すのと同じ事です。実際話をしている当人同士は、変な感じはしません。

こんな感じなので、むしろ会社からは「本社に来なくても良い」と言われています(笑)

お互いの理解が必要
コミュニケーションは相手の理解があってこそ成立するものなので、こちらが良いというだけではダメです。また、使うツールによってどちらかがストレスを感じるようなものは避けるべきです。ですので、導入する際は実際に双方で試してみることがとても重要かと思います。(次のエントリに続く…)

2012/10/23

テレワークの様子 その1 はてなブックマークに追加

今、札幌は紅葉真っ盛りで、今日辺りから雪虫が舞い始めました。札幌に移住してきてから1年が経ちます。早かったなぁ…

自分の仕事は一般的に言うとIT系です。ですが、テレワークは業種に関係なく、これからのワークスタイルの一つになると思いますので、なるべくITの専門用語を使わずに、一般の方々になるべく分かりやすいように書いてみたいと思います。

こういう事をやっている人間がいるんだ、と言う事を知って頂いて、これから地方に行こうと思っている世のお父さん、お母さん達の話のネタにでもなれば幸いですw


まずは職場の写真を公開します
ご近所さんが若干映り込んでいるのでアレですけどw、とても居心地の良い仕事場なので公開しちゃいますねw

自宅が山の上ということもあり、一番眺めの良い、北海道の四季を感じられる部屋を仕事部屋にしています。

ちなみにこのテーブルは、DIYで自作しました。幅120cmと180cmの板を買ってきて、1x4のSPF材で幕板を、2x2の角材で足を作ってくっつけました。制作期間は2日。費用は8,000円程です。見た目アンティークな感じを狙ったのですが、素人な味が出ていていい感じになりましたw


こちらは窓から見える景色です。ここだけ見ると、いったいどこに住んでるんだ?って感じですけど、間違いなく人口190万人の札幌市です(笑)



今は紅葉シーズンなので、こんな感じの色になりました。

近くにかなり交通量の多い国道が走っているのですが、少し引っ込んだ所にあるので車の音は殆ど気になりません。ヤマガラ、ヒガラ、ゴジュウカラなどの鳥の声は良く聞こえます。(あとカラスもねw)
あと動物系はキタキツネがデフォルトでしょうか。夏にはこの山でヒグマが目撃されたそうです。普通に熊出没注意の看板が立っておりますw

自宅は古い借家です。ざっくり言って家賃は逗子に住んでいた頃の半額、広さ4倍+庭付きになりましたw


何の仕事をやっているのか?
私は東京の印刷会社のソフトウェアエンジニアです。Webサービスの企画、開発、運用をやっています。弊社のサービスであるMyBooks.jpだったり、法人向け名刺受発注サービスだったり、色々です。
要するに、コンピューターのお仕事している人です。

典型的な一日の例

8:00〜9:00 朝の用事
9:00〜12:00 午前中のお仕事
12:00〜13:00 昼休み
13:00〜18:00 午後のお仕事
18:00〜 夕食

わざわざ書くのもバカバカしい感じですかね?コレww

要するに、東京オフィスに合わせた時間帯でこちらも動いています。

※とはいえ、東京はコアタイムが10時〜なので若干時差があります(苦笑)



あえて特筆するとすれば、謎の「朝の用事」という枠。これは「庭掃除」だったり「畑仕事」だったり「雪かき」だったり、いわゆる「家のお仕事」になります。
あえてコレを書いたのは、東京の会社に「出勤」していた頃は全く出来なかったからですw まぁ、頑張れば出来たんでしょうけれども、そもそも通勤片道2時間弱でしたので、そんな気力も起きなかったというのが正直な所です。

今では時間に余裕ができました。なので、体力と心の余裕も出てきて、「家事」をする事も無理なく出来るようになったという事です。

一応タイムスケジュールはこんな感じですが、実際はもっとフレキシブルです。例えば、家庭の事情で外出しなければならない場合も多いのですが、その際は事前に東京オフィスに連絡した上で動きます。ただし、不測の事態に備えて携帯電話とSkype(インターネットTV電話)は常時ONの状態にしておきます。

つまり、勤務時間中だ、という意識を持って動いています。

夕食時間は小学校一年生の息子に合わせて18時前後からです。その時間帯はなるべく仕事のキリをつけて、一緒に食事を取るように心がけています。最近のパターンだと、少々仕事が立て込んでいるので、夕食後仕事を再開する、というパターンが多いです。(ちょっと働き過ぎだなw)

ノマドとテレワーク
最近よく「ノマド」という言葉を耳にします。Webの仕事であれば、ノートパソコンとネットがあればどこでも仕事が出来る、と良く言われますが、自分の場合は半分当てはまって、半分当てはまりません。理由はいくつかあります。
  1. ノートパソコンでは「画面が小さい」
  2. 会議は外ではやりにくい
  3. ネットワーク(インターネット接続)が安定している事が重要
とはいえ、簡単な作業や資料を作ったりするような「物書き」の仕事の場合は、あえて外に出たりする事もあります。

引きこもり解消
今はソーシャルメディアの時代。TwitterやFacebookなどが普通に新聞に出てくる時代ですので、仕事仲間や友達とのコミュニケーションが格段に取りやすくなったのも事実です。実際、札幌に来たばかりの頃は、タイムラインに次々に流れてくる様子が首都圏のモノばかりだったので、引っ越した実感が湧かず、若干混乱気味になった事もありましたw

ですが、家族以外の人間に全く会わず、年がら年中引きこもっているのは精神的にも肉体的にも非常によろしくありません。ですので、機会があればなるべく外に出るようにしています。例えば地元で行われるIT系の勉強会に参加したり、コワーキングスペースに行って仕事をしたり、面白そうなイベントに出かけてみたり、と言った所です。

私は札幌出身ですが、20年も離れていた事もあり、地元との繋がりが殆どない状態でした。普段東京を向いて仕事をしているからこそ、地元の人達と繋がらないといけないと感じています。 ここは意識してやらないといけない所かもしれません。

ITとテレワーク
一昔前まで、このような勤務体系は考えられませんでした。技術的には出来たかもしれませんが、多額の投資が必要だったり、そもそも周辺の理解が得にくい、という事が実情だったと思います。しかし、コンピューターの性能向上に始まり、インターネット環境の充実、そして最近ではクラウドという新しいITインフラが登場してきた事により、技術的な障害は全くないと言っても過言ではありません。

会議はSkypeでこなせます。電話のように、声だけではなかなか伝わらない場の雰囲気までも共有出来るので、普通に会議に参加する事が可能です。PCの画面も相手に送る事が出来るので、パワーポイントのスライドを映しながら相手にプレゼンテーションもする事も可能です。しかも、2者の通話であれば無料です。

また、WordやExcelなど、オフィス系の文書も「Googleドキュメント」というサービスを使えば、インターネット上で文書を開いて編集する事も可能です。しかも、複数の人間とデータを共有する事が簡単に出来ます。また、データはクラウドに保管されるので、札幌で編集した文書を別のPCで東京で開く事も可能です。それに、スマホを使えば、出先で閲覧する事さえ可能です。これも、基本無料サービスです。

IT関連やその周辺の仕事をされている方に取っては当たり前の事かもしれませんが、実際にやられている方はまだ少ないように感じます。また、話としては分かるが、そういったサービスはセキュリティが心配だとか、色々な問題があると思います。(ここのテーマは重たいので、別の機会に書きます…)

いずれにしても、一般的なIT屋さんがテレワーク出来ないという理由がだんだん無くなってきたかな?と思います。(物理的なサーバーを保守する仕事などは現場での作業なので難しい場合もありますが)100%リモートでお仕事する事は難しくても、部分的なら出来るはずです。

また、IT屋さんでなくても、スマホが普及しているこの時代であれば、この辺りのサービスを活用していく事によって、出社しなくても効率よく仕事をこなす事が可能になるかもしれません。

そもそも弊社はIT屋さんではなく印刷屋です。自分は職種がエンジニアなので、社内ではチョット異端なんですが(笑)それでも会社としては極々一般的な中小の製造業です。そういう会社でも、こういったサービスを活用しつつ、きちんと決まりと仕組みを作れば、テレワークも可能だ!という事をお伝えしたいと思います。(次のエントリへ続く…


2012/10/10

コンフィグファイルを使ったElastic Beanstalkのカスタマイズをやってみた はてなブックマークに追加

【AWS発表】コンフィグファイルを使ってさらに柔軟にElastic Beanstalkをカスタマイズ可能に - Amazon Web Services ブログ

すっぴん状態のBeanstalkを使えるのなら別ですが、普通は色々パッケージを入れたり、Tomcatをカスタマイズしたりといくつか作業が発生すると思います。今までだとカスタムAMIを事前に作って置くとか、cloud-initで自動構築するとか、要するに事前の仕込みが必要だった訳ですけど、ひょっとしたら設定を書いておけば全部済むかも?と喜び勇んで早速試してみましたw

ですが、やはり一筋縄では行かなかったので、いくつかハマりポイントをメモです。 今日一日これを検証してますが、早速ハマったポイントをメモっておきます。

パッケージを自動インストール
きちんとバージョンまで書かないとうまく行かないっぽい。(yumでしか検証してないけど)


任意のコマンドを実行
アプリをdeployするたびにコマンドが走るので、それを念頭に置く必要がありそう。例えば以下の例では、二回目以降のdeployでFile existsのエラーになってしまう。


ソースアーカイブを自動解凍
モノによってはmakeしたり実行権つけたりシンボリックリンク張りたくなる。
これをやるには別途コマンドを追加しなければならない。

2012/09/20

Garage labs(ガレージラボ)さんにお邪魔してきました! はてなブックマークに追加


ここの所ブログの更新をさぼっいていてアレなんですけども、最近いろんな方に「札幌でテレワークってどうなのよ?」としょっちゅう聞かれるもので、それそろアウトプットしなきゃなと思いつつも、やはりその事に関してはあとで書くとして(ヒドい)…

今日は札幌初のコワーキングスペース、Garage labs(ガレージラボ)さんにお邪魔してきましたので、その事を書きます。

コワーキングスペースとは?
コワーキング(co-working)の定義はこちらを見て頂くとして、札幌に移住する以前からそういう場に行ってみたいな…と常に思っておりました。ですが、東京で仕事をしている間はそんな時間も取れず、札幌に昨年11月に引っ越してきたものの色々バタバタして結局今になって行く機会を持てた訳です。

自分自身、コワーキング初体験だったのですが、これが実に良い感じで、こいつはクセになりそうだとw

普段自分は在宅でシステムの設計をやったりコードを書いたり、といった作業が殆どなので、常に一人でPCに向かっています。たまに札幌の会社さんを訪問したり、東京本社に出張したりする事もありますが、今年に入ってからずっと仕事が忙しく、たまに勉強会やイベントに顔を出す位なものでほぼ「引きこもり」状態でした。

まぁ、それでも今時はFacebookやTwitterあたりで随時コミュニケーションを取れますから、一昔前に比べれば格段に良い感じだと思います。ですけど、やはりリアルに人と会って会話をするのは大切な事です。

今日は自宅の開発環境ではなく、それこそクラウド上で全て作業出来る仕事でしたので、以前から行きたかったガレージラボさんに行ってきた、という訳です。

で、どうだったのか?
すでに皆さんの紹介記事が沢山上がってますので、いまさら感満載でお送りしますけど、いやぁ、素晴らしいよ、ガレラボさんまじガレラボ!

地元な情報もきっちり手に入ります。

キッチンも完備。もちろん電子レンジはApple製(笑)

PCを繋げてプレゼンも出来る大きなモニター。
行った時はAppleTVが繋がれて、ナイスな70's Popがかかっていました。

自由本棚ということで、登録者であれば借りる事も出来るようです!寄贈もOK。
スバラシイ!!


えーと、個人的にツボに入ったのは、上の本棚の「左側」です。よく見てください…


というわけで、自炊も出来ちゃうんですねw

11時過ぎに行って、帰ったのは15時位、途中お昼の買い出しに少し出ただけで、基本的にずっと居ました。その間お仕事されに来た方は5名、全員と名刺交換させて頂き、4時間滞在して2時間位喋ってたかなw ガレージラボ責任者の赤沼さんには、ご挨拶代わりに弊社の商品のNuboardを渡しつつ(しっかり営業)、Amazonクラウドのデモをやって(しっかり営業?)きた訳ですが、カナダのエンジニア(奥様は日本人)や札幌でIT系の会社を起業されている方、iOSのエンジニア、アフィリエイターやWebデザイナーなど、まさしくいろんな方が集まって黙々とお仕事しつつ、時には会話もして実に良い雰囲気で気持ちよく過ごす事が出来ました。
※ちなみに赤沼さんは実に良いタイミングで来た人を紹介してくださるので、非常に良かったです!

ガレージラボのスゴい所
なんといっても、これだけの場を提供しているにも関わらず、初回プリンタ・コピー機の利用料金を前金として1000円払うだけで、あとは基本的に無料という太っ腹ぶり!!これには感動しました。設立の目的として、こんなものがあります。
「インターネットを利用したビジネスで北海道に雇用を生み出すグローバル企業の創出」
「札幌に雇用を1000人つくりたい」
宮崎のアラタナさんの標語を引用した、とありますけど、まさにThink Globally, Act Locallyを実践されていると言う事で、いやぁ、なんというか、カッコイイ!
※アラタナさんは昨年、JAWS-UG宮崎の勉強会で訪問しました。その時のプレゼンはこちら(ステマ)

色々と運営にはご苦労も多いかと思います。けれども、このようなワークスタイルは今後広がって行くと思いますし、なによりテレワーカーとしてはこういった場が非常にありがたいです。これからも頑張ってちょくちょく顔を出そうかな?と思いますのでよろしくお願いします!!

2012/06/20

Elastic BeanstalkでカスタムAMIのタイムゾーンを変更してハマった件 はてなブックマークに追加

Elastic Beanstalkが日本に来てから約2ヶ月経ちますが、つい出来心で本格的に使う事になりましたので色々と触っております。 一般的にはどうなのかよくわかりませんが、自分のニーズでは標準のAMIそのままでは不足ですので、自ずとカスタムAMIを作成する事になります。
  1. Beanstalk用のAMIの最新バージョンを探す
  2. 普通にEC2インスタンスとして立ち上げて、ログイン。ごにょごにょする。 
  3. AMIを保存して、AMI IDをメモっておく。 
  4. BeanstalkのEnvironmentで、自分で作ったカスタムAMIのIDの指定をする。 

これでBeanstalkでアプリが起動してめでたしめでたし、のはずですが、しばらくすると勝手にEC2が落ちますw
BeanstalkのEventログを見てみると、あれ?BeanstalkがEC2インスタンスを落としてるじゃんw 自分で立ち上げておいて落とすなんてヒドい…



Beanstalkが立ち上げてくれたEC2にログインして、http://localhost:8080 を見てみるとちゃんと生きてる。と言う事は、Tomcatの死活監視をしてらっしゃるhostmanager様がたぶん勘違いしているはず…(Elastic Beanstalkの内部的な事は、こちらの資料に詳しく書かれています。: AWSマイスターシリーズReloaded(AWS Beanstalk)  )

というわけで、ログ(/opt/elasticbeanstalk/var/log/hostmanager.log)を見てみました。すると、 というエラーが整然と並んで記録されておりますorz 


EC2のタイムゾーンを弄ったから?

ちょっとググってみたら、AWSのフォーラムに同じような質問がありました。

質問の回答には「EC2のタイムゾーンをGMT以外で使わない事をオススメする」と言う事で…あぁ、確かに思い当たる節があるw 確かにカスタムAMIを作ったとき、タイムゾーンをJSTにしたわ。 と言う訳で、GMTに戻してみたら、hostmanagerのエラーは出なくなりました。ただ、そのままだとアプリ側の日付処理がずれるので、JVMのオプションに-Duser.timezone="Asia/Tokyo"を指定しました。かっこわるいけど仕方が無い…


これ、どうなんだろ?クラウド的(?)にはタイムゾーンはGMT!ってのも分かりますが、実際は変えちゃう事も多いのでは?

ちなみに問題のhostmanagerがtimestampをパースしている部分ですが、 となってます。Time.iso8601(timestamp)をお好みのものに変更すればうまく行きそうな気もしましたが、ハマるといけないので自重しました(笑)

2012/03/15

Amazon SWFつかってみた(ながいよ) はてなブックマークに追加

それは突然にやってきた
AWS界隈ではDynamoDB祭りが開かれているまっただ中の2012年02月22日、いつものように何の前触れも無く、こっそりとManagement Consoleにタブが追加されました。Twitterで「何このタブは?」という情報が拡散してから公式ブログに発表になるという、最近おなじみのパターンですw
SWF?なにAWSでFlashが出来るの?などと一瞬思いましたが、もちろんそんなわけは無く、Simple Workflow Serviceの略でSWS、もとい、SWFでした。あれっw?

ワークフローと聞いて
自分が一番最初にイメージするのは、経費や稟議の申請処理なんかを思いつきますが、Amazon SWFはすでにNASAでも使われていると言う事で、火星への交通費の精算に使われたり、探査機が撮った膨大な写真を処理するのに使われているようです。 (一応言っておくと、前者は冗談です。)
SWFとはなんぞや?と言う事は、他でもイロイロ言われていると思いますので、詳細は割愛させて頂きます(汗)
※と言いつつ、現状AWSの公式ドキュメントくらいしか無いような気がする。

AWS Flow Framework
今回のJava SDKは気合いが入っています。DynamoDBの時もシャレオツなDataMapperがSDKに入っていて「おぉ!」と思ったけれども、SWFの場合はフレームワークが入っていて若干のけぞりました。その名もAWS Flow Frameworkです。

どれどれ、と思ってサンプルコードをダウンロードして手元のEclipseに取り込んだら、いきなりコンパイルできない。理由が、あるべきクラスが無いと言うもの。「これ、きっと中の人が入れ忘れたんじゃね(苦笑)?」などと思って調べてみたら、なんとAPT(Annotation Processing Tool)でクライアントコードが自動生成される事が判明。正直ビビりました(笑)

理解するまで結構時間かかりました(汗)
SWFはその他のAWSサービスと違って、結構複雑です。いや、API自体はシンプルなのは間違いないです。けれども、そもそもワークフローを扱うのですから、それなりに面倒な事になります。
※でも、そういうマンドクサイものを汎用的なAPIを仕立ててくるAWSはさすがです…。

まぁ、そうとはいえ、Flow Frameworkを使えばかなりスッキリしたコードが書ける事が分かりました。ただし、非同期な動きを良く理解しないと、振る舞いが意味不明な感じになります。java.util.concurrent.Future<V>を使ったプログラムを書いた事があれば、結構すんなり受け入れられるかな?とは思います。

そして、出来る事は沢山あります。自分もまだ全貌を把握しきれていません。とりあえず、最初の一発目を動かすのに結構苦労したので、自分がやってみた事を記事にしておきます。

間違い等あれば、ご指摘ください!!

サンプルワークフロー
実際に試すにあたり、こんなワークフローを考えてみました。
  1. だれかがS3へ画像をアップロードする
  2. S3から画像をダウンロードする
  3. モノクロに変換する
  4. 処理完了をメールでお知らせする
まぁ、AWSが提供しているサンプルに激しく近い感じですが、サンプルに適したよい例が思いつかなかったのでご了承くださいw

やったこと

1.まずはSWFドメインを作成する

ドメインが無い事には始まりませんので、Management Consoleから作成します。
Create a new Domainをクリックします。

以下のように設定します。Nameは何でもよいですが、プログラムから参照しますので分かりやすいものがよいでしょう。また、現状では一度登録したドメインが消せないようなので、注意が必要です。(Deprecate(廃止)する事は可能です)



2.SNSにトピックを作成する

今回はメール通知用にAmazon SNSを使う事にします。今回は新たに専用のトピックを作成してみます。Management ConsoleのSNSのタブに移動して、Create New Topicボタンをクリックします。
Topic Nameを入力。Display Nameは日本語が入らないんだなー。
 トピックが出来たら、メールの通知先を加えましょう。Create New Subscriptionをクリック。
 ProtocolにEmailを選択し、メールアドレスを入力。
Subscribeすると、AWSから確認メールが送られて来るので、Confirm subscriptionのURLをブラウザで開きます。
こんな感じで表示されればOKです。 
なお、TopicARNはプログラムから参照する必要があるので控えておきましょう。

3.Eclipseでプロジェクトを作る

Flow Frameworkを使う際、APTを使う設定をしないとどうにもなりませんので、ここはしっかりやる必要があります。

始めはMavenベースでやろうと思ったけど、aws-java-sdk-flow-build-tools.jarがリポジトリに見当たらなかったので、ここは素直にAWS Toolkit for Eclipseを使う事にしました。

Build PathにAWS SDK for Javaが入っている事を確認しましょう。


重要なのが、Annotation ProcessingがEnableになっている事です。

Eclipseのデフォルトでは.apt_generatedというディレクトリに生成されますが、自分の好きなものを指定してもよいかもしれません。ただ、srcには入れない方がよいでしょう。

4.Activityを定義する

ふぅ。ようやく本題に入る事が出来そうです(笑)

最初はワークフロー実行に必要なActivityを定義します。必要なものは以下です。
  • S3へのアップロード
  • S3からのダウンロード
  • 画像モノクロ変換
  • メール通知
ActivityはInterfaceとして定義して、@Activitiesアノテーションを加えるのが決まりです。こんな感じのソースを書きました。


5.Workflowを定義する

WorkflowもInterfaceとして定義して、@Workflowアノテーションを加えます。


6.Activityを実装する

実装の中身はそれほど重要じゃないと思うので、ここでは割愛しますね。コードはgithubに置いてありますので、ご興味あればどーぞ。


7.Workflowを実装する

Workflowの実装は独特なものがあります。実装コードはこんな感じです。



いきなりS3ActivitiesClientなどというクラスが出てきますが、これらはFlow Frameworkが自動生成したクラスになります。Workflowの実装はこのクライアントを利用するのがキモです。

このクライアントは、アクティビティで定義したメソッドにPromiseでラップした引数を加えたバージョンが多数追加されています。このPromiseですが、詳細な説明はAWSのドキュメントに譲るとして(今回はそんなのばっかりだなぁw)、ざっくり言うとメソッドの実行が非同期で行われ、結果を待たずして次のコードに移るというものです。コードは同期的に見えますが、実際は非同期な振る舞いをします。


8.ActivityWorker、WorkflowWorkerを実装する

さて、ActivityとWorkflowの準備ができましたので、これらを実際にホストするプログラムを書く必要があります。Flow Frameworkでは、ActivityWorker、WorkflowWorkerというものが用意されていますので、これらを素直に使いましょう。


それぞれ引数にドメイン名とタスクリスト名を渡しますが、ドメイン名は先ほどManagement Consoleで作ったドメイン名にします。このコードでは単にworker.start()してるだけですが、きちんと実装する際は不正な形で終了しないようにshutdownHookを引っ掛けてください。

現状のタイミングでActivityを実行するのかどうかを判断するのはWorkflowWorkerです。AWSの言う所のDeciderでしょうか?絵にするとこういうイメージかなぁ?
つ、伝わるかなぁ…っていうか、そもそもあってるかなぁ(汗)

9.ワークフローを実行するコードを書く

ようやくここまで来ました。な、長かった。こんな感じになります。


ここでもFlow Frameworkが自動生成してくれるWorkFlowExternalを使います。

10.実行してみる!

これで準備が整ったので、いざ実行してみましょう。
これには順番が大事です。初回は「8.ActivityWorker、WorkflowWorkerを実装する」で作ったActivityWorkerとWorkflowWorkerを実行します。実は、このWorkerは、ActivityとWorkflowの登録をSWFに対して自動でやってくれるんです。いちいちManagement Consoleで手動で登録する必要がありません。便利ですよ。

Workerを実行後にManagement Consoleで確認すると、ちゃんと登録されているのが分かります。

これでようやくワークフローを実行する事が出来ます。上記のWorkerを実行した状態で、「9.ワークフローを実行するコードを書く」で実装したStarter.javaを実行します。以下のようなログが起動済みの「ActivityHost」から吐き出されたら成功です!

Management Consoleで確認してみましょう。Workflow Executionsをクリックして、Execution StatusをClosedで指定します。

ちゃんとありました!
Workflow Execution IDをクリックすると、実行の履歴を見る事が出来ます。分かりやすい所で、Activityを見てみるとこんな感じです。ちゃんとワークフローが実行されているのが確認できます。


Management Consoleからは、Executionに対して「Signal」「Try-Cancel」「Terminate」「Re-Run」の操作をする事が可能です。分かりやすい所で「Re-Run」してみましょう。

すると、Execution Listに同じWorkflow Execution IDでRun ID違いのExecutionが追加されている事が分かります。ステータスはActiveです。


手元で起動しているWorkerが反応します。ActivityHostからは先ほど同じようなログが出ているのが確認できます。Management Consoleから手元のプログラムが動く感覚は、理屈は分かるとはいえ、実にミョ〜な感じですww


ワークフローが完了すると、ちゃんとCompletedになっている事が確認できます。


まとめ
というわけで、基本的な部分だけつまみ食いした感じですが、おおよその感じがつかんで頂ければ幸いです。

そして見て分かる通り、実際のアクティビティを実行するワーカーはクラウドだろうがオンプレだろうがモバイルだろうがどこにあっても良い、というのがキモだと思います。また、きちんと作れば容易にスケールする事も分かります。

AWSで非同期処理ならばSQSというのが定番ですが、二重処理を防ぐためにメッセージのステート管理を自前でやる必要があったり、SQSにポーリングするプログラムを別途仕込む必要があったりしましたが、こういった事はSWFを使うと一挙に解決されます。

DynamoDBは、SimpleDBで出来なかった事が増えてバンザイな感じでしたけども、SWFもSQSでちょっと面倒だった事が簡単にできるようになった気がします。


続くエントリはこちら:Amazon SWF Flow Frameworkのエラー処理について

2012/02/21

S3のバケット名はよく考えて命名しましょう! はてなブックマークに追加

この間のJAWS-UG札幌勉強会で話しそびれた小ネタの一つです。タイトルを一読して「そんなことわざわざブログに書かなくても(ry」というAWSエキスパートな方は読み飛ばしてくださいねw


オブジェクトのURLについておさらい
S3に保存したオブジェクトは、すべてURLがつきます。 例えば、東京のS3に「hoge」というバケットを作り、そこに「fuga.jpg」を保存したとすれば、
http://s3-ap-northeast-1.amazonaws.com/hoge/fuga.jpg
というURLが割り当てられます。 また、バケット名をサブホストとしても有効なので、
http://hoge.s3-ap-northeast-1.amazonaws.com/fuga.jpg
でもOKです。

SSLも使えるよ!
さらに、S3はSSLも使えます。つまり、上記のオブジェクトは
  • https://s3-ap-northeast-1.amazonaws.com/hoge/fuga.jpg
  • https://hoge.s3-ap-northeast-1.amazonaws.com/fuga.jpg
でも行けちゃうわけですね。スバラシイ!

ヤバいのはどれだ?
さてここで問題です。以下のURLで、ヤバいのが一つだけあります。それはどれでしょう?(すべてパブリックにしてありますので、ブラウザで確認する事が出来ます。)
  1. http://s3-ap-northeast-1.amazonaws.com/with.dot/index.html
  2. https://s3-ap-northeast-1.amazonaws.com/with.dot/index.html
  3. http://with.dot.s3-ap-northeast-1.amazonaws.com/index.html
  4. https://with.dot.s3-ap-northeast-1.amazonaws.com/index.html

正解
実際にリンク先に飛んでみると分かるのですが、問題なのは4番です。要するに、バケット名に「ピリオド(ドット)」が入ったパターンです。SSL証明書の警告が出ましたよね?



S3のSSL証明書は、ワイルドカード証明書です。でも、ピリオドが含まれていると問題になります。ちょっと考えればすぐ分かる事なのですが、S3を直に参照させてSSLも通したい場合は、バケット名に気を使わないと後で泣く事になりますので要注意です!!

CNAMEも同じ事
もうひとつのURLパターン、手持ちのドメインでS3バケットに対してCNAMEしてあげるという方法もあります。例えば、
suberu.dateofrock.com
というバケットを作成して、なおかつ
images.hoge.com CNAME images.hoge.com.s3-ap-northeast-1.amazonaws.com
としてやれば、
のように、まるで自分のサーバーのようにURLを作る事が出来ます。
ですが、これもSSLだと証明書の問題が発生します。そもそも証明書とドメイン名違いますから!
というわけで、バケット名はよく考えて命名しましょう!

2012/02/15

第5回 JAWS-UG札幌勉強会に参加してきました はてなブックマークに追加

第五回JAWS-UG札幌勉強会に参加してきました。今回は内容が濃くて、札幌はかなりレベルが高いなぁ、と思った次第です。 AWSエバンジェリスト玉川さん(@KenTamagawa)が東京からリモート参加になり、とうとうAWSはエバンジェリストまでクラウド化(笑)したのか!?という勉強会でしたw
Ustream録画アーカイブ
みなさんの発表
ちなみに今回のLTは、女性によるLady's Talkということで盛り上がったわけであります。
自分が発表したスライドはこちら
というわけで、このスライドにもあるように、今後小ネタを少しずつアップしていこうと思いますww
リンク

2012/02/06

AWS MVP "AWS Samurai" award をいただきました! はてなブックマークに追加

かなり遅ればせながらのご報告ですが… 昨年末のJAWS-UG東京勉強会にて、AWS MVP "AWS Samurai" awardの発表があり、このすばらしい賞を受賞いたしました!!!当日は札幌の自宅でしたので、お茶の間でUstreamで見ていたのですが、正直予想もしていなかったので大変驚きました〜!Twitterでコメントしたのですが、どうにも遅延があってリアルタイムとはいかなかったですww

私の他、JAWS-UG東京会長の竹下さん(@dynakou)、gumi CTOの堀内さん(@horiuchi)、cloudpackの後藤さん(@kaz_goto)と言う事で、この4人で2012年のAWSサムライという事になりますw

東京・札幌勉強会でのUstream中継やJAWS-UGの勉強会での発表、雑誌記事執筆、ブログその他での情報発信などを評価していただいたようです。ほんとうにありがたい事です。

自分はAWSの1ユーザーにすぎず、実務でもそれほど大規模に使っているわけではありません。ですが、印刷会社の開発者としてこうして北海道の地に戻って来てテレワーク出来るのも、AWSをはじめとしたクラウドがあったからです。これからも、この経験を皆さんにシェアできたらいいなぁ、と思っています。

本当にありがとうございました!!

2012/02/02

Amazon SimpleDBのJava版データマッパーを作り始めました はてなブックマークに追加

Amazon SimpleDBのJava版データマッパーを作り始めました。 MavenのオレオレリポジトリをS3に作ってありますんで、ちょっと試してみたい方はpom.xmlに以下を追加してください。
なにそれ?
HibernateとかS2JDBCとか世の中に沢山あるORM的なもので、データストアをSimpleDBに特化させたものです。APIはJPAに準拠しているわけでも何でもなく、オレオレAPIです。 たとえば、 があったとして、こんなかんじです。
なぜそんなものを作ったのか?
Ruby版のSDKには、SimpleDBをデータストアにしたActiveRecordがあるんです。
これは結構ステキですね〜。 そして、最近発表になったDynamoDBでは、なんとJava版SDK内にデータマッパーを持っています。
これもかなりステキですね〜。 そんな中で、AWSの(把握しきれないくらい)数あるサービスの中でも、とりわけシンプルシリーズ(SimpleDB/S3/SQS/SNS/SES)大好き人間からみると、どうもSimpleDBのAPIが全然シンプルじゃないww かといって、JavaのSimpleDBラッパーが世の中にあるのかなぁ?と探してみると、確かにJDBCJPAのインターフェースに乗せたすごいものがありますけど、ちょっとそれはオーバースペック(というか、そういうインターフェースに無理矢理マッチさせている感が苦手…)なので、恥を忍んで書いた次第です。APIはDynamoDBのデータマッパーパクって参考にしました。
追伸
ちなみにJavaを書いたのは結構久しぶりだったので、アノテーションってどうやって定義するの?とか、そういうレベルでした(←JavaSE5から取り残されている人)
でも、リフレクションAPIをいじりだしたら異常にメンドクサイのは確かなんだけど、何だろう?この開放感はww 基本的に自分のために作っているライブラリで、まだまだ機能不足やら不具合があります。正直テストもマトモに書いていませんので、ご利用はAt your own riskでおねげーします。
さらに追伸
すでにこういうスバラシイものがありました。もっと早く気がつけば良かったよ…