2014/11/27

AWS lambdaでS3 Objectをコピーする

lambdaというか、JavaScriptの勉強的にこんなlambdaスクリプト作った。やりたかったのは、

  1. S3 BucketにObjectがPUTされる。
  2. 同じBucketに、ファイル名に"copy-"と付与して、コピーを置く。
ってだけ。

--------------
var async = require('async');
var AWS = require('aws-sdk');

var s3 = new AWS.S3();

exports.handler = function(event, context) {
  var Bucket = event.Records[0].s3.bucket.name;
  var srcKey = event.Records[0].s3.object.key;
  var dstKey = "copy-" + srcKey;

  if (srcKey.substr(0,5) ==  'copy-') {
    return;
  }

  async.waterfall([
    function download(callback) {
      console.log('download start:' + srcKey);
      s3.getObject({
        Bucket: Bucket,
        Key: srcKey
      }, function(err, data) {
           if (err) { callback(err); }
           try {
             callback(null, data);
           } catch (e) {
             callback(e);
           }
         }
      );
    },
    function upload(arg1, callback) {
      console.log('upload start:' + dstKey);
      console.log('data:' + arg1.Body);
      s3.putObject({
        Bucket: Bucket,
        Key: dstKey,
        Body: arg1.Body
      }, function(err, data) {
           if (err) { callback(err); }
           try {
             callback(null);
           } catch (e) {
             callback(e);
           }
         }
      );
    }
  ], function (err) {
    if (err) { console.log('Error:' + err); }
    console.log('all done. ');
  });
};
--------------
そしてファイルを置いたら勝手にコピーされる。


はい。

AWS lambdaで外部モジュールを使う

最近AWS lambdaをいろいろ触っていて、ネタ的なものがちゃんとできたら会社のブログに書こうと思ってるんだけど、とりあえず初歩的な動かすところまでーみたいなのはこっちに書こうと思う。

AWS lambdaではAWSマネージメントコンソール上で直接jsスクリプトを書く以外に、外部モジュールもまとめてzip化してアップロードすることができる。というのでやってみた。

スクリプトを作成するプロジェクトディレクトリを掘って、その中に移動する。
$ mkdir myfunc
$ cd myfunc
外部モジュールをプロジェクトにインストールする。
$ npm install async
そんんでスクリプトを書く。
$ vi index.js
内容はこんな感じ。
---
var async = require('async');

exports.handler = function(event, context) {
  async.series([
    function (callback) {
      console.log("one");
      callback(null, "one");
    },
    function (callback) {
      console.log("two");
      callback(null, "two");
    },
    function (callback) {
      console.log("three");
      callback(null, "three");
    }
  ], function (err, results) {
    if (err) {
        throw err;
    }
    console.log('all done. ' + results);
  });
};
---

したらば、zip化する。この時面倒臭がってプロジェクトディレクトリごとzip化すると、ファイルが見つからない(Can't find module)になっちゃうので、以下のようにファイルと外部モジュールディレクトリを指定してzip化する。
$ zip -r myfunc.zip index.js node_modules
あとはこのzipファイルをアップロードして実行したら以下のように動きます。
Logs
----
START RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f
2014-11-27T05:24:52.586Z bf1f1533-75f5-11e4-a765-67c132e1225f one
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f two
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f three
2014-11-27T05:24:52.625Z bf1f1533-75f5-11e4-a765-67c132e1225f all done. one,two,three
Process exited before completing request

END RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f
REPORT RequestId: bf1f1533-75f5-11e4-a765-67c132e1225f Duration: 220.41 ms Billed Duration: 300 ms  Memory Size: 128 MB Max Memory Used: 9 MB 

Message
-------
Process exited before completing request::

さて、次はちゃんと動くスクリプトを書こう。自宅からこの本持ってきました。


初めてのJavaScript 第2版初めてのJavaScript 第2版
Shelley Powers,武舎 広幸,武舎 るみ

オライリージャパン
売り上げランキング : 397774

Amazonで詳しく見る by AZlink

2014/11/25

初めてのnode.js

手元のMBAでとりあえずbrew installする。
$ brew install node
インストールができたことを確認。
$ node -v
v0.10.32
じゃあHello Worldしてみるか。
$ vi hello.js
console.log('Hello World');
実行。
$ node hello.js
Hello World
さて、ここからがスタートです。

2014/11/21

ここにドヤ顏があるじゃろ?(^ω^)


ImageMagickとRmagickをインストールするじゃろ?(^ω^)
$ sudo yum install ImageMagick ImageMagick-devel
$ sudo gem install rmagick
日本語フォントもインストールするじゃろ?(^ω^)
$ sudo yum install ipa-gothic-fonts
こんな感じのRubyスクリプトを書くじゃろ?(^ω^)
require "RMagick"

if ARGV[0] == nil then
puts "Error: please message."
exit
end

mess = ARGV[0]

img = Magick::ImageList.new("miyamoto.jpg")
text = Magick::Draw.new
text.annotate(img, 0, 0, 0, 60, mess) {
self.font = '/usr/share/fonts/ipa-gothic/ipag.ttf'
self.gravity = Magick::NorthWestGravity
self.pointsize = 30
self.fill = '#ff6600'
self.font_weight = Magick::BoldWeight
}
img.write('output.jpg')
実行するじゃろ?(^ω^)
$ ruby editpic.rb "EC2を使ったら負けだと思ってる"
するとこうじゃ(・ω・)

海外に行って一番大きかった経験はマイノリティを強く意識したこと

出張としてAWS re:Invent 2014に行っていた。その間の日記は本ブログに書いたので、カンファレンス自体の感想はそちらを参照。

これは僕にとって初めての海外遠征だったのだけれど、何よりも強く思ったのはマイノリティであることの辛さだった。

僕は正直なところ英語力が非常に低く、学生時代から赤点ばかりだった。今年一年iKnowで独学を続けていたけれど、結局会話力はあまり上がることが無かった。そして今回アメリカに行って、言葉が通じない、言語圏においてマイノリティであるということが、本当に辛かった。会話ができないから意思疎通ができないし、意思疎通ができないから周りの人が何を考えているのかわからなくて不安だった。気を使って優しく話しかけてくれる人もいるんだけど、その優しさに答えることができない。僕からも誰かに優しくすることができない。帰りの飛行機で乳幼児を抱えた女性に対してちょっと手助けをしたんだけれど、それもほぼ単語だけでコミュニケーションをとるしか無かった。

逆に考えてみると、僕がマイノリティじゃない世界=日本では、日本語が話せない人=日本語圏におけるマイノリティは、とても不安なんだろうと思う。そして僕の今の力では、そんな人たちの不安を取り除いたり、助けてあげることができない。英語ができないということは、単にコミュニケーションの問題だけでなく、誰か助けを求める人がいても助けられないことがある、ということだ。

僕の人生はもう半分くらい終わっちゃってるんだけど、これからはもっともっと英語を勉強して、いつか日本で困っている日本語が話せない人を助けることが出来たら良いな、と思う。


DUO 3.0DUO 3.0
鈴木 陽一

アイシーピー
売り上げランキング : 48

Amazonで詳しく見る by AZlink

2014/11/19

AWS認定SysOpsアドミニストレーター - アソシエイトレベルに合格しました

関連記事:AWS認定ソリューションアーキテクト-アソシエイトレベルに合格しました

SA合格が1 月25日なので、10ヶ月ぶりの資格取得です。総合スコアは89%。内容としてはそんなに難易度高くないんだけど、日本語が難しくて理解するのに時間がかかった。米国帰りで時差ぼけが取れず、かつ前日呑んだくれて二日酔いだったんだけど、ちゃんと合格出来てよかったです。

次はデベロッパー試験にチャレンジしたいんだけど、北海道には試験会場がないので、また東京出張の機会があったらチャレンジします。しばらくは無理だろうなぁ。早く北海道に試験会場が出来て欲しい。

ということで今夜は祝杯!といきたいところですが、今夜北海道に帰るので無理。家族の元に帰れることを一番の祝杯だと考えます。


Amazon Web Services 基礎からのネットワーク&サーバー構築Amazon Web Services 基礎からのネットワーク&サーバー構築
玉川 憲,片山 暁雄,今井 雄太

日経BP社
売り上げランキング : 7206

Amazonで詳しく見る by AZlink

2014/11/16

AWS re:Invent 2014に参加してきた(6): ラスベガス→サンフランシスコ→成田→秋葉原 #reinvent

最終日からそのまま徹夜で帰路。現地時間11/15(土) 03:15amにThe Venetianのロビーに集合。
そしてバスでマッカラン国際空港まで移動。

チェックインもセキュリティチェックも特に問題なくスルー。行きの飛行機のセキュリティチェックで2度もトラブった 教訓が生かされました。

マッカラン国際空港からサンフランシスコ国際空港へ。飛行時間は1時間半。乗った瞬間に寝て、着陸と同時に起きました。死ぬほど怠かった。

サンフランシスコ国際空港で朝食。Andalé Mexican Restaurantでタコスを食べた。$10分の価値があるかというと、うーん。空港価格?ファーストフードくらいの値段なら満足したと思う。


乗り換えの荷物はそのまま成田行き飛行機に乗せ替えられたので、特に厳しいチェックも無く搭乗。そこから実に11時間のフライト。寝ては起きて寝ては起きてを繰り返し、肩は凝るは尻は痛いは、なかなか辛かった。



そして成田空港到着。借りていたWi-Fi機器を返却、財布に$5しか入ってなかったので両替はせず。京成スカイライナーで日暮里→秋葉原へ移動。京成スカイライナーは初めて乗ったんだけど、たった40分で日暮里まで到着するなんて本当にすごい。いつも鈍行で移動してたんだけど、2時間以上かかるからなぁ。すごく楽だった。

秋葉原のビジネスホテルに到着。

そして晩御飯につじ田のつけ麺。米国にいた時からラーメンが食いたくて食いたくて仕方がなかったので、ここつじ田に行けて良かった。まじうまかった。
そして今ホテルでビール飲んでます。今日はこのまま早く寝て、明日は本社に出社します。

これにて僕のre:Invent 2014は終了。お疲れ様でした!

2014/11/15

AWS re:Invent 2014に参加してきた(5): 最終日、セッション参加、観光、そして夜遊び #reinvent

re:Invent 2014も最終日。まずは朝食。昨日のre:Playで飲みすぎて胃が重たかったんだけど、普通に食べました。フルーツがデカくなった。昨日と同じくヨーグルトに打ち込んで食いました。



そしてセッションを聞いてブログを書いた。


もう1本、LambdaのReSessionを聞いた。個人的にLambdaはかなりアツいので、node.jsを覚えた上でいろいろ試そうと思う。最後にツアー振り返りセッションを聞いて、re:Inventは終了。

この数日間をまとめるとこういうことです。
昼飯はShake-n-Burgerのクォーターパウンドダブルベーコンバーガー。


そのあとCaesars Palaceに遊びに行って、


Fashion Show Mallに行って


Walgreensで大量のお土産を買い込んだ。締めて$110。やりすぎました。でもこれで家族に喜んでもらえるなら安いもんです。おかげで両替した$170をほぼ使いきりました。


夜はRoy'sで参加者懇親ディナー。楽しかったし、料理も美味かったです。


そのあと、同僚と最後のラスベガス夜遊び。
Bellagioで噴水のショーを見て、New York, New Yorkの自由の女神を見て、Excaliburを経由してLuxorに行き、そこからタクシーでStratosphereへ。X-Scream、Insanity、Big Shotで眠気を覚まし、部屋に帰還。

そして今、11/15(土) 2:32am。これからホテルを出てマッカラン国際空港を経由してサンフランシスコ国際空港から11時間かけて成田に戻ります。そのあとは秋葉原に宿泊し、11/19(水)に札幌に帰る予定。

基本的にはもう全日程終了、って感じなんだけど、まだ帰路という気の重たくなる行程があるので、頑張ってきます...

振り返ってみると、英語圏で会話するという経験はとても良かった。ほぼ出来なかったけどね。度胸と、ポイントというか、この言葉がわかれば会話が成り立つみたいなところが感じられた。でも、今後今の僕の英語力ではまるで足りないし、例えば将来妻と海外旅行に行ったときに英語で喋ってかっこつけたいので、英会話は本格的に習おうと思う。

それにしても楽しい1週間であった。AWSの文化や考え方、先に見てるものって、日本のイベントやAWS関係者の発言や、またはWebなどの媒体でわかっているつもりだったけど、re:Inventのような場でKeynoteとして聞くと、体への染み渡り方が全然違う。グっとくる強さが違う。感動したって言っても良い。何度も言うけど、本当に楽しい1週間であった。


2014/11/14

AWS re:Invent 2014に参加してきた(4): keynote 2、またブログを書き続ける日、re:Playで遊んできた #reinvent

久しぶりに7時間ほど寝てだいぶ回復。まずは朝飯から。フルーツをヨーグルトに入れて食べると美味い、という発見をした。


そのままKeynote2で、昨日に続いてリアルタイムレポートやりました。
そしてブログを書き続けた。

昼飯はこちら。アメリカの人はサラダにオリーブオイルとバルサミコ酢をかけて食べるのが好きらしい。あとコーラはデフォルト。


夕方はPublic HouseでCertificate Receptionがあったのでそちらに。日本人が少なかったので、あまり話したことがない人たちとお話しして盛り上がりました。

そこからre:Play。DJはjack novakとskrillex。超面白かった。酔っ払った。綺麗なおねーさんに話しかけられたけど僕の英語力が無さすぎて会話が成り立たず悔しい思いをした。俺本当に帰ったら英会話習うわ。

そして部屋に戻ってきたのち、ちょっと散歩して、1時過ぎにバタンキュー。今日も楽しい1日であった。

2014/11/13

AWS re:Invent 2014に参加してきた(3): keynote 1、ブログを書き続ける日、Pub Crawlで遊んできた #reinvent

昨晩0時に寝て、なぜか4時半に目が覚めてしまい、6時半まで悶々と過ごす。7時に社長と一緒に部屋を出たらばったりJeff Barと遭遇。記念写真してもらった。
同僚と合流してイベント提供の朝食。


アメリカの朝飯はひたすらモサモサしている。口の中の水分が全部持っていかれる感じ。ヨーグルトにフルーツを入れて食べるのは美味い。

そのまま9時スタートのKeynote 1に参加、リアルタイムレポートを書きました。


そして昼飯。アメリカンジョークで「アメリカの飯は3種類の味付けしかない。甘いか、しょっぱいか、デカイかだ」ってのがあるけど、まさにその通り。だいたい肉とケーキしか食ってない。あとコーラとビール。


ここからはひたすらセッションレポートを書き続ける。


そのあとは同僚と合流し、Pub Crawlへ。最初にMadame Tussauds Las Vegasに行ってみた。いろんな有名人の人形があったのと、アベンジャーズの4Dシネマが観れた。すごく面白かった。ドリンクはフリーなのだけど1ドルのチップを渡すとお姉さんがいい笑顔してくれた。


次にTAOへ。特に写真は無し。ナイトクラブちっくで面白かった。
そのあとShake-n-Burgerでダブルベーコンチーズバーガーを食す。確かにデカイ。コーラもシネコンサイズ。ポテトはあげただけで味がなく、ケチャップをつけないと食えたもんじゃない。日本のポテトは塩味ついてるからケチャップいらないけど、こういう違いがあるんだなと思った。


そして今、部屋でBLUE MOONビールを飲みながらブログ書いてます。今日も楽しかった。明日もKeynote 2があり、セッションがあり、夜はre:Partyがあります。楽しんできます!

2014/11/12

AWS re:Invent 2014に参加してきた(2): 初日、Global APN Summit、プレミアコンサルティングパートナーになった #reinvent

7:00起床。
そのままRegistorationに行き、登録して、re:Inventジャンバーをもらって、朝飯に。
この辺は会社ブログに書いた。

とりあえず暇だったので自室に戻ってブログを書き上げ、ちょっと一人でお買い物へ。初めての一人お買い物。ちゃんとできました。とりあず"cash,please." "thank you"って言えばなんとかなるのがわかった。
その後同僚と合流し、Global APN Summitへ。内容は NDAなので秘密です(社内共有だけしました)が、サプライズとして、弊社がプレミアコンサルティングパートナーになりました。
これは事前情報が一切なしで、隣にいた社長が「はぁ?まじで?」って言ったくらいの知らなさでした。同僚4人で体の震えがくる瞬間で、なんというか、この時点で僕らのre:Inventは8割くらい終わったと思う。

ランチはカンファレンスで提供。これがまた甘くてしょっぱくてデカい。特に右上のチョコレートケーキみたいなのがクソ甘かった。タイ米のピラフとビーフシチューみたいなのはまぁまぁ。アメリカ来て特に思うんだけど、肉だろうとサラダだろうととにかく味付けが濃くて甘くて塩っぱい。これは本当に文化の違いだと思う。
その後1時間くらい寝て、APN Receptionへ。DockerのTシャツとか、 TrendmicroのT
シャツとかAnsibleのキャップとか、そういうのをもらってなかなか面白かったです。明日明後日も暇見つけてまた行こう。あ、あとビールが美味しかったです。


そのあとはツアーの人たちで集まるJapan Nightへ。たくさんの人たちとご挨拶させていただきました。本当にありがとうございました。


あとJapan Nightにあった肉やばかった。
最後に社長に連れられて、The Venetianの1階にあるNoodle Asiaへ。出汁のスープが大変に美味かった、というか、味が濃くなくて甘くなくて脂っこく無いものを久しぶりに食べた。海外で日本食を食べるのは難しいけれど中華料理があるというのは本当に助かる。

あとは寝るだけです。おやすみなさい。

2014/11/10

AWS re:Invent 2014に参加してきた(1): 新千歳発成田経由サンフランシスコ経由ラスベガス行 #reinvent

AWS re:Invent 2014に参加してきた。というか参加中です。続編は随時リリース予定。

11/10(月)、新千歳空港からジェットスターで成田空港に移動。成田空港で2万円をUSDに両替したら$170になり、なんか損した気分。全部円安のせい。



成田空港で同僚(,)と合流。Nikon D40にセットしたWi-Fiが調子悪くて、成田空港のローソンでSDカードを新調。予備を持ってこれば良かった。

手続きをしてツアー結団式が行われ、飛行機が遅延したので成田空港でビール飲みながら1本目のブログをリリース。「どこでもブログ書いてる会社の人だ」という扱いを受ける。いや、その通りです。

出国手続きは滞りなく完了。この辺まではほぼ日本と一緒。飛行機も日本語が喋れる客室乗務員さんが多くてほぼ困らず。機内食は...まぁ、美味くはないけど食えないわけじゃない。そこそこ。


時差ぼけを解消すべくとりあえず寝ようとしたんだけど、なんか眠りは浅かったな。冷房が効いてて辛かった。あと首マクラは意外と快適じゃない。無いほうが楽。こっちは朝飯。これもまぁ、うん。こんなもんだろう。


現地時間で11/10(月)の昼にサンフランシスコ空港に到着。入国審査超怖かった。


これは初めての海外で浮かれている俺。余談なんだけどアメリカのパブリックなトイレ、小便器は位置が高いし、個室は隣と下の部分が繋がってる(というか開いてる)ので、超落ち着かない。


サンフランシスコ空港からラスベガスに乗り換えだったのだけど、機材のトラブルでラスベガス行きの飛行機が遅延しまくり(13:20 -> 14:20 -> 15:15 -> 16:00 -> 16:15) 。さらに国内線のセキュリティチェックで怒られまくる。
ラスベガス(McCarran空港)に到着したのが18時くらい。この空港はとても広くて、荷物受け取りのターンテーブルまで地下鉄で移動する。

そしてバスで移動し、The Venetianに到着。なんと7000室あるそうです。北海道の過疎自治体なら丸ごと泊まれるぞおい。
部屋は全室スイートってことで。なんかすごい。女子と来たかった。社長と相部屋です。


晩飯は社長、同僚、ツアー同行のみなさんとPhil's Italian Steak Houseで20ozのTポーンステーキを食った。すごかった。こんなに肉を食ったの初めてじゃないだろうか。みなさんは途中で飽きて醤油をもらったりしていたけど、僕はアメリカンソースだけで十分食えました。僕の舌はアメリカの食事でも特に困らないらしい。


最後に部屋に戻ってシャワーを浴びてbtnq。だいぶしんどい1日(というか2日)でした。

2014/11/06

日帰り十勝の旅に行ってきた

仕事で。

まずは芽室へ。芽室といえばB級グルメとして有名な十勝芽室コーン炒飯。ファミリーとんかつの店 あかずきんで頂きました。注文したのはコーン炒飯Bセット(とんかつが乗ってる)で¥980。さすがとんかつのお店なだけに肉はもちろん美味かった。掛かっているソースは味噌です。何よりこのコーンの量な。スイートコーンをこんなに大量に食べることってそうそう無いので面白かったし、美味しかった。これはなかなか良いです。ちょっと高いかも知れないけど。


そのあと株式会社ファームノートさんのオフィスにお邪魔して、帰りは帯広駅で豚丼。帯広駅直結の豚はげ本店で、豚肉4枚で¥920。久しぶりに食べたけど、まぁ、文句無しに美味いですね。


そんな感じで日帰り強行の旅は終わりです。