• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
AWS SDK for Haskell開発
 

AWS SDK for Haskell開発

on

  • 2,193 views

Haskell忘年会2012で喋った

Haskell忘年会2012で喋った

Statistics

Views

Total Views
2,193
Views on SlideShare
1,535
Embed Views
658

Actions

Likes
1
Downloads
6
Comments
0

4 Embeds 658

http://yunomu.hatenablog.jp 645
https://twitter.com 9
http://localhost 3
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    AWS SDK for Haskell開発 AWS SDK for Haskell開発 Presentation Transcript

    • AWS SDK for Haskell 野村裕佑
    • 今日の結論AWS(Amazon Web Services)を操作するためのAPIライブラリを作りました スクラッチから自作 仕事でAWSを使うので仕事だと言い張って 実際に仕事で使っている 2
    • Amazon Web Services(AWS)プログラマブルデータセンター(と誰かが言ってた)EC2:サーバ(仮想マシン)、ディスク、NIC、サブネット、IPアドレス等の資源を時間課金で利用他にもサービスは色々:Storage, LB, RDB, DNS, CDN,Cache, KVS, E-Mail, Queue, Notify, MR, ... Instance Attach Router Volume 3
    • プログラマブル全てのリソースをHTTPベースのAPIで操作可能 WebのコンソールよりAPIの方が多機能 様々な言語でAPIライブラリが開発されている Internet Create/Delete Instance Attach Attach/Detach Router Volume Modify 4
    • AWS APIライブラリAWSが提供 Java:全機能に即座に対応する PHP:更新停滞気味(停止してるかも) CLI:便利だけど遅い(sh→Ruby→Javaと呼び出してた り)野良(?) Python:ほぼ全機能を網羅(一部テキトウだけど) Ruby:2∼3種あり、それぞれ対応してないプロダクトが .NET, Android, iOS:(わかりません) Haskellは無い(………ことはないんだけどEC2未対応) 5
    • ある日の出来事 ∼AWSを使う開発案件を前に∼seizans 今回はJavaで行こうと思います yunomu なんでJavaなんですか AWSライブラリが充実してるのが JavaとPythonだからです なんでHaskellじゃないんですか ライブラリがあればHaskellにしてました ライブラリ書けばいいじゃないですか hai 6
    • 作りましたhackageDB: aws-sdk初リリース:2012年9月29日実装状況 EC2: 85/141(私がよく使うAPIはだいたいできた) 他プロダクト{ELB, RDS, CloudWatch}: 少々 7
    • AWS APIの構造HTTPParameterはGETのQuery String形式(一部POST/XML)AWS AccessKey/SecretAccessKeyから生成したSignatureで認証ResponseはXML Request: (Parameter+Signature) Response: XML or HTTP Status Code 8
    • aws-sdk開発方針レスポンスパーサを簡単に書けるようにする API数が多いので(EC2だけで141個)できるだけAPIマニュアル通りに実装する AWSの更新が多いので、凝ると変更への追随がつらくなる 機能よりAPI数 (ドキュメント流用できないかなぁ)リソース数が膨大すぎる時の事も考える 社内事情 (気休め) 9
    • Response例(DescribeInstances)<DescribeInstancesResponse xmlns=http://ec2.amazonaws.com/doc/2012-10-01/> <requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId> <reservationSet> <item> <reservationId>r-0ece705a</reservationId> <ownerId>053230519467</ownerId> <groupSet/> <instancesSet> <item> <instanceId>i-7a00642e</instanceId> <imageId>ami-1cd4924e</imageId> <instanceState> <code>16</code> <name>running</name> </instanceState> <privateDnsName/> <dnsName/> <reason/> <keyName>VPCKey</keyName> <amiLaunchIndex>0</amiLaunchIndex> <productCodes/> <instanceType>c1.medium</instanceType> <launchTime>2012-06-28T17:41:48.000Z</launchTime> <placement> <availabilityZone>ap-southeast-1b</availabilityZone> <groupName/> <tenancy>default</tenancy> 10
    • XMLパーサ(xml-conduit)XMLは要素がネストしている 要素の中に子要素、子要素の中に孫要素 パーサもネストしている パーサの引数に子要素のパーサを渡すタグの外側の改行も空白も除去してくれないAttributeの有無、子要素の有無、タグの有無...書くのがとても面倒くさい 11
    • Responseパーサの例(DescribeInstances)describeInstances instances filters = ec2QuerySource "DescribeInstances" params $ itemConduit "reservationSet" $ Reservation <$> getT "reservationId" <*> getT "ownerId" <*> itemsSet "groupSet" (Group <$> getT "groupId" <*> getT "groupName" ) <*> itemsSet "instancesSet" (Instance <$> getT "instanceId" <*> getT "imageId" <*> element "instanceState" (codeToState <$> getT "code" <* getT "name" ) <*> getT "privateDnsName" <*> getT "dnsName" <*> getT "reason" <*> getT "keyName" <*> getT "amiLaunchIndex" <*> itemsSet "productCodes" (ProductCode <$> getT "productCode" <*> get "type" ) <*> getT "instanceType" <*> getT "launchTime" 12
    • パーサライブラリ<amiLaunchIndex>0</amiLaunchIndex><productCodes/><instanceType>c1.medium</instanceType><launchTime>2012-06-28T17:41:48.000Z</launchTime><placement> <availabilityZone>ap-southeast-1b</availabilityZone></placement><*> getT "amiLaunchIndex"<*> itemsSet "productCodes" (ProductCode <$> getT "productCode" <*> get "type" ) data Instance = Instance<*> getT "instanceType"     { instanceId :: Text<*> getT "launchTime" ...<*> element "placement" (Placement instanceAmiLaunchIndex :: Int     , <$> getT "availabilityZone"     , instanceProductCodes :: [ProductCode] <*> getT "groupName"     , instanceType :: Text <*> getT "tenancy"     , instanceLaunchTime :: UTCTime )     , instancePlacement :: Placement 13
    • 今後の展開予定無し ひと通り自分が欲しい機能は作ってしまったので… (仕事したくない時用の仕事)問題 テストをあまり書いていない 現在は課金が発生しない範囲だけ書いている API変更に追随するために本当は書かないといけない awsパッケージの存在 ver.1.0.0.0はいつにしよう 格好わるいところが色々ある…… 14
    • awsパッケージとの関係実は先行例があった:AWS library for HaskellただしEC2未対応 SES, SQS, S3, SimpleDBには対応aws-sdkをHackageに登録直後に向こうの作者から連絡 「いっしょにやろうぜ」 「ごめんちょっと待って」←イマココ統合したいような面倒くさいような 15
    • 今やってること自己紹介 野村裕佑(github: yunomu) 得意分野:OS, Network, サーバ管理など 株式会社ワークスアプリケーションズ ATE本部クラウド運用研究グループ 運用管理業務のことを考えて実行する仕事システム運用管理ツール開発 AWSを利用するシステムを管理する 基盤にyesodを採用(チーム全員がHaskell使えたので) 16
    • 派生物いろいろお勉強・実験 Conduit勉強会 http-conduitソースコード読み パーサライブラリの整備 TemplateHaskellで遊ぶaws-sdk Author希望者向けチュートリアル @daimatz さんがやりました開発者を集める @seizans さんがやってます 17
    • AWS SDK for Haskell作ってますHackageDB: aws-sdkEC2をHaskellから操作できるようになりましたELB, RDS, CloudWatchも対応予定利用者, Author, Requestなど歓迎 18