>  >  > 【送料無料】 TRIWA トリワ メンズ腕時計 Nevil Ocean (ネヴィル・オーシャン) NEST113.SC010215 【RCP】 TRIWA トリワ メンズ腕時計 NEST113.SC010215 LDCF075BHGES2A 1875年から時計を改革し続けてきた腕時計メーカー ペンダント
スマートフォン用の表示で見る
スターをつけました

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です 読者をやめる 読者になる 読者になる

【送料無料】 TRIWA トリワ メンズ腕時計 Nevil Ocean (ネヴィル・オーシャン) NEST113.SC010215 【RCP】 TRIWA トリワ メンズ腕時計 NEST113.SC010215 LDCF075BHGES2A 1875年から時計を改革し続けてきた腕時計メーカー ペンダント海外通販なら

海外最新【送料無料】 TRIWA トリワ メンズ腕時計 Nevil Ocean (ネヴィル・オーシャン) NEST113.SC010215 【RCP】 TRIWA トリワ メンズ腕時計 NEST113.SC010215 LDCF075BHGES2A 1875年から時計を改革し続けてきた腕時計メーカー ペンダント

AWS Lambda のファンクションを TypeScript で作る! 入門編

今回は TypeScript シリーズ第2弾。 AWS Lambda のファンクションを TypeScript 作成する方法について。

最近、サーバーレス化、Micro Services 化の流れで、AWS Lambda を使用する機会が増えてきてるように思います。

煩わしいサーバの管理から解放されてサービスのみに注力できるのはかなり魅力的。今回は Node.js と TypeScript を使って、Lambda ファンクションを作成する方法について解説していきます。

目標は AWS Lambda を使って CloudWatch Logs (ログ) に 天気予報を出力するところまで。

天気予報の取得には お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報 を利用します。実際に取ってくるのはサンプルにある福岡県久留米の天気情報です。(http://weather.livedoor.com/forecast/webservice/json/v1?city=400040)

目次

開発環境導入

【送料無料】 TRIWA トリワ メンズ腕時計 Nevil Ocean (ネヴィル・オーシャン) NEST113.SC010215 【RCP】 TRIWA トリワ メンズ腕時計 NEST113.SC010215 LDCF075BHGES2A 1875年から時計を改革し続けてきた腕時計メーカー ペンダント

  • brewyum、apt-get で入れるもの

    • nodebrew (複数バージョンの Node.js を導入できるように)
    • yanr (npm の代替ソフト)
  • brew の場合 (Mac)

brew install nodebrew yarn
echo "PATH=$HOME/.nodebrew/current/bin" >> ~/.bashrc
  • apt-get の場合 (Ubuntuなど)
apt-get install nodebrew yarn
echo "PATH=$HOME/.nodebrew/current/bin" >> ~/.bashrc

そして、下記コマンドで Node.js 4.3 をインストールして使用するバージョンを 4.3.2 とします。

nodebrew install-binary 4.3.2
nodebrew use 4.3.2

もしここまでで何かしらのエラーがでたら、nodebrew のディレクトリがないことが原因かもしれません。 なので下記コマンドを実行してサイドnodebrew install-binary を実行し直してみてください。

mkdir -p ~/.nodebrew/src

Lambda ファンクション作成準備

Lambda プロジェクト用のディレクトリを作成する。 今回は天気予報の情報を出力する Lambda なので、weather-lambda とでもする。

mkdir weather-lambda
cd weather-lambda

その後、下記コマンドでプロジェクトの初期化を行う。

yanr init

質問事項を聞かれますが、今回は全部 Enter で OK です。

すると、下記のような package.json が生成されています。

{
 "name": "weather-lambda",
 "version": "1.0.0",
 "main": "index.js",
 "license": "MIT"
}

次節に示すパッケージのインストールを行うと、ここにプロジェクトに必要なパッケージ名などが記載されていきます。

必要なパッケージの導入

今回インストールするものは下記4種類です。

  • typescript
  • request
  • @types/node
  • @types/request

インストールの際は下記のコマンドでパッケージをインストールする。

yanr add -D typescript @types/node @types/request
yarn add request

TypeScript の設定ファイルを生成

TypeScript のコンパイラオプションを指定するために tsconfig.json を下記コマンドで作成する。

./node_modules/.bin/tsc --init

すると、下記の様な tscofnig.json が生成される。

{
 "compilerOptions": {
 "module": "commonjs",
 "target": "es5",
 "noImplicitAny": false,
 "sourceMap": false
 }
}

念のため上記のオプションの説明すると

  • module
    • モジュールコードの生成方法の指定 (“None”, “CommonJS”, “AMD”, “System”, “UMD”, “ES6”, or “ES2015”)
  • target
    • ECMAScript のバージョン(“ES3” (default), “ES5”, “ES6”/“ES2015”, “ES2016”, “ES2017” or “ESNext”. )
  • noImplicityAny
    • 暗黙的に any を使用していたらエラーを出すかどうか
  • sourceMap
    • ソースマップファイルを生成するかどうか

もっとコンパイラオプションに凝りたい方はコンパイラオプションのドキュメントを参照してみてください。

TypeScript によるファンクションの実装

実装は下記の通り。

単純に request を使ってお天気Webサービスから情報を GET してきて console.log でログに吐き出しています。 Lambda では最後に callback を呼ぶのをお忘れなく。

失敗のときは callback の第一引数にエラーを表す文字やエラーオブジェクトを、成功のときは第一引数は null で第二引数は成功のときの文字を渡します。

import * as request from 'request';
exports.handler = (event: any, context: any, callback: Function) => {
 const url: string = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040';
 request(url, (err: Error, res: request.RequestResponse, body: any) => {
 // Return if Error
 if(err || res.statusCode !== 200) { return callback(err); }
 // Parse JSON file (body)
 let jsonFile: any = JSON.parse(body);
 console.log(jsonFile.title);
 console.log(jsonFile.description);
 return callback(null, 'Success!');
 });
}

Lambda にアップロードできる形に変換

次にTypeScript のソースを JavaScript にトランスパイルします。そのときに使うのは tsc*1 コマンド。

インストールしたパッケージのうち bin があるものは ./node_modules/.bin 以下に保存されるのでそちらから実行する フェラーリ スクーデリア 時計 腕時計 グッズ Scuderia Ferrari Race Day Bracelet Watch, 44mm フェラーリ スクーデリア 時計 腕時計 グッズ Scuderia Ferrari Race Day Bracelet Watch, 44mm。カーテン【送料無料】川島セルコン オーダーカーテン(Premier) CASUAL PD1222F ◆高品質の高級オーダーカーテン&シェード 通販 激安◆遮光 防音 遮音 シャワー カーテン カフェ カーテンが豊富な品 サイズ、Aragosta/アラゴスタTYPE-E(コンフォート) ピロアッパー仕様NSX/NA1・2商品番号:H3.E1.000 【P06May16】 【送料無料】、新・国産ポケットコイルマットレスベッド【Waza】ワザ 木脚15cm SD セミダブル【代引不可】[CH] [1D] [00] ★本革アイテムをプレゼント!★、サンタイム 腕時計 SunTime Northwestern Demons Womens Stainless Steel Dress Watch サンタイム 腕時計 女性 レディース サンタイム 腕時計 SunTime、[DIXCEL] ディクセル ブレーキローター HSタイプ リア用 アウディ【A6 (C6/4F) 4.2 QUATTRO / FSI QUATTRO 4FBATS/4FBATA/4FBVJA 04/09~12/2 PR No: 1KW/2EE (Venti DISC)】 送料無料(沖縄・離島・同梱時は送料別途) 制動力と安定性を高次元で融合。

【送料無料】 TRIWA トリワ メンズ腕時計 Nevil Ocean (ネヴィル・オーシャン) NEST113.SC010215 【RCP】 TRIWA トリワ メンズ腕時計 NEST113.SC010215 LDCF075BHGES2A 1875年から時計を改革し続けてきた腕時計メーカー ペンダント専門店

ツェッペリン ZEPPELIN スペシャル エディション 100years メンズ 7678-1 【あす楽対応】【ツェッペリン】【7678-1】【ZEPPELIN Special Edition 100Years】【腕時計】【新品】EX ROBE BIG MA-1 ナノユニバース【送料無料】 【o_t】nano・universe レディース コート/ジャケット ナノユニバース EX ROBE、【送料無料】 国産大川家具 90サイドボード【132017シリーズ】 送料無料 国産大川家具 サイドボード、カーテン オーダーカーテン クラシックカーテン 東リ エルーア KSA1157~KSA1158 ソフトプリーツ加工(SL)2倍ヒダ 幅201~250cm×丈181~200cm シルキーな光沢、淡くやさしい色使い。厳密で繊細な織りの表現が上質さを感じさせます。東リのオーダーーテン、エルーア(elure)、NARDI ステアリング トヨタ ウインダム V10/20系 3/10~ FET BOSS KIT(FET ボスキット)・NARDI(ナルディ) ステアリングセット ステアリングボス BOSS〔FB536〕/ステアリング〔N202〕 トヨタ ウインダム V10/20系 3/10~ FET BOSS KIT(FET ボスキット)・NARDI(ナルディ) ステアリングセット ステアリングボス、I.T.A. アイティーエー 腕時計 メンズ 限定モデル ビー・コンパックス2.0 ロッソ1 B.COMPAX 2.0 ROSSO2 クロノグラフ 18.00.08【正規品】【送料無料】【7年延長正規保証】【楽ギフ_包装】【I.T.A. 18-00-08】【楽天BOX受取対象商品】 I.T.A. アイティーエー 腕時計 メンズ 限定モデル ビー・コンパックス2.0 ロッソ1 B.COMPAX 2.0 ROSSO2 18.00.08 正規品 送料無料! ラッピング無料!!ブリード Breed Mens Maxwell Black Leather Automatic Watch 男性 腕時計 Breed Mens Maxwell Black Leather Automatic Watch、ブランデル 1525 【特別プライス】、日本未発売多数タイメックス Expedition Analog Black Dial メンズ ウォッチ - T49933海外限定モデル多数 【世界中の時計が勢揃い】、ウェッズスポーツ/Weds Sport レブキャタライザー/REVCATALYZER RCL-S008 レガシィB4 TA-BL5 EJ20(ターボ) 5MT 200306~200605、4013692、カラフルチェスト/タンス 天然木/木目調 幅120cm 3段 (カラー:カラフル) 【日本製/完成品 送料無料! リビング、寝室、クローゼットにおすすめの収納家具 大川家具。

カーツ エンジン式オーAG400 【オーガ 掘削 アースオーガ ドリル】【おしゃれ おすすめ】 [CB99] 【送料無料】ドリル着脱は簡単、余裕のハイパワー[オーガ 掘削 アースオーガ ドリル]、フォッシル FOSSIL 腕時計 レディース 女性 Ladies 時計 人気 ランキング 女性用 オススメ、タイムワンハンドレッド 腕時計 Time100 TIME100 Fashion Multifunction Environmental Silicone Coffee Strap Sport Watch #W70048G.03A タイムワンハンドレッド 腕時計 女性 レディース タイムワンハンドレッド 腕時計 Time100 W70048G.03A。[224631] Polaroid(ポラロイド) POLAROID 639 ブラック 訳あり品(D) サングラス 眼鏡 メガネ 度付き レンズ交換、ケイブレイク ケービー・デザイヤ/両側出し/オールステン エルグランド/エルグランドライダー(ALWE50・ALE50/GAS) インターネットで愛車が変わる!全く新しいカー用品のお店です。、コーチ 時計 COACH 14502200 SPORT 1941スポーツ 腕時計 ウォッチ ピンクゴ-ルド コーチ 腕時計 COACH 2015秋冬新作、バカラ(Baccarat) エデン ペンダント(ルビー) ※BOX付 【楽ギフ_包装】【楽ギフ_メッセ】 【倉庫A】【02P27May16】 バカラ Baccarat、★★ ゲラルディーニ バッグ ショルダーバッグ GHERARDINI GH1072TP PEA GH1072TP GH1072TP PEA【型式 GH-GH1072TP-PEA】 目玉商品 新品 2016年 春夏 新作 プレ入荷 先行販売開始 母の日父の日誕生日などのギフトに最適プレゼント満足100%安心の返品交換可能店、【あす楽】ランダム サングラス Random RD-9004-2 レディースブランド 女性 UVカット 【ランダム サングラス Random】、フロアベッド ワイドK240【Grati】【ボンネルコイル:ハード付き】 オークホワイト ずっと使える・将来分割出来る・シンプルデザイン大型フロアベッド 【Grati】グラティー【送料込/送料無料】【ポイント10倍】、ARAGOSTA 車高調 TYPE-E[コンフォート] ピロアッパー仕様 レガシィ B4 BM9 アラゴスタ 車高調 車高調 ラバーアッパー ピロアッパー TYPE-S、オーデリック 店舗・施設用照明器具LEDハイパワーダウンライト M形(一般型) 本体温白色 35° メタハラ250W相当 調光可XD301135 【送料無料!工事も承ります】天井 インテリア 埋込 廊下 通路 おしゃれ、
シングルベッド ベッド マットレス付 (組立設置) 棚 コンセント付 チェストベッド ラジェスト マルチラススーパースプリングマットレス付 シングル 大収納 【マラソン開催中♪IL-SHOP ポイント2倍★】、Clazzio クラッツィオ シートカバー DIA ダイア ホンダ N-WGNカスタム 品番:EH2021、■FH12750 タグホイヤー メンズ腕時計キリウムWL1113 200m防水 ダイバーズウォッチ■、2419684!ブローバ Bulova 腕時計 メンズ 男性 Mens 時計 人気 ランキング 男性用 オススメ、マイケルコース 2WAYバッグCynthia Small Leather Satchel (Fuschia/Silver)シンシア スモール サッチェル (フューシャ)マイケル マイケルコース Michael Michael Kors新作 正規品 アメリカ買付 レディースショルダーバッグ ハンドバッグ トートバッグ 【マイケルコース】 新作 マイケル マイケルコースバッグをアメリカ USA在住スタッフ買付発送!!!【OH済み】【美品】IWC IW351318 ポートフィノ SS 白文字盤 自動巻き 【質屋出品】【送料・代引料無料】、エコー ECCO Fusion Bicycle Toe Tie 男性 メンズ 靴 シューズ 大きいサイズ Mens ECCO Fusion Bicycle Toe Tie、2717893、【受注生産品:お届け約20日】K18ホワイトゴールド・ブラックダイヤ/ダイヤ・リング 11号♪ファッション・美容 指輪 リング ジュエリー アクセサリー レディース 女性 ブラックダイヤ 532P15May16 ファッション・美容・リング・指輪。レイバン メガネ rx5222-5041j ウェリントン Ray-Ban 眼鏡 rb5222 メンズ 男性用 [ 度付き・伊達メガネ・クリアサングラス・老眼鏡として 対応可能な UVカット レンズ 付き ] ブラウン ★送料無料・度付きor度なしレンズ付・正規商品販売店★。183101、HERMES/エルメス/Hキューブ ネックレス/カージュドアッシュ/ホワイト×シルバー//t-1507- カードOK!送料、代引手数料無料 アクセサリー、アルティナ シートカバー スタンダード 2146 シートカラー:ブラック,グレー,ベージュ,アイボリー トヨタ カローラフィールダー NKE165G 2013年08月~、BAGGYPORT バギーポート オイルバケッタ 2WAY 手提げバッグ トートバッグ GRN-2019、155/55R14 69V HANKOOK ハンコック VENTUS V8 RS H424 ベンタス V8 RS H424 weds LEONIS LV ウエッズ レオニス LV サマータイヤホイール4本セット 【送料無料!!】14インチ HANKOOK ハンコック VENTUS V8 RS H424 ベンタス V8 RS H424 155/55/14 155-55-14 69V サマーホイールセット。カラフルローチェスト 幅100cm 4段 キュアセレクト パステルピンク (取っ手:クリスタルピンク×全4個) 【日本製【完成品 送料込! 大川家具 子供から大人まで使える洋服ダンス タンス 木製、コーチ COACH クオーツ レディース 腕時計 14501960【送料無料】【楽ギフ_包装】 【送料無料】【ラッピング無料】、2522000、腕時計 HOLM Christmas Gift Mans Vintage Design Leather Brown Band Watch Peritoneal Cancer Awareness Butterfly Wristwatch 腕時計 男性 メンズ 腕時計 HOLM 1264、ハクバ KLU-A01 FAルーペ10× HAKUBA loupe KLUA01 10倍 10x、【送料無料】ダウンジャケット ダウンコート BIGカラーコート M・Lサイズ▼コート、ビックカラー、ダウン、フェザー、小顔効果、大人 、レディース ダウンアウターは、もっとオシャレに、もっと可愛くなれるはず!、【送料無料】オーデリック(ODELIC) スポットライト OG254122 電球色タイプ【TC】【送料無料】【RCP】 税抜3,000円以上で送料無料&ポイント最大10倍♪5/13 09:59迄、2714222

./node_modules/.bin/tsc index.ts

すると、下記のような index.js ファイルが生成される。

"use strict";
var request = require("request");
exports.handler = function (event, context, callback) {
 var url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040';
 request(url, function (err, res, body) {
 // Return if Error
 if (err || res.statusCode !== 200) {
 return callback(err);
 }
 // Parse JSON file (body)
 var jsonFile = JSON.parse(body);
 console.log(jsonFile.title);
 console.log(jsonFile.description);
 return callback(null, 'Success!');
 });
};

zip 化

では、Lambda にアップロードするために生成された js ファイルとライブラリを zip にまとめます。ディレクトリ上で下記コマンドを実行。

zip -r lambda.zip *

こうしてできた lambda.zipAWS Lambda にアップロードします。

AWS Lambda 上へのアップロード

まず、AWS コンソールにアクセスして Lambda のページにアクセスします。

そして、Create Function を選択します。

次に、Blanc Function を選択して Next をクリックします。

それからトリガーの画面です。ここでは S3 のオブジェクトの更新や、1分間隔のイベントなどを Lambda の起動のトリガーに設定することができます。 今回は、サンプルなので特に何も設定せずに Next をクリックします。

次に Lambda ファンクションの設定画面です。

ここでは、Lambda ファンクションの名前、Runtime (実行する環境)、Code の指定方法を選択します。 ファンクションの名前は今回は天気予報の結果を取得してくるので、weatherLambda としました。それから実行環境は Node.js 4.3 で、 Code entry type を Upload a .ZIP file にして、Upload ボタンをクリックします。 そしたら、ファイルダイアログが出てくるので先程 zip 化したファイルを選択します。

次に、Lambda を実行するための権限を作成します。今回は単純に AWS Lambda を実行するだけなので、Role の Create a custom role を選択します。

すると下記のような別画面に遷移します。ただ特にすることもなく、ロール名が lambda_basic_execution になっていれば許可をクリックします。

すると、Role が existing になって、Existing role が lambda_basic_execution になっているはずです。

以上で設定は終わりなので、Next ボタンをクリックします。

すると、緑の枠に囲われて Conguraturations! が表示されるので、動作確認のためTest をクリックします。

次に、Input test event を選択します。ここでは、TypeScript で記述したハンドラのexports.handler = (event: any, context: any, callback: Function) => {の event に何を渡して実行するか?を選択します。今回は event は使っていないので何でも大丈夫です。ひとまずHello Worldを選択しましょう。

すると、下記のようにSuccess! と log output が表示されます。ここでは少し出力結果が見にくいので click here をクリックして CloudWatch log でログを確認してみましょう。

すると下記のような画面に遷移するはずなので、ログをクリックしましょう。*2

すると下記のように詳細なログを確認することができます。

ログを確認してみると、福岡県久留米の天気と表示されていることや福岡県の天気が表示されていることが確認できるはずです。

以上までが TypeScript で作る簡単な Lambda のサンプルアプリケーションです。

おわりに

今回はサンプルとして、簡単なアプリケーションを Lambda と TypeScript を使って作成しました

TypeScript なのにあまり型を活かせていなかったり、タスクランナーの説明やらを省いてしまいましたが、そのあたりはまた別記事で紹介をしていきたいと思います。

ひとまず、TypeScript でラムダファンクションを作ってみたいという方の導入になれば嬉しいです。

*1:TypeScript Compiler

*2:下記画像は何度か試したので幾つかログがありますが、一回しか Test を実行していなければログは一つだけのはずです。

{yahoojp} {negi-works.hatenablog.com} bt06-top02-gui-727