株匏䌚瀟medibaのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟mediba

株匏䌚瀟mediba の技術ブログ

å…š218ä»¶

こんにちわ、情報システム郚 䜐藀です。 mediba で提䟛しおいるサヌビスは Amazon AWS のテクノロゞ を利甚したものが倚いのですが、今回は Microsoft Azure を利甚しお業務系システムのメンテナンスを実斜したお話です。 さお、 Azure File Storage が昚幎末に䞀般提䟛されたした。 最倧の特城は SMB 2.1 および SMB 3.0 に察応 しおいるこず。 これにより、オンプレからクラりド䞊の共有フォルダをマりントしお利甚するこずが可胜です。 Amazon AWS の 堎合 S3 バケットを盎接マりントしおファむルシステムのように䜿うツヌルずしお s3fs や goofys などがありたすが、ツヌルを入れるのが躊躇される堎合やお手軜に詊したい堎合に掻甚されおは劂䜕でしょうか 今回は、PowerShell から Azure File Storage を䜜成し Windows Server のネットワヌクドラむブずしおマりントしお利甚するずころたでを詊したす。 準備 Azure アカりントの入手 こちら から入手できたす。 PowerShell ぞのコマンドラむンのアップデヌト こちら からAzure コマンドラむンむンタヌフェむスを入手できたす。 Azure File Storage の甚意 マりントするための共有ディスクを䜜成したす。この䜜業は PowerShell が入っおいるクラむアント端末であれば実行可胜であるため、サヌバヌずは別の環境であらかじめ実斜しおおくのがお勧めです。 PowerShell ※ Azure アカりントず玐づけを行いたす。 PS C:\> Add-AzureAccount ※ サブスクリプションが耇数ある堎合は固定したす。 PS C:\> Select-AzureSubscription -SubscriptionID:'subscriptionid' ※ 䜜成するストレヌゞアカりントの名前チェックをしたす。 PS C:\> Test-AzureName -Storage hogehoge 詳现: The storage account named 'hogehoge' is already taken. True ※ True が垰っおくる堎合は既に存圚するため Flase ずなる名前を探したす。 PS C:\> Test-AzureName -Storage mediba False ※ サブスクリプションで利甚可胜なロケヌションを確認したす。 PS C:\> Get-AzureLocation | format-Table -Property Name, storageAccountTypes 詳现: xx:xx:xx - Completed Operation: Get-AzureLocation Name StorageAccountTypes ---- ------------------- East US {Premium_LRS, Standard_LRS, Standard_ZRS, Standard_GRS...} ・・・・ Japan West {Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS...} Japan East {Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS...} ※ 利甚可胜なロケヌションが返っおきたす。この䞭から䜜成するロケヌションを決めたす。 PS C:\> New-AzureStorageAccount -StorageAccountName -Location 'location name' ※ 'location name'には先ほどの Japan East などを指定 ※ 䜜成したストレヌゞアカりントにコンテナを䜜りたす。 PS C:\> Set-AzureSubscription -SubscriptionID:'SubscriptionID' -currentStorageAccount 'アカりント名' PS C:\> New-AzureStorageShare 'コンテナ名' ※ 䜜成したストレヌゞキヌをこの埌の凊理で䜿いたすので出力しおメモなどに保存したす。 PS C:\> Get-AzureStorageKey 以䞊で、Azure 偎の準備は完了です。 Windows Server 偎での共有ドラむブのマりント Azure File Storage をマりントするためにはむンタヌネットに向けお TCP 445 が開攟されおいる必芁がありたす。Range などを絞っお開攟する堎合、 こちら の Microsoft の技術情報を参考にしおください。 コマンドプロンプト ※ 指定のドラむブに共有フォルダずしおマりントしたす。 C:\>Net Use 'ドラむブレタヌ:' \\'アカりント名'.file.core.windows.net\'コンテナ名' /u:'アカりント名' 'ストレヌゞキヌ' 以䞊で、Windows 偎の共有フォルダずしおマりントするこずができたした。 芋た目は、通垞の共有ドラむブず倉わりありたせん。 Format は MAFS ずいう特殊な 5TB の共有ディスクができあがりたした。 䜿っおみた 䜜成した共有フォルダに早速ファむルをコピヌしお速床をチェックしおみたす。 其の前にむンタヌネットぞのアップロヌド速床を蚈枬しおおきたす。 珟圚の環境の䞊りの回線速床は以䞋のずおりでした。 20 Gbyte のファむルを移動しおみたした。 ほが、回線の䞊限倀で掚移をしおいるこずがみれたす。 箄 30 分皋床で移動をするこずができたした。 Japan East のロケヌションを遞択したからか、思った以䞊に速床がでたす。 巚倧なファむルを移動する堎合は、垯域に泚意が必芁です。 たずめ ルヌタヌから倖郚に向けお TCP 445 が開攟されおいるこずを確認しよう。 垯域には泚意しよう。 Azure 䞊の仮想環境でも同様にマりントするこずが可胜です。 ファむルの仮眮き、Azure 仮想環境ぞの簡易移動など、ディスクむメヌゞの退避などいろいろな甚途で䜿っおみおはいかがでしょうか
こんにちは。mediba制䜜郚の倧村です。 2016幎1月6日に匊瀟でパパママ向けキュレヌションサむト camily-β版- をオヌプンいたしたした。 camily [キャミリヌ]働くママずパパの仕事ず育児をもっず自由に そこで制䜜したサヌビスロゎを甚いお、基瀎的な芁点を亀えロゎタむプの䜜り方を玹介したす。 1. ベヌスずなるフォントを探す サヌビスむメヌゞず合うフォントを探す フォントを掗い出したら同じくらいのサむズにしお䞊べ、どれが読みやすいか、狙いず雰囲気が合っおいるか確認しおみたしょう。フォントを探すずき留意したい点は サヌビスむメヌゞず合う ずいうこず。予めサヌビスの特城や理念を掗い出し、それを元に考え始めたす。 サヌビス名 camily[キャミリヌ] タヌゲットナヌザヌ䜜成圓時 未就孊0〜5歳の子䟛を持぀仕事をしおいるママずパパ 特城 月霢や幎霢に応じお蚘事を出し分け 理念サヌビスの意図 仕事をしおいるからこそ出おくる育児の悩みを軜枛しおもらいたい ※ camily ずは carrier[キャリア] ず family[ファミリヌ] を繋げた造語になっおおり、これらが繋がっおバランスが取れおいおるむメヌゞ※課題1ず relief[安心] ずいう意味も蟌めたい※課題2ので優しいむメヌゞを衚珟したいずいう課題も。 ポむント 倧文字小文字の組み合わせなどでむメヌゞが倉わるので、その点も加味しおたたは掻かしおむメヌゞを䜜成しおいきたしょう。 今回は先に 党お小文字 でサヌビス名をFIXしおいたので、小文字のみでバランスが良くなるように泚意しおいたす。 2. ロゎの衚瀺サむズを確認 きちんずロゎを芋せるために衚瀺サむズを最初に決定する 実際デザむンにはめおみるず 「読めない」「芋えない」「芋蟛い」 ずいうこずが倚々有りたす。 サヌビスの察象機皮やブラりザを確認し、最小サむズの機皮でもきちんず芋えるように、たた、他のパヌツも収たるようにロゎの衚瀺可胜領域を 予め確認 したしょう。 䞻流ず蚀われおいる最小サむズ《iPhone 4、4s 3.5むンチ320×480px、Device pixel ratio 2》を最小ずし、 最倧シェアの画面サむズは《Galaxy Nexus 5 4.7むンチ360×567px、Device pixel ratio 3》これをメむンに意識したす。 Device pixel ratio 3は非垞に倧きな画像が必芁になるため、Webの堎合は衚瀺速床が萜ちナヌザヌ䜓隓に悪圱響を及がす可胜性がありたす。 カンプ䜜成の際には䜜業効率も考慮しDevice pixel ratio 2幅720pxに留め制䜜を進めたす。 それを実機で確認できる環境を䜜り、確認しながらデザむン䜜成したす。 ポむント ロゎを先行で䜜らなくおはいけない堎合は倧䜓のサむズを想定しお、埌々調敎の必芁があるこずをスケゞュヌリングしたしょう。 3. 400%にお䜜成開始 敎数倀で䜜成するず滲みの少ない衚瀺になる 端末によっおDevice pixel ratioが違うのでピクセルパヌフェクトの実珟は難しいのですが、極端に倪すぎたり现すぎたりしないように実際自分が䜜りたいむメヌゞを 逆算しお䜜成 したす。 敎数倀の衚瀺になるよう心がけるこずでかっちりずした印象に仕䞊がりたす。実際配眮する䜍眮が1px以䞋でずれおいる堎合倚少滲みたすが、それを考慮しないにしおも意識しない堎合ず比べるず滲みは少なくなりたす。 400%で䜜成するず衚瀺サむズは1/4になるので線幅24pxの堎合衚瀺サむズは6pxずなりたす。 400%にした理由 デザむン時に拡倧瞮小する際に偶数の方が扱いやすい 自分の環境(iMac 27むンチ)で角䞞の床数などの现郚をみたいずころたで拡倧できる ポむント 最終的にSVGデヌタベクタヌ圢匏のデヌタで配眮すればかなり綺麗に衚瀺されたす。 これからもっず解像床の高い端末が発売されるこずも芋越した斜策です。 ただし、IE8以䞋、Android2.3以䞋は察応しおないので、察象機皮を確認の䞊実斜するこずをお勧めしたす。 4. 文字を知る 読みやすい文字を䜜るための知識 デザむンする際にどんな颚に装食をするか迷うず思いたす。叀来から䌝わる文字には様々な 意味や特城 があり、フォントのどこがどのように特城を衚珟しおいるのかを分析しながら䜜成するこずで、読みやすい文字衚珟を䜜成するこずが出来たす。 参考になる文字ルヌル 《 セリフ (serif) 》 タむポグラフィにおいお文字のストロヌクの端にある小さな食りを意味する。セリフを持぀曞䜓をロヌマン䜓ず呌ぶ。 《 サンセリフ 》 セリフのない曞䜓の総称。 《 氞字八法 》 挢字の「氞」の字には、曞に必芁な技法8皮が党お含たれおいるずいう事を衚した蚀葉。 偎゜ク、点、勒ロク、暪画、努ド、瞊画、趯テキ、はね、策サク、右䞊がりの暪画、掠リャク、巊はらい、啄タク、短い巊はらい、磔タク、右はらいの八法。 5. 印象に残るロゎを目指す むメヌゞに合わせおモチヌフをプラス 「キャリアずファミリヌが繋がっおいる感じ※課題1の アむキャッチ が欲しい」ずいうオヌダヌが入りたした。 今回は関係者内で協議の結果「バランスが取れおハッピヌになる」ずいうむメヌゞで「やじろべえ」のモチヌフを起甚するこずに。 物理的に䞍自然にならないよう巊の䞞が倧きくなっおいたす。 ポむント モチヌフもできるだけ正円を䜿うなどし、文字郚分ずのバランスをずりたしょう。 6. 配垃甚デヌタを䜜成 い぀でもどこでも綺麗に衚瀺しおもらうために ロゎは媒䜓に配ったり、どこかに掲出しおもらう機䌚もあり 䞀人歩きしがち です。 そんな時、カラヌなどを明蚘したドキュメントずガむドラむンがあれば是か吊かハッキリし、 扱う人も迷わずに枈む でしょう。 ロゎが芋えなくなったり読めなくなったりしそうなケヌスは掗い出し、犁則の欄に远加しおいきたしょう。蚱容を決めおおくこずも倧事です。 たずめ 今回はWebサむトのサヌビスロゎしかもスマヌトフォンファヌストずいうこずでタむポグラフィヌを採甚したした。 Webの堎合ファヌストビュヌで䜕が埗られるかが重芁です。 ファヌストビュヌに説明的な蚘茉があるこずでナヌザヌがサヌビスにたどり着くたでに時間がかかっおしたいたす。 時間がかかっおしたうず離脱に぀ながりたす。 離脱させないために、説明がなくおもファヌストビュヌで 「読める・分かる」 を軞に制䜜するこずが必芁なのです。 特にロゎはファヌストビュヌの倧郚分を占めたすので、制䜜の際は䞋蚘の、目的を明確にし、それらが達成できるように心がけるこずが倧切だず私は考えたす。 メディア(媒䜓) 䟋えば雑誌には雑誌にしか衚珟できない印刷技術、TVには動きも衚珟に加わるなど、説明の䜙地などが媒䜓によっお違いたす。 タヌゲット デザむン芁玠を倧きく巊右したす。 コンセプト 党䜓のデザむンずマッチさせ、より匷固な印象付けを図りたす。 ※camilyにおいおは、䞞みを垯びた優しい印象のロゎタむプに加えUIは柔らかい緑で統䞀し安心感を衚珟しおいたす。※課題2 以䞊、「スマヌトフォンでもキレむに芋えるタむポグラフィヌから䜜るロゎデザむン」でした。
こんにちは、メディアシステム開発郚の山浊です。 幎が明けたばかりだし、なにか新しいこずを始めたいず思いたしお、β版から正匏版になったAWS IoTを取り䞊げおみるこずにしたした。 AWS IoTずは 昚幎10月のre:Inventで発衚され、同幎12月に正匏リリヌスされたAWSサヌビスの぀です。 IoTに特化しおおり、デバむス同士の接続やAWS SNS、DynamoDBなどず連携するこずができたす。 これたでIoT環境を構築するには、メッセヌゞブロヌカヌの構築やセキュリティ察策などいく぀ものハヌドルがありたしたが、AWSによっおマネヌゞドされたサヌビスずしお提䟛されたこずにより、IoTがより身近なものになりたした。 AWS IoTずデバむスは、MQTTたたはHTTPSプロトコルを介しお通信を行いたす。 気になる料金ですが、東京リヌゞョンの堎合 100 䞇通のメッセヌゞあたり 8 USD ず蚭定されおいたす。 IoTずは Internet of Thingsの略です。 䞖の䞭の様々なモノがむンタヌネットに接続する技術のこずをさし、 第4次産業革呜のキヌワヌドずもなっおいる、ずおもホットな分野です。 目暙 䞋蚘のような流れを実装し、AWS IoTがどのようなサヌビスかを知りたいず思いたす。 Arduinoで光量をセンシング センシング結果をAWS IoTにパブリッシュ パブリッシュされた結果をAWS SNSでメヌル送信 Arduinoずは 初心者でも簡単に扱えるマむコンボヌドのこずです。 さたざたなセンサず組み合わせるこずで、呚囲の環境を感知するこずができたす。 開発にはArduinoIDEずいう開発環境が甚意されおおり、コヌディングからプログラムの曞き蟌みたでを䞀括しお行うこずができたす。 AWS SNSの準備 それでは手始めにAWS SNSの蚭定から始めたいず思いたす。 こちらを最初に登録しおおく必芁があるため、AWS IoTを觊りたい気持ちをグッずこらえお蚭定を行っおいきたす。 1. Topicの登録 Topicを䜜成したす。AWS IoTでこのTopicを呌び出すこずになりたす。 2. Subscriptionsの登録 Subscriptionsの蚭定をしたす。目暙がメヌル通知なので、Protocolにemailを蚭定し、送り先のメヌルアドレスを登録したす。 以䞊でAWS SNSの蚭定は完了です。 AWS IoTの準備 いよいよ本題のAWS IoTを蚭定しおきたす。 倧きく分けお぀の項目を蚭定する必芁がありたす。 Thingの登録・・・デバむス自䜓の登録したす。 Ruleの定矩・・・デバむスから受け取ったデヌタを凊理するルヌルを定矩したす。 Certificateの䜜成・・・蚌明曞、秘密鍵、公開鍵を䜜成したす。 Policyの䜜成・・・AWS IoTの各皮操䜜を蚱可するためのポリシヌを䜜成したす。 各蚭定を順番に行っおいきたす。CLIから行う方法もありたすが、今回はすべおの蚭定をコン゜ヌル画面から蚭定しおみたす。 1. Thingの蚭定 Nameを入力し、Createボタンで登録完了です。 Thingの蚭定はこれだけです。 2. Ruleの定矩 たずはRuleの名前を決めたす。 次に受け取ったデヌタを凊理するルヌルを定矩したす。SQLになっおいるので盎感で理解しやすいのが特城です。 TopicFilterに蚭定した【topic/test】を蚭定した堎合、同䞀のトピック名でパブリッシュされたデヌタを、次で定矩するアクションに受け枡したす。 パブリッシュされたデヌタをどのように凊理するか定矩したす。 SNSずの連携を行いたい堎合、【Send message as a push notification】を遞択したす。 (他にも、DynamoDB、Kinesis、Lambda、S3、SQSず様々なAWSサヌビスが遞択可胜です。) 続いお、䞀番最初に蚭定をしたAWS SNSの SNS Topic ず Role Name を指定したら、Add Action をクリックしアクションを決定したす。 最埌にCreateボタンをクリックしたす。 3. Certificateの䜜成 蚌明曞ず秘密鍵ず公開鍵を生成したす。 既存のCSRから鍵を生成するこずもできたすが、【1-Click certificate】を䜿甚するこずが掚奚されおいたす。 鍵ず蚌明曞が生成されるずダりンロヌドするこずができたす。 鍵はこのタむミングでしかダりンロヌドできないので、忘れずにダりンロヌドしおおく必芁がありたす。 4. Policyの䜜成 デバむスに察しお、AWS IoTの各皮操䜜を蚱可するためのポリシヌを䜜成したす。 今回は党おの操䜜を蚱可するように蚭定したす。 図の赀枠を入力したら、Createボタンをクリックしたす。 5. Certificateの有効化ずThing、Policyのひも付け 最埌にCertificateにThingずPolicyをひも付け、有効化を行いたす。 この行皋を行うこずで先ほどダりンロヌドした蚌明曞ず鍵が有効になりたす。 以䞊でAWS IoTの蚭定は党お完了です。 Arduinoの準備 Arduino偎の蚭定は倧きく分けお3぀です。 回路の䜜成 Arduinoに組み蟌むプログラムの䜜成 Arduinoでセンシングしたデヌタを受け取りパブリッシュするプログラムの䜜成 1. 回路の䜜成 Arduino単䜓で光量をセンシングするこずができないため、倖郚に回路を䜜りたす。 実際の回路はこのようになりたした。赀枠で囲んだものが照床センサです。 センサが受け取った倀をアナログ0番ピンで取埗できるようになっおいたす。 2. Arduinoに組み蟌むプログラムの䜜成 センサの倀を出力するプログラムを䜜成したす。 蚀語はArduino蚀語ずいう、C/C++をベヌスにした独自蚀語で䜿甚したす。 serial.ino int val = 0; void setup() { Serial.begin(9600); } void loop() { val = analogRead(0); Serial.println(val/4); delay(1000); } アナログINの0番ピンからデータを受け取り出力します。 ArduinoIDEでコンパむルが通ったら、Arduinoに曞き蟌んでおきたす。 3. Arduinoでセンシングしたデヌタを受け取りパブリッシュするプログラムの䜜成 AWS IoTにパブリッシュするプログラムです。 MQTTで通信できれば蚀語の指定はありたせんが、今回はRubyで曞いおみたした。 (Arduinoは単䜓で通信が行えないため、パブリッシュはPCを介しお行いたす。) 前準備ずしお、serialportずmqttずいうgemが必芁なのでむンストヌルしおおきたす。 mqttはRubyからMQTTプロトコルで通信を行うためのgem、serialportはシリアル通信をするためのgemです。 $ gem install mqtt $ gem install serialport serial.rb require 'serialport' require 'mqtt' # Arduinoで設定したポート port = '/dev/cu.usbmodem1411' sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) client = MQTT::Client.connect(host: 'YourEndpoint', port: 8883, ssl: true, cert_file: 'certificate.pem.crt', key_file: 'private.pem.key', ca_file: 'rootCA.pem') loop do sensor_val = sp.gets puts "Illuminance = " + sensor_val if sensor_val.to_i Illuminanceの倀は、明 40 ~ 250 暗 皋床の倀を取るので、やや暗いずころで実行したこずが分かりたす。 Illuminanceの倀が【50】を切った時にAWS IoTにパブリッシュされるので、明瀺的に光源を照床センサに近づけおみたしょう。 倀が小さくなっおいるのが分かるかず思いたす。 実際にパブリッシュされた文字列がメヌルで送信されおいるでしょうか。 届いおいたした センシングされた倀を基にパブリッシュされ、AWS IoTからSNS経由でメヌルが送信されたこずが確認できたした。 たずめ AWS IoTを初めお䜿甚しおみたしたが、蚭定から皌働たでずおも簡単にできたした。他のAWSサヌビスずの連携が予想以䞊にスムヌズに行えたこずに驚きたした。 今たで時間をずられおいた環境構築の悩みをAWS IoTが解消しおくれたので、あずはアむディア次第で面癜いものを䜜っおいけるず思いたす。 今回はArduinoを䜿いたしたが、もちろん他のIoTデバむスも䜿甚可胜なので、今埌も色々ず詊しおいきたいず思いたす。 みなさたもステキなIoTラむフを
明けたしおおめでずうございたすauスマヌトパス開発郚の新井です。 medibaで提䟛しおいるサヌビスではDynamoDBを利甚しおいるサヌビスがありたす。 Q: Amazon DynamoDB ずは䜕ですか? Amazon DynamoDB は、完党マネヌゞド型の NoSQL デヌタベヌスサヌビスであり、高速で予枬可胜なパフォヌマンスずシヌムレスな拡匵性が特長です。 https://aws.amazon.com/jp/dynamodb/faqs/ DynamoDBは、スルヌプット容量を倉曎するこずができ必芁なずきに必芁なだけリ゜ヌスを利甚するこずが可胜です。 DynamoDB での制限に぀いお ただ、スルヌプット倉曎にあたっおは制限があり増やす堎合には日に䜕回でも可胜ですが、枛らす堎合には日に回ずいう制限がありたす。 たた、増やしたスルヌプットが適甚されるたでにはデヌタ量やデヌタ構造によっお数分から数時間かかるずいう泚意事項もありたす。 Q: テヌブルのプロビゞョニングされたスルヌプットレベルを倉曎するにはどのくらい時間がかかりたすか 通垞、スルヌプットを枛らす堎合は数秒から数分、増やす堎合は数分から数時間かかりたす。 远加スルヌプットが必芁になった時点でスルヌプットを増加したり増加のスケゞュヌルを立おたりするこずはお勧めできたせん。スルヌプット容量のプロビゞョニングは、必芁なずきに確実に容量を確保できるようかなり前から行っおおくこずをお勧めしたす。 https://aws.amazon.com/jp/dynamodb/faqs/ DynamoDB での制限䞀芧 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Limits.html ナヌスケヌスに応じたデヌタストアの䜿い分け DynamoDBを利甚する際には、ナヌスケヌスに応じお必芁ずなるスルヌプットが異なるケヌスがあるため他のデヌタストアず䜵甚する案の怜蚎が倧事かず思いたす。 䟋 フロント゚ンド 蚎求などによるスパむクアクセスにより特定の時間垯のみ高スルヌプットが必芁である バック゚ンド 日に䞀床だけ特定の時間垯に倧量デヌタを凊理させるために高スルヌプットが必芁である 運甚者が任意のタむミングで栌玍されたデヌタを集蚈/出力するために高スルヌプットが必芁である などなど 䞊蚘ケヌスの堎合は、必芁なずきに郜床スルヌプットを倉曎するこずにより芁求を満たすこずは難しい状況ずなりたす。 たた、バック゚ンドでのナヌスケヌスが実行されるタむミングでフロント゚ンドで利甚しおいるテヌブルのスルヌプットを消費しおしたうケヌスやバック゚ンドで利甚するデヌタは、RDBMSで管理しおいたほうがデヌタを操䜜しやすいずいった状況にもなりたす。 い぀でも高スルヌプット状態を確保できる状況であれば問題ありたせんが、高スルヌプット状態を確保しおおくこずにより費甚面で課題が残りたす。 そんなずきには、DynamoDB Streams を利甚するこずで別のデヌタストアぞデヌタ同期するこずによりナヌスケヌス別に最適なデヌタストアの利甚が可胜ずなりたす。 デヌタの流れむメヌゞ DynamoDB ず RDS の䜵甚をした際にストリヌムデヌタを効率よく凊理させるために着目したこず 今回玹介させお頂く事䟋は、DynamoDB から RDS ぞデヌタを同期する際に、DynamoDB Strems ず lambda間で効率よく SQS ぞメッセヌゞを栌玍する凊理におパフォヌマンスをあげるために工倫/怜蚌した内容を玹介したす。 Amazon Simple Queue ServiceSQSは、高速で、信頌性が高く、スケヌラビリティに優れ、十分に管理されたメッセヌゞキュヌサヌビスです。SQS を利甚するず、簡単か぀コスト効率良く、クラりドアプリケヌションのコンポヌネントを切り離すこずができたす。 ※ 具䜓的な実装方法ではなく、パフォヌマンス向䞊する䞊で着目したポむントの玹介ずなりたす。 ※ lambdaからRDSぞ盎接連携させるためにはセキュリティグルヌプの開攟などが必芁ずなりセキュアではなくなるためSQSを経由しおいたす。 ※ SQSからRDSぞ効率よくデヌタを栌玍させる方法に぀いおは觊れおいたせん。 着目ポむント1DynamoDB Streams の Batch sizeに぀いお DynamoDB Stermsを有効にする際には、「Batch size」ずいう項目を指定可胜です。 Batch size を 倉曎するこずによりパフォヌマンスにどのような圱響があるのでしょうか。 ※ Batch sizeで指定した倀によっお、ストリヌムデヌタが䞀床に凊理される件数を指定するこずが可胜ずなりたす。 着目ポむント2lambda function から SQS ぞのメッセヌゞを䞀床に送信する量に぀いお SendMessage ず SendMessageBatchを䜿うこずによりパフォヌマンスにどのような圱響があるのでしょうか。 ※ SendMessageは、䞀床に1件のメッセヌゞを凊理可胜です。 ※ SendMessageBatchは、䞀床に10件たでのメッセヌゞを凊理可胜です。 着目ポむント3lambda function の割圓おメモリ量に぀いお lambda function の割圓おメモリ量によりパフォヌマンスにどのような圱響があるのでしょうか。 ※ lambda function のメモリ割圓お量を倧きくするこずで性胜は向䞊するのですが、パフォヌマンス怜蚌をしおいる際に考慮すべきポむントがあったため着目ポむントずしお取り䞊げおいたす。 着目ポむントに焊点を圓おたパフォヌマンス結果に぀いお 以䞋の結果ずなりたした。 DynamoDBぞの曞蟌は100TPS(トランザクション毎秒)にお曞蟌凊理を実斜し、SQSぞのメッセヌゞ凊理においおも100TPSに近しい倀がでるこずを目的ずしお怜蚌した結果ずなりたす。 ※ 利甚したDynamoDBのテヌブル構造、同期させる察象デヌタ、lambda function等により異なる結果ずなるため、着目ポむントにおけるパフォヌマンスがどのような盞関関係ずなったかずしお参照ください。 batch size message type 割圓おメモリ量 SQSぞの凊理性胜TPS 1 SendMessage 128MB 箄6TPS 10 SendMessageBatch 128MB 箄45TPS 20 SendMessageBatch 128MB 箄50TPS 100 SendMessageBatch 128MB 箄65TPS 10 SendMessageBatch 256MB 箄77TPS 考えうる党おの組み合わせを詊した結果ではありたせんが着目ポむントを組み合わせるこずでパフォヌマンスが向䞊するこずを確認できたした。 たずめ 着目ポむント1DynamoDB Streams の Batch sizeに぀いお Batch size を䞊げるこずにより、䞀床に凊理される件数が増えるためパフォヌマンスが向䞊する。 䞊蚘結果には含たれおいないのですが、極端にBatch sizeをあげるこずにより䞀床に取り扱うストリヌムデヌタの量が倧きくなりすぎ着目ポむント3の割圓おメモリ量を超えおしたい、ストリヌムデヌタが取り残されるずいう事象が発生したした。 ※ メモリ割圓お量を増やすこずで凊理が実斜されるこずは確認したした。 たた、同様に極端にBatch sizeをあげるこずによりlambda functionの䞀床に取り扱うストリヌムデヌタ量が倚くなりlambda functionのTimeout制限デフォルト3秒に匕っかかりストリヌムデヌタが取り残されるずいう事象が発生したした。 ※ Timeout倀を䌞ばすこずにより凊理が実斜される圢ずなりたす。 ただし、lambda functionのTimeout制限は最倧60秒ずなるため最倧60秒以内に凊理が完了するBatch sizeを指定する必芁がありたす。 着目ポむント2lambda function から SQS ぞのメッセヌゞを䞀床に送信する量に぀いお SendMessageBatch にするこずで、SQSぞのメッセヌゞ送信凊理においおたずめおメッセヌゞを送信するこずが可胜ずなるためパフォヌマンスが向䞊する。 泚意点ずしおは、batch sizeが 1の堎合には、SendMessageBatchを利甚したずしおも䞀床に凊理されるストリヌムデヌタは、1のためパフォヌマンス効果はありたせん。 最䜎2以䞊に蚭定した堎合のみ、SendMessageBatchを利甚するこずでの性胜向䞊が期埅できたす。 着目ポむント3lambda function の割圓おメモリ量に぀いお 割圓おメモリ量を増やすこずで、lambda自䜓の凊理性胜があがるため性胜が向䞊する。 䞊蚘3぀のポむントを凊理をさせたい性胜に合わせチュヌニングをするこずでリアルタむムに近しい圢でSQSぞメッセヌゞを栌玍するこずが可胜かず思いたす。 最埌に 今回玹介したパフォヌマンスのチュヌニングポむントでは、SQSからRDSぞもリアルタむムに近しい倀でデヌタを同期させるこずは考慮できおいたせん。 SQSからRDSぞもリアルタむムに近しいデヌタを同期させるためには、SQSからのデヌタ取埗間隔Woker数、RDSぞの曞蟌性胜などを考慮した䞊でチュヌニングを実斜する必芁がありたすが、最終的にはDynamoDBにお確保する高スルヌプット以䞊の曞蟌性胜をRDSで実珟するこずは難しいず思われるためDynamoDBは、ナヌスケヌスに応じた利甚するこずが倧事だず思いたす。 DynamoDB Stremsに぀いおは、詳现な情報が公開されおいない郚分も倚く、手探りで怜蚌した結果ずなりたすので 少しでも性胜改善に圹にたおれば幞いです。
新幎明けたしおおめでずうございたす。 本幎もどうぞ宜しくお願い臎したす。 さお今回は制䜜郚フロント゚ンゞニアの苅郚から、Charles(チャヌルズ)ずいうアプリケヌションをご玹介させおいただきたす。 このアプリケヌションはHTTPプロキシを蚭定できる゜フトで、通信の内容を芗いたり改倉したりする事ができたす。 日々のデバッグ䜜業に応甚できたすのでフロント゚ンゞニアやディレクタヌの方、是非この機䌚に掻甚されおみおはいかがでしょうか。 Charlesを䜿っおできるこず デバッグで䞻に利甚する機胜は以䞋の4点です。 通信内容の詳现確認 通信内容の制埡 垯域制埡 スマヌトフォン実機でのデバッグ 蚭定方法 最初に、初期蚭定に぀いおご説明したす。 ※ ここではMacOS利甚にお、スマヌトフォンがMacOSず同じネットワヌクに接続しおいるこずを前提ずしたす。 MacOS CharlesのWEBサむトからダりンロヌドしたす。 https://www.charlesproxy.com/download/ Charlesをむンストヌルしたす。 SSL通信も有効にするためSSLの蚌明曞をむンストヌルしたす。 SSL蚌明曞の蚭定に぀いおはオフィシャルのドキュメントを参考にしおください。 https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ スマヌトフォン Macず同じネットワヌクに接続し、HTTPプロキシを蚭定したす。 サヌバ/プロキシホスト名にはMacのIPアドレス、ポヌトはCharlesで蚭定しおいるポヌト番号デフォルトでは8888を指定したす。 iOSの堎合 Androidでの蚭定 ※ SSL通信を有効にするためには、MacOS同様に端末ぞ蚌明曞のむンストヌルが必芁ずなりたす。 ※ 端末からネットワヌクぞ接続するずMacOS偎にダむアログで"A connection attempt to Charles…“ずいうメッセヌゞが衚瀺されるので、[Allow]を遞択しお、端末によるアクセスを蚱可しおください。 ※ Android2系ではプロキシ蚭定のできる機皮が限られおいるようです。 デバッグ方法 機胜ベヌスではむメヌゞしづらいため、実際の利甚シヌン別に操䜜方法をご説明したす。 1. スマヌトフォン実機でデバッグを行いたい 䟋えばスマヌトフォン実機/商甚環境にお䜕か問題が発生しおいお、すぐにデバッグが必芁な堎合があるずしたす。 PCであれば、ブラりザの開発者ツヌルなどを利甚しおある皋床デバッグをするこずができたすが、実機でのiOS/Android/WEBVIEWではその方法が取れない堎合がありたす。 こういったケヌスでCharlesを掻甚をするこずができたす。 ここでは[Map Local]機胜を䜿い、mediba.jpぞのアクセスでアラヌトりむンドりを衚瀺しおみたす。 1) ブラりザのDeveloper toolなどで任意のURLを拟いたす ここでは https://www.mediba.jp/includes/js/jquery/jquery.js ずしたした。 2) デバッグ甚の代替ファむルを甚意したす hoge.jsずいうファむル名にお、alertを実行するscriptを甚意したした。 3) Map Localの蚭定をしたす [Tool] から [Map Local]を遞択したす。 [Enable Map Local]をONにしお[Add]を抌したす。 [Map From]の[Host]の箇所に先ほどのフルパスを貌り付けたす。 この埌、別の項目にフォヌカスするずフルパスが個々の項目に分解されたす。 [Map To]では先ほど甚意した代替のスクリプトファむルを遞択したす。 以䞊の手順によっお、 * https://www.mediba.jp/includes/js/jquery/jquery.js のレスポンスを * [/Users/hoge.js]の内容で返す ずいった蚭定が完了したした。 リロヌドを行うず、Macのブラりザでもスマヌトフォン実機でもアラヌトりむンドりでhello worldず衚瀺される事が確認できるず思いたす。 レスポンスずしお返っおきおいるものであれば、img,css,jsなど党おのファむルを曞き換えるこずができたす。 これによっお"商甚環境/スマヌトフォン実機にお、倖郚ファむルの圱響で問題が起きおいる"ずいったような特殊な状況でもすぐにデバッグが可胜になりたす。 location.reloadやlocalstorage、DOM Selectorを利甚すれば事象の発生確率の確認くらいはできるず思いたす。 ※マッピングがうたくいかない堎合 Charlesによっおマッピングされおいるファむルは独自のレスポンスヘッダヌが付䞎されおいたす。 うたくいかない堎合は、察象のファむルにX-Charles-Map-Localヘッダヌが付いおいるか確認しおみおください。 2. 非同期のデヌタ(スタブ)を甚意したい 前述の事䟋ず同様にMap Localの機胜を利甚しお、読み蟌むファむルをJSONなどにしおおけば、JSでの非同期凊理におけるスタブデヌタずしおも利甚ができたす。 これにより、䟋えばバック゚ンドの実装が終わっおいない状態でも、APIの仕様を決めおおけばフロントでもある皋床先行しお実装するこずができたす。 3. 通信のログを確認したい メむンのビュヌには垞にログが流れおいきたす。 実機でもログが取れるため、実際のリク゚スト数がどのくらいでそれぞれのレスポンスにどのくらいのコストが掛かっおいるかわかりたす。 個々の項目では、Overviewやリク゚スト/レスポンスのRAWの衚瀺が可胜です。 4. 通信速床をコントロヌルしたい [Throttle Setting]機胜にお垯域を制埡できたす。 䟋えば通信速床を極端に䞋げるこずによっおペヌゞロヌダヌ的な、ロヌドの状況に応じお消えおしたう芁玠を確認するこずができたす。 たた実際にどの段階でペヌゞが描画されるか、ログず照らし合わせお確認できるためボトルネックの発芋に繋がりたす。 䟋えば倖郚ファむルロヌドによるレンダリングブロックのポむント(クリティカルレンダリングパス)を確認するこずができるず思いたす。 私自身も過去のプロゞェクトで、この機胜でデバッグを行いAndroidWEBVIEWのパフォヌマンスを改善しおいた事がありたす。 垯域蚭定は[Enable Throttling]をONにしお、任意のPreset/垯域数倀を指定するだけです。 SIM契玄の倚様化によっお十分に速床が出ないナヌザヌもいるため、䜎垯域でのパフォヌマンス改善も倧切かず思いたす。 5. ヘッダの内容を倉曎したい [Rewrite]機胜を䜿うこずで、リク゚ストヘッダやレスポンスヘッダの内容を倉曎できたす。 そのためリク゚ストでのcookieを倉曎しお認蚌たわりのデバッグを行ったり、 レスポンスでのCache-controlやExpiresを倉曎しおブラりザのキャッシュ呚りのデバッグも可胜になりたす。 ここではリク゚ストヘッダヌのUserAgent倉曎を䟋にずっお、蚭定手順をご説明したす。 1) Rewrite Settingを衚瀺 [Enable Rewrite]にチェックを入れ、その䞋の[Add]を抌したす。 2) ルヌルセットの名前を蚭定 任意の名前を蚭定したす。AndroidのUAに倉曎するため、ここでは"Android UA"ずしたした。 3) Locationsの蚭定 今回はワむルドカヌドで蚭定したした。党おのURLで有効になりたす。 4) Rulesの蚭定 Rewriteに関する现かい指定を行いたす。 [Type]: Rewriteの振る舞いを遞択したす。 今回は既存のヘッダの倉曎ずなるため[Modify Header]を遞択したすが、ヘッダヌ远加/削陀,ク゚リパラメヌタの倉曎/远加/削陀も可胜です。 [Where]: Requestを遞びたす(リク゚ストヘッダヌ) [Match]: NameにUser-Agentを入力し、党おの倀を察象ずするため[Match whole value]のチェックを入れたす。 [Replace]: NameにUser-Agentを入力し、Valueに任意のUA Stringで蚭定したす。 ここではAndroidのUserAgentを入力したした。 この蚭定により、[iPhoneやPCでアクセスしおいおもUserAgentは䞀埋Android]ずなりたす。 この状態で詊しにGoogle怜玢をしおみたす。 UAがiOSの堎合の怜玢結果 UAがAndroidの堎合の怜玢結果 Androidに倉曎した状態では、怜玢結果のアプリ䞀芧にAndroidアプリが出おきおいるので Rewriteがうたくいっおいる事がわかりたす。 泚意点 Charlesはシェアりェアですが、起動しおから30分間は通垞利甚ができたす。 30分経過するずアプリケヌションが匷制終了したすが、再起動しおたた30分間䜿うこずが可胜です。 通信のログは止めない限りは残り続けるため、継続しお䜿うずメモリが圧迫されおCharlesが萜ちるこずがありたす。 たずめ これたで玹介したようにCharlesは簡単なGUIに必芁十分な機胜が備わっおおり、誰でも気軜にデバッグができる゜フトだず思いたす。 甚意されおいる機胜を応甚するこずで通垞では難しいデバッグも簡単にできたす。 たた、問題の切り分けにかかる時間が短瞮されるため、業務効率の向䞊に繋がりたす。 ラむセンスも$50以䞋ですので、機胜から考えるずコストパフォヌマンスはずおも高いように感じたす。 https://www.charlesproxy.com/buy/ Charlesは新しい゜フトではありたせんが(私自身も3幎くらい䜿っおいたすが)、もしただ䜿われおいなければ䞀床觊っおみるこずをお勧めしたす
こんにちはメディアシステム開発郚の杉本です。 今回は、11月末にトラむアルリリヌスをしたauスマヌトパスアプリ向け怜玢連動広告で利甚しおいるElasticsearchのCluster機胜の蚭定に぀いお玹介をさせおもらいたす。 Cluster機胜を利甚するこずで、可甚性の確保、レむテンシの䜎枛が期埅できたす。 Elasticsearchでは暙準でmulticastの蚭定ずなっおおり、Cluster機胜を䜿うのはさほど難しいこずではありたせん。 ただし、AWSはmulticastに察応しおいないため、AWS䞊のMulti-AZ構成でCluster機胜を利甚するのには少し工倫が必芁です。 その前に泚釈 10月にリリヌスされたAmazon ESのお話はないです。 もう少し早く発衚されおたら怜蚌し採甚しおたかもですが今回は芋送りたした。 kibanaも関係ないです。 最近はElasticsearchの情報怜玢しおもkibana情報が倚くお閉口しちゃう。 たずは、簡単に広告商品の玹介 auのAndroid端末にプリむンストヌルされおいるスマヌトパスアプリ向けの怜玢連動型広告です。ナンノコッチャ ですね。 こうしお、こうするずでおくる、これです。 ※ 画面むメヌゞは2015幎12月時点のキャプチャずなりたす。 ※ 掲出される広告は怜玢ワヌドや案件状況によりかわりたす。 ※ iPhoneナヌザヌは Appleストア からダりンロヌドしおみお䞋さい。 広告品質やナヌザヌず広告ずの接觊状況、キヌワヌドずの広告コンテンツの適合床などなど様々な情報を元に掲出する広告を決めおいるのですが、このプロダクトでは「キヌワヌドずの広告コンテンツの適合床」の刀定にElasticsearchを利甚するこずにしたした。 ElasticsearchでのClusterの蚭定 前眮きが長かったですね。それでは本題。 流石に本番環境は披露できないので、䌌たような環境をブログ甚に甚意しおみたした。 環境 AWS EC2 t2.micro むンスタンス * 4台 Amazon Linux Elasticsearch 1.7 plugin elasticsearch-cloud-aws 2.7.1 (今回のキモずなるプラグむン) elasticsearch-kopf (確認甚 head等でも可) Clusterの蚭定手順 ロヌルの準備 むンスタンスの準備 Elasticsearchのむンストヌル elasticsearch.ymlの蚭定 確認 ロヌルの準備 { "Statement": [ { "Resource": [ "*" ], "Action": [ "ec2:DescribeInstances" ], "Effect": "Allow" } ], "Version": "2012-10-17" } たずは、AWS䞊で䞊蚘むンラむンポリシヌを持ったロヌルを䜜成しお䞋さい。 自分は”EsDescribeInstancesPolicy”ずいう名前のpolicyにしたした。 むンスタンスの準備 最終的には4台構成ずしたすが、 たずはt2.microむンスタンス台を甚意しAMIを取りたす。 むンスタンス䜜成時に気を぀けなければならないのは、先ほど䜜成したロヌルを割り圓おるのを忘れないようにする事ぐらいです。それ以倖に぀いおは、ポチポチしながら䜜成しおいっお䞋さい。 セキュリティグルヌプを蚭定するのであれば9200番ポヌトを開けるのを忘れずに。 Elasticsearchのむンストヌル むンスタンスが甚意できたので、SSHでログむンし、Elasticsearchをむンストヌルしおいきたす。 今回はサヌビス化しおいくためにrpmでむンストヌルしおいたす。 rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch vim /etc/yum.repos.d/elasticsearch.repo リポゞトリの登録 [elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages baseurl=http://packages.elastic.co/elasticsearch/1.7/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 むンストヌル yum install elasticsearch chkconfig --add elasticsearch clusterの利甚ずその確認に蟺りプラグむンを远加 Kopf(環境確認) /usr/share/elasticsearch/bin/plugin --install lmenezes/elasticsearch-kopf/master Elasticsearch-cloud-aws(自動clustering aws察応) /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-cloud-aws/2.7.1 elasticsearch.ymlの蚭定 蚭定ファむルはelasticsearch.ymlです。 通垞であれば䞋蚘にあるず思いたす。 vim /etc/elasticsearch/elasticsearch.yml clusterを利甚するために必芁な項目に぀いおは䞋蚘です。 cluster.name: aws-cluster # node同士でクラスタ名は同じにする discovery: zen.ping.multicast.enabled: false type: ec2 cloud: aws: region: ap-northeast node.auto_attributes: true cluster: routing: allocation: awareness: attributes: aws_availability_zone 蚭定に぀いおは以䞊です。 䞋蚘コマンドでElasticsearchを起動し service elasticsearch start http://xxxx.xxxx.xxxx.xxxx:9200/ ぞアクセスしお、起動を確認しおみおください。 ロヌルを蚭定するこずで、蚭定ファむルにsecret_keyを蚘茉する必芁もないのでよりセキュアな状態で構築できたす。 むンスタンスでの蚭定を確認できたら、AMIを䜜成し、䜜成したAMIを元に4台のむンスタンスを起動させお䞋さい。 確認 正垞に蚭定が完了しおいれば埌は確認するだけです。 http://xxxx.xxxx.xxxx.xxxx:9200/_plugin/kopf/ ぞアクセスをするず、䞋蚘のような画面が確認できるかず思いたす。 キャプチャから確認いただけるようにサンプルでは5぀のshardに3぀のreplicaをもたせる圢でindexの䜜成を行いたした。 蚭定に぀いおは以䞊ずなりたす。 詊しに、むンスタンスを台停止させおみおください。 䞋蚘のようにすぐにindexが再分配され、Cluster党䜓ずしお問題なく動䜜しおいるこずが確認できるかず思いたす。 たた、むンスタンスを再起動させれば自動で察象のむンスタンスを芋぀け出し、indexが再分配がされたこずを確認できるはずです。 このようにElasticsearchでは簡単にClusteringが行えるので、可甚性の確保のためにも積極的に利甚しおいきたいですね。
こんにちは。auスマヌトパス開発郚の子安です。 最近すっかり寒くなりたしたね。冬ずいえばコタツです。そしおコタツずいえば双六。双六 -> サむコロ -> Redis。 ・・・はい、やっずたどり着きたした。今回はRedisの話です。 党おのレコヌドを吐き出したい 今やKVSの代名詞ず蚀えるほど䜿われおいるRedisですが、䞀぀困ったこずがありたす。 ずいうのも、レコヌドを党おダンプするようなコマンドがないのです みなさんどうしおいたすか 玠盎なやり方 最初に思い぀くのは、KEYSしおMGETかもしれたせん。 # export_by_keys.py r = redis.StrictRedis(REDIS_HOST) res_keys = r.keys() # KEYS if res_keys: res_mget = r.mget(res_keys) # MGET for key, val in zip(res_keys, res_mget): print(utf8(key), utf8(val)) >> 完党なコヌド これは手軜なのですが KEYS * は党おのキヌを返したすので、レコヌドが倚くなっおいくずサヌバ、クラむアントずもに問題が起きおきたす。公匏ドキュメントにも「普段䜿いは意図しおないよ」ずありたした。 http://redis.io/commands/KEYS Don’t use KEYS in your regular application code. このドキュメントの続きにもある通り、こういった堎合にはカヌ゜ルによっお少しず぀キヌを取埗しおいくSCANを䜿うのが䜜法です。 ぀たり次の手ずしお考えられるのは、SCANずMGETですね。 # export_by_scan.py r = redis.StrictRedis(REDIS_HOST) next_cur = INITIAL_CUR while True: res_scan = r.scan(next_cur) # SCAN next_cur = res_scan[0] if res_scan[1]: res_mget = r.mget(res_scan[1]) # MGET for key, val in zip(res_scan[1], res_mget): print(utf8(key), utf8(val)) if next_cur == INITIAL_CUR: break >> 完党なコヌド このコヌドは問題なく動䜜したす。が、SCANずMGETで2回ネットワヌク越しにリク゚ストしおいるずころが気になりたす。取埗したキヌをそのたた投げ盎しおいるわけですから、ここは䞀括しお凊理できないものでしょうか。 Luaを䜿う そうかLuaを䜿えるじゃないか、ず思っお曞いおみたのがこちら。 # export_by_lua.py r = redis.StrictRedis(REDIS_HOST) with open('scan_with_value.lua', 'r') as f: lua_script = f.read() scan_with_value = r.register_script(lua_script) # SCRIPT LOAD next_cur = INITIAL_CUR while True: res = scan_with_value([next_cur]) # EVALSHA next_cur = res[0] if res[1]: for key, val in res[1]: print(utf8(key), utf8(val)) if next_cur == INITIAL_CUR: break >> 完党なコヌド この䞭で読み蟌んでいるLuaスクリプトはこちら。 -- scan_with_value.lua local t_scan = redis.call('SCAN', KEYS[1]) if next(t_scan[2]) then local values = redis.call('MGET', unpack(t_scan[2])) return {t_scan[1], zip(t_scan[2], values)} else return {t_scan[1], {}} end >> 完党なコヌド やっおるこずは同じくSCANしおMGETなのですが、Luaスクリプトはサヌバサむドで動䜜したすので、クラむアントからは䞀床のリク゚ストでキヌず倀のリストを取埗できるこずになりたす。 比范しおみる 1,000,000レコヌドを保持したRedisに察しお実行しおみたす。 $ time python3 export_by_scan.py >/dev/null real 0m42.267s user 0m34.564s sys 0m2.384s $ time python3 export_by_lua.py >/dev/null real 0m46.726s user 0m35.100s sys 0m1.844s これは実はロヌカルに立おたRedisぞ接続しおいるのでした。ロヌカルだず流石にあんたり倉わらないですね。むしろ少し遅いぐらいです。 そこでリモヌトに同じく1,000,000レコヌドを保持したRedisを立おお、接続しおみるず・・・ $ time python3 export_by_scan.py redis-remote-host >/dev/null real 1m38.121s user 0m35.844s sys 0m2.780s $ time python3 export_by_lua.py redis-remote-host >/dev/null real 1m14.163s user 0m38.488s sys 0m1.864s 3/4皋床の時間で凊理を完了したした。ネットワヌク次第ずはいえ、充分有意な差が出たず思っおいたす。 おたけ倧量レコヌドの登録 吐き出すのではなく逆に投入する — 倧量のレコヌドを登録する手順に぀いおは、公匏ドキュメントにガむドがありたす。 http://redis.io/topics/mass-insert the preferred way to mass import data into Redis is to generate a text file containing the Redis protocol, in raw format, in order to call the commands needed to insert the required data. 芁はプロトコルを流し蟌む仕組みがあるずいうこずですね。公匏はRubyで曞いおあったのですが、぀いでなのでPythonで曞きなおしおみたした。 # to_redis_protocol.py def to_redis_protocol(*cmd): protocol = '' protocol += '*{0}\r\n'.format(len(cmd)) for arg in cmd: protocol += '${0}\r\n'.format(len(bytes(arg, 'utf-8'))) protocol += arg + '\r\n' return protocol >> 完党なコヌド たずめ 正盎な話、党レコヌドをダンプする芁件があるずしたらそしおレコヌドが倧量になるずしたら、それは芁件を考え盎した方が良いかもしれたせん。なぜならその凊理は必ずシリアルになり、スケヌルしないからです。SETむベントを通知しお䜕らかの凊理を入れるずか、Lua拡匵で曎新凊理ずずもに䜕らかの凊理を入れるなどの代案を怜蚎するず良いでしょう。 それずLua拡匵は面癜いですよね。工倫次第でいろんなこずができるので遊んでみおください。Luaの蚀語仕様もそれほど倧きなものではありたせんし、気軜に曞けるず思いたす。 今回䜿ったもの Redis 3.0.5 Lua 5.1.4 Python 3.4.3 / redis-py 2.10.5
こんにちは mediba 制䜜郚 メディアクリ゚むティブグルヌプでデザむナヌをしおいる高柳です。 最近、Webサむトやスマヌトフォンアプリの開発・改善を行うずきのUIデザむンツヌルずしお、Photoshopやillustratorより Sketch を䜿うこずが倚くなっおきおいるようです。 参考デヌタ 2015 Subtraction.com Design Tools Survey 私も䜿い始めおいるのですが、䟿利機胜が倚くお䜿い易いのが魅力です。 今回は、そんなSketchに぀いおご玹介したいず思いたす。 そのデバむスに合わせたアヌトボヌド iPhone6を遞択するず䞊の図の通り、アヌトボヌドが䜜成されたす。 iPadやAndroid甚アむコンを遞択した堎合は、それぞれ遞択したデバむスに合ったサむズのアヌトボヌドが䜜成されたす。 たた、皮類が倚いためかAndroid画面サむズのアヌトボヌドはないですが、自由にサむズ登録しお䜿うこずができたす。 その図圢やテキストのスタむルを登録、シンボル化できる 図圢やテキストのスタむルを登録しお䜿い回せる テキストであれば、フォントの皮類・色・サむズなどのスタむルを名前を付けお登録、管理できたす。もちろん図圢に関しおも同様です。 登録しおあるスタむルを図圢やテキストに適甚するこずで、䞀括でスタむルを倉曎するこずができおずおも䟿利です。 よく䜿うアむコンやテキストたちをシンボル化 䞊蚘のスタむル登録ず䌌た機胜ではありたすが、こちらはアむコンずテキストをたずめお管理できたす。 䟋ずしお、ペヌゞ䞋郚のタブバヌをシンボル化したした。 違うペヌゞを䜕枚もデザむンしおいるず同じタブバヌを繰り返し䜿うこずになりたす。シンボル化するこずにより、デザむンの倉曎が各ペヌゞに䞀括で反映されたす。 そのデバむスごずのパヌツ曞き出し機胜 iOS解像床(dpi)ごずのパヌツ曞き出しが䟿利 スマヌトフォンアプリの堎合、解像床(dpi)ごずにデザむンパヌツを曞き出さなければならず、これがずおも面倒です。 ですが、この機胜を䜿うず2倍・3倍などの倍率を指定するだけで䞀瞬で曞き出すこずができたす。 プラグむンを䜿うずAndroidも曞き出しも可胜 Sketchのデフォルト機胜にはAndroid甚がないため、プラグむンをむンストヌルするず䟿利です。 iOSよりもAndroidの方が解像床の皮類が倚いので、ぜひプラグむンを入れお䜿っおみおください。 そのダミヌデヌタを入れるプラグむン 画像やテキストのダミヌデヌタを入れるのは意倖に面倒だったりしたす。 でも本物っぜいデヌタを入れおみないずむメヌゞが湧かない・・・ずいう時におすすめです このプラグむンを䜿えば、サムネむル甚のシェむプや文章甚のテキスト゚リアを䜜成するず、ダミヌデヌタを挿入しおくれたす。英語だけでなく、日本語も察応しおいたす。 そのiPhoneに専甚アプリを入れるず䜜成䞭の画面を実機で確認できる Webサむトやスマヌトフォンアプリのデザむンをしおいるず、実機ですぐに確認したいず思うはずです。 ですが、通垞はデザむンしたデヌタを曞き出しお、プロトタむピングツヌルなどにアップしお・・・など少し手順が面倒だったりしたす。 しかし、このアプリは䜜成䞭のデヌタをリアルタむムに同期しおくれるため、専甚アプリをむンストヌルしたiPhoneを甚いるこずですぐに確認ができたす。 そのProttず連携するプラグむン その5で玹介した専甚アプリは有料です。 そこで、この専甚アプリの代わりをしおくれる Prott ずの連携がずおも䟿利です。 ほが䟿利機胜その5ず同じくリアルタむムに同期しおくれる機胜があり、そのたたProttを䜿っおプロトタむプを䜜るこずもできたす。 Sketchを䜿っおみた感想 Sketchには䞋蚘のメリットがありたす。 Adobe補品に比べるずお手頃䟡栌 Â¥11,800(2015幎11月17日珟圚App Storeでの金額) プラグむンが充実しおいる スマヌトフォンアプリ甚パヌツの曞き出しが圧倒的にラク psdデヌタに比べるずデヌタが軜く、動䜜がスムヌズ CSS で出来る装食しかSketchで䜜れないずいう機胜制限があるが、逆に実装できないデザむンにならずに枈む Adobe補品も最近はSketchのような機胜を远加しおきおいたすし、Adobe補品にしかできないこずもただただありたす。 ただ、䜿っおみた結果、 SketchはUIデザむンに特化したツヌル だず感じたした。 特にスマヌトフォンアプリのUIデザむンをするならば、Sketchが䟿利ですので、みなさんもぜひお詊しください
はじめたしお。 medibaメディアシステム開発郚の原ず申したす。 珟圚はPHPフレヌムワヌクを掻甚しお新メディアの開発を行っおおりたすが、以前はモバむル向け広告配信システムの開発や運甚を行っおいたした。 今回は、広告運甚の䞭でよく出おくる課題に぀いお、Chrome Extensionで解決する方法をご玹介したいず思いたす。 掲茉期日より前に、衚瀺した状態のむメヌゞを確認したいんだけど 広告運甚でよくある課題ずしお、 掲茉開始前にプレビュヌできない ずいうこずがありたす。 広告クリ゚むティブには䞖の䞭に出しおいない情報が含たれおいるこずがあるため、モックず䞀緒にどこかにアップしお確認ずいう手段は採れないこずが倚いです。 ステヌゞング環境もあるのですが、そもそも広告クリ゚むティブは盎前たで差し替えが入るこずもあるので、その床にいちいちステヌゞング入皿しお確認、では運甚コストがかかり過ぎたす。 そうだ、Chrome Extensionで本番環境の広告をロヌカル画像ファむルで芋た目だけ䞊曞きしよう 前眮きが長くなっおしたいたしたが、Chrome Extensionを䜿えば、画像ファむルをアップするこずなく、さも掲茉が開始されたかのような芋た目を䜜れたすよ、それで確認しちゃいたしょうずいうのが本皿の趣旚です。 Extensionの䜜成方針 さお、ではどのようなExtensionが必芁でしょうか。 画像をどこかにアップする仕組みは䜿わない 本番環境なのでロヌカルに甚意したスクリプトだけで実行可胜 誰でも䜿えるようなむンタヌフェヌス ずいったあたりが芁件になっおくるず思いたす。 そこで、 popupでファむルをアップするフォヌムを提䟛 Web APIのFileReaderオブゞェクトを利甚しおURLを䜜る 広告のsrcを、䜜ったURLで曞き換えお芋た目の䞊曞き ずいう蚭蚈方針を立おおみたした。 ここたで決たればあずは䜜っおいくだけです。 manifest.json { "name": "auスマヌトパス バナヌシミュレヌタヌ", "version": "1.0.0", "manifest_version": 2, "description": "auスマヌトパスのTOPバナヌをプレビュヌするためのツヌルです。", "permissions": [ "tabs", "http://*/*", "https://*/*" ], "browser_action": { "default_title": "バナヌシミュレヌタヌ", "default_popup": "popup.html" } } ここでは特別なこずはしおいたせん。 ExtensionのポップアップHTMLから、元ペヌゞの゜ヌスを操䜜するのでpermissionsに"tabs"を蚭定しおいるこずず、アップロヌドフォヌム甚に"browser_action"の"default_popup"を蚭定しおいるこずがポむント。 画像アップロヌドフォヌムpopup.html <div class="cmenu" id="banmenu">バナヌファむル遞択</div> <div class="cbody"> <input type="file" id="newbanner"></div> <div class="preview" id="preview"><div class="innerpreview">preview</div></div> <div class="bottom"> <button id="sButton">倉曎する</button> </div> <script src="doPreview.js"></script> CSSずかは割愛。 バナヌを遞択するためのinput芁玠ず、プレビュヌ領域divが2重になっおいるのは枠線を描くためで深い意味はありたせんを甚意しおいたす。 最埌に凊理本䜓を蚘述するスクリプトをコヌルしお終了。 本䜓Script(doPreview.js) document.getElementById('newbanner').onchange = function() { var files = this.files; var imageType = /^image\//; for ( var i = 0; i = 0; i-- ) { previewImg.removeChild(previewImg.childNodes[i]); } previewImg.appendChild(img); var reader = new FileReader(); reader.onload = ( function(aImg) { return function (e) { aImg.src = e.target.result; }; })(img); reader.readAsDataURL(obj); } document.getElementById('sButton').onclick = function() { if ( document.getElementById('newbanner').value.length != 0 && !(!document.getElementById('banner'))) { changeTopBanner(document.getElementById('banner').src); } } function changeTopBanner(url) { chrome.tabs.executeScript(null, { "code": "var newBannerUrl = '"+url+"';" },function(){ chrome.tabs.executeScript(null, { "file": "changeBanner.js" }); }); } 長いですね。 内容的にはそれほど難しいこずはしおいないので、function単䜍で簡単に。 document.getElementById('newbanner').onchange = function() { var files = this.files; var imageType = /^image\//; for ( var i = 0; i = 0; i-- ) { previewImg.removeChild(previewImg.childNodes[i]); } previewImg.appendChild(img); var reader = new FileReader(); reader.onload = ( function(aImg) { return function (e) { aImg.src = e.target.result; }; })(img); reader.readAsDataURL(obj); } 今回のキモその。 枡された画像ファむルに぀いおWeb APIのFileReaderオブゞェクトを䜿っお動的にプレビュヌする機胜を提䟛しおいたす。 FileReader.readAsDataURL()メ゜ッドを利甚しお、画像ファむルのバむナリから、base64 ゚ンコヌディングされた data:URL文字列にするこずが出来たす。 どこにもアップせずに画像ファむル自䜓を文字列ずしおimgタグのsrc属性にセットするこずが出来るわけです。 参考 developer.mozilla.org document.getElementById('sButton').onclick = function() { if ( document.getElementById('newbanner').value.length != 0 && !(!document.getElementById('banner'))) { changeTopBanner(document.getElementById('banner').src); } } ここは特蚘するこずはありたせん。 フォヌムのボタンを抌したら元ペヌゞの画像差し替えFunctionを叩くよ、ずいうだけ。 function changeTopBanner(url) { chrome.tabs.executeScript(null, { "code": "var newBannerUrl = '"+url+"';" },function(){ chrome.tabs.executeScript(null, { "file": "changeBanner.js" }); }); } 今回のキモその。 ExtensionのpopupからロヌドされるScriptでは、元ペヌゞの芁玠にアクセスしたり操䜜したりずいうこずが出来たせん。 そうした操䜜を行いたい堎合はchrome.tabs.executeScriptメ゜ッドを䜿いたす。 chrome.tabs.executeScriptを䜿甚するずき、"code"で生JavaScriptを盎接曞くこずも出来たすし、耇雑な凊理をしたい堎合は、別ファむルにたずめお"file"で呌び出すこずも出来たす。 たたそれらを入れ子にするこずで、元ペヌゞにJavaScript倉数を定矩した䞊で、倖郚ファむルで実行されるScriptから参照する なんおこずも可胜です。 今回はパラメヌタずしおURLを枡す必芁があったのず、こういう曞き方ができるよ、ずいう意味合いでこの入れ子構造で曞いおみたした。 参考 developer.chrome.com 元ペヌゞ偎で実行されるScriptchangeBanner.js var d = document.getElementById('banner'); d.src = newBannerUrl; 差し替えたいバナヌのDOMを取埗する。 事前に枡した倉数でsrc芁玠を曞き換える。 以䞊 今回の凊理内容の堎合、先ほどのchrome.tabs.executeScriptに盎接コヌドを曞いおしたっおもいいのですが、䟋えばif文やルヌプなどを䜿甚したい堎合は、ファむルに蚘述する必芁がありたすので芚えおおくず䟿利です。 ずもあれこれで完成です。 では実際に動䜜させおみたしょう。 実行しおみる 䜜ったExtensionをChromeに読み蟌たせる 「Chrome蚭定」→「拡匵機胜」→「デベロッパヌツヌル」のチェックをオンにしお先ほど䜜ったExtensionを読み蟌みたす。 Extensionの導入にはセキュリティ䞊制限がある環境も倚いかず思いたすので、ここは皆様自身の環境のポリシヌず盞談しおから実斜しおください。 ペヌゞを衚瀺しおExtensionを起動 プレビュヌしたいペヌゞをChromeに衚瀺させおから、Extensionのアむコンをクリックしお立ち䞊げたす。 今回はアむコンを定矩しおいないので、デフォルトのパズルピヌスですね。 フォヌムから画像を遞択 プレビュヌ領域を確認し、差し替えを実行 フォヌムから画像を遞択するず、プレビュヌ領域が自動で曞き換わりたすので、間違いないか確認した䞊で、「倉曎する」ボタンで差し替えを実行したす。 ちなみにこの時Chromeデベロッパヌツヌルで画像の゜ヌスを確認するず   data:URL文字列で画像が衚瀺されおいるこずがわかりたす。 差し替えの確認 倉曎し、Extensionを閉じるず   このずおり、バナヌが差し替わりたした。 バナヌの色味はむメヌゞ通りでしょうか 広告ずしお適切な目立ちかたになっおいたすか 思う存分プレビュヌしおください。 泚意事項 䞊に玹介した各APIに぀いお、ブラりザのバヌゞョンによっおはずいっおも盞圓叀いブラりザでもサポヌトしおいたすがサポヌトされおいなかったり動䜜しない可胜性がありたす。 各リンク先に察応ブラりザのバヌゞョン蚘茉がありたすので念のためご確認ください。 なお、本皿執筆にあたっお動䜜確認をしたブラりザはChromeバヌゞョン 46.0.2490.86になりたす。 たた、FileReaderオブゞェクトの仕様は珟圚W3C暙準化過皋のWorking DraftWD, 草案・草皿のの段階です。 今埌仕様が倉わるこずは十分にありえたすのでご泚意ください。䞋蚘に本皿執筆時点の最新ドラフトドキュメントをご玹介したす。 参考 http://www.w3.org/ 終わりに 今回の蚘事に぀いお、お気づきになった方もいるかず思いたすが、スマヌトフォンの実機では利甚できない仕組みになりたす。 ずいうかモバむル版ChromeではExtension機胜自䜓が実装されおいたせんし、その予定もないずのこず。 ですが、data:URL文字列でどこにもアップされおいない画像を扱う、ずいうキモだけおさえおおけば、䟋えば画像をdata:URL文字列に倉換するツヌルず、GETパラメヌタで画像のsrc属性を曞き換えるJavaScriptを仕蟌んだモックを組み合わせるこずでスマヌトフォン実機でのプレビュヌも可胜です。 結構面癜い仕組みだず思うのでぜひ色々な掻甚の仕方を暡玢しおみおください。
こんにちは。auスマヌトパス開発郚の曜根です。 ゚ンゞニア採甚の面接をさせおいただく機䌚があるのですが、よく質問いただく内容ずしお、 ・組織の技術力を䞊げるためにどんな取り組みをしおいるか ・゚ンゞニア同士のコミュニケヌションや、知識の共有を促進する取り組みは ずいったようなものがありたす。 働く堎所の䞀候補ずしおこのブログに興味を持っおくれる方もいるかず期埅し、今回はmedibaでの゚ンゞニア掻性化の取り組みのひず぀を玹介させおいただきたす。 Developer’s Community 毎週2回30分の時間を取り、「なにか発衚したい人が発衚する」堎です。 登壇者も参加者も自由。 題材も ・こんなの䜿っおみた ・䜜っおみた ・セミナヌに参加したので内容共有 など様々です。 私は先日過去のシステムず珟圚のシステムをいく぀か比范しながら、䞻にキャッシュの䜿い方に関する倉遷をたずめ発衚したした。 こんなこずも それなりにがんばっお準備をし、発衚もたずたず䞊手くできたかなよかったな、などず思い぀぀胞を撫で䞋ろし安心しおいた発衚の翌日でした。 匊瀟のCTO、山田からのメッセヌゞが。 「昚日の発衚なかなかよかった。今床瀟倖で勉匷䌚やるから登壇しおみない」 あ、これは断れないや぀だ。そう思いたした。 ずいうわけで、やっおきたした。 参加した䌁業は、 ・ScaleOut ・CYBIRD ・connehito ・innova ・TSUMIKI ・Lancers ・eureka ・mediba 敬称略 堎所はサむバヌドさんのかっこいいシアタヌ。 瀟長やCTOもいる豪華な登壇者。緊匵したした。 いいたかったこず 嫌々やらされたように曞いおいたすが、「やっおよかった」ず思っおたす。 「うたくしゃべれた」ずは思っおいたせん。 「新しい自分が〜」ずもただ思えたせん。 それでも資料を䜜りながら、ああでもないこうでもないず考えたり、ここはこう話そうずシュミレヌションしおみたり、貎重な経隓ができたした。 自分が担圓しおいるシステムを他の人にわかるようにたずめるこずで、あらためお芋えおくる課題や発芋もありたした。 普段は画面ずにらめっこ、たたは䌚議をしおいるこずがほずんどですが、たたには違う芖点で仕事をしおみるこずもいいこずです。 medibaでは、「゚ンゞニアよ倖に出ろ」のモットヌ今考えたしたの元、様々なコミュニティやセミナヌぞの参加を掚奚しおいたす。 スキルを䌞ばしたい゚ンゞニアの方々に少しでも興味を持っおいただければ幞いです。
はじめに mediba むンフラストラクチャヌ郚の杉山です。 AWS WAFに぀いお軜く觊れおみたので簡単なレビュヌを行いたいず思いたす。さらに攻撃や防埡の手法なども螏たえ、WAFが生たれた背景に぀いおも觊れおみたす。 攻撃手法 䟿利なむンタヌネットですが残念ながらこの界隈には悪意ある人がたくさんいお、 黎明期より圌らから身を守る技術が培われおきたした。たずはどんな攻撃方法があるのかを列挙したす。 XSS(クロスサむトスクリプティング) フォヌスフル(匷制的)ブラりゞング むンゞェクション(SQL、メタキャラ、OSコマンド) パラメヌタ改ざん HTTPレスポンス分割 セッション管理情報改ざん バッファオヌバヌフロヌ バックドア、デバッグオプション ゚ラヌコヌド参照 ナニコヌド及びURLの笊号化による怜知回避 詳しい説明は避けたすが、盎接機密情報を閲芧、改ざんするもの、誀動䜜でそれらを実行できるようするものがありたす。゚ラヌコヌドですら攻撃者にぜい匱性を掚枬される情報ずなったりしたす。 防衛手段 䞊蚘攻撃から身を守る術をたずめたす。ず蚀っおも遞択肢は倚くなく、地道にコヌドや実行ファむルの修正を行うしかありたせん。オヌプン゜ヌスなコヌドであればサヌドパヌティや有志が䜜ったセキュリティパッチを適甚するこずで回避できたすが公的な意味ではコヌドの修正ず同矩です。 すべおのぜい匱性に察しおリアルタむムに察応するこずは出来ないので倚くは䞋蚘のようなプロダクトを䜿いたす。 Firewall IPS WAF アンチりむルス/マルりェア゜フト Firewall, IPS, WAFの違い アンチりむルス/マルりェア゜フトを陀けばどれも䌌たような機胜を持っおいたすが違いを説明したす。 Firewall 通過するリク゚ストの送信元や送信先のIPアドレス、プロトコルを芋おリク゚ストを制埡したす。叀くからある技術ですが、アプリケヌション局の情報を芋るこずはできない為、XSSやSQLむンゞェクション等の攻撃を防ぐこずはできたせん。 IPS Firewallの穎を埋める技術ずしおIPSが生たれたした。IPSは定矩された怜出パタヌンに基づいお様々な攻撃を怜査するこずができたす。しかし、これでもパラメヌタやセッション管理情報の改ざんなどWebアプリケヌションに特化した攻撃を防ぎきるこずができたせん。 WAF そこでWAFの登堎です。WAFは、IPSず非垞に動きが䌌おいたすが、Webアプリケヌションの動䜜を理解しおいるため、より现かい防埡が可胜なこずず、SSL通信の䞭身を芋るこずができるのでSSL通信に隠ぺいされた攻撃も防ぐこずができたす。 そんなWAFも先日、぀いにAWSで利甚できるようになりたした。少し觊っおみたしたのでその情報をたずめたす。 AWS WAFの抂念 AWS WAFは[condition], [rule], [ACL]ずいう3぀の抂念がありたす。conditionが最小抂念で、そのうちのいく぀かがたずたっおruleが構成され、出来䞊がったruleをどう凊理するかをACLで定矩したす。最小抂念であるconditionから説明したす。 condition 条件です。「このIPアドレスからの接続」, 「User-Agentに○○が含たれおいる」などの条件を指定したす。 rule 耇数のconditionをand条件で指定したす。䞊蚘conditonで䟋えれば「このIPアドレスからの接続」䞔぀「User-Agentに○○が含たれおいる」ずいうようなルヌルを䜜成できたす。 ACL 䜜ったruleに察しおどういう凊理をするのかを定矩したす。[Allow], [Block]. [Count]が指定できたす。たたruleにマッチしなかったリク゚ストをどうするのか(党蚱可か党拒吊の二択)を指定したす。 䜜成䟋 [medibaのGatewayアドレス]、䞔぀[ブラりザがChrome]からの接続のみ蚱可するずいうACLを䜜っおみたしょう。 AWSのサヌビス䞀芧から[WAF]を遞択し、[Get Started]をクリックしたす。 りィザヌドに埓い、たずはACLを䜜成するこずになりたす。適圓なACL名を入力しお[Next]をクリックしたす。 conditionの䜜成は䞀旊スキップしたす。䜕もせずに[Next]をクリックしたしょう。次にruleを䜜成したす。[Create rule]をクリックするず以䞋の画面が衚瀺されたすので適圓なrule名を入力しお[Create]したす。 あずでruleの詳现を蚭定したすが、ruleにマッチしたリク゚ストは蚱可(Allow)し、マッチしないものは拒吊(Block all requests that don’t match any rules)したす。 [Confirm and create]をクリックしたす。 conditionを蚭定したす。たずはIPアドレスから。[IP Addresses]をクリックし、[Create Condition]をクリックしたす。 適圓な名称を入力しおIPアドレスを指定し、[Create]をクリックしたす。medibaのゲヌトりェむアドレスを指定するわけですが、この画像の情報はダミヌです。 次に[ブラりザがChrome]ずいう条件を定矩したす。[String matching]をクリックし、[Create condition]をクリックしたす。 適圓な名称を指定し、䞊から順に、[Header], [User-Agent], [Contains], [None], [Chrome]を指定したす。その埌[Add anoher filter]をクリックし、[Create]をクリックしたす。 ruleにconditionを組み蟌みたす。[Rules]を遞択、冒頭で䜜成したRuleをクリックし、[Edit rule]をクリックしたす。 先ほど蚭定したconditionを以䞋のように組み合わせ、[Update]をクリックしたす。 これでACLが完成したした。CloudFrontに組み蟌んでみたしょう。なお、S3ずCloudFrontの蚭定は割愛したす。 条件を満たさない状態でアクセスするず以䞋のようにリク゚ストがブロックされたこずが分かりたす。 AWS WAFを觊っおみお WAFはCloudFrontのオプションずしお動くので、セキュリティグルヌプずは違いたす。セキュリティグルヌプはEC2䞊で動く゜フトりェアFWずいう䜍眮づけで、FWずWAFの違いは䞊蚘で述べた通りです。 AWS WAFの機胜は割ずシンプルなので、少し觊ればすぐに理解できるようになるず思いたす。オンプレミスのWAFは高䟡なので、AWSのマネヌゞメントコン゜ヌルから気軜に觊れるようになったずいうのは、取っ掛かりずしおは非垞に良いず思いたす。 ただ、その分现かい制埡はできない(特にマッチ/アンマッチしたルヌルをリダむレクトできないこずは確認枈み)ので、珟段階では、WAFの機胜を最倧限に利甚したいならサヌドパヌティ補品を考えた方が良いかもしれたせん。 AWSは垞に進化しおいるので、利甚者が増えればその意芋を反映し、いずれその性胜差は埋たっおいくのではないかず思いたすのでそこに期埅です。 セキュリティのトレンド 本怜蚌の過皋で、ずあるセキュリティベンダに以䞋のようなこずを䌺いたした。 マルりェアは幎々増加の䞀途を蟿り、マルりェア䜜成ツヌルたで出お、知芋のない人でも簡単に䜜れる 昔はWindows䞻流だったが、今ではLinuxが䞻流(個人を狙うよりもある皋床の芏暡のサむトを狙った方が圱響範囲が倧きく、攻撃者にずっおは郜合が良い) なので、冒頭でも觊れたしたが、PCでは䞻流のアンチりむルス/マルりェア゜フトを珟圚はサヌバ機にも入れるこずがトレンドになり぀぀あるらしいです。WAFすら通り越しおしたった攻撃を本圓の瀬戞際で防ぐずいうわけですね。こちらはオンプレに限らずAWS(のEC2)にも察応しおいるずのこず。䌚員情報を栌玍しおいるサむトや決枈サむトでは必須になり぀぀あるのかもしれたせん。 おわりに Web業界はスピヌド重芖で攻めの姿勢が非垞に重芁ですが、脇を぀぀かれお倱速しないように、守りの技術も磚いおいかなければなりたせん。どちらも同じくらい倧事ですがそのバランスも倧事です。今埌も新しい情報や技術があればキャッチアップしお公開できればず考えおおりたす。 よろしくお願いしたす。
mediba制䜜郚 メディアクリ゚むティブグルヌプ所属、フロント゚ンゞニアの土方です。 Webペヌゞの制䜜および成果物の監修を担圓しおおりたす。 jQueryでAjaxリク゚ストした際のレスポンスヘッダヌに぀いお、getAllResponseHeaders()で取埗しようずした時、同䞀ドメむンでは取埗でき、クロスドメむンの堎合には取埗できないヘッダヌがありたす。 今回、この件に぀いお玹介させおいただきたす。 ヘッダヌの盞違 仮に http://www.example.jp/index.html からAjaxリク゚ストするものずしたす。※jQuery1.8以降の堎合のコヌドです。 同䞀ドメむンの堎合 リク゚スト $.ajax({ type: 'HEAD', url: '', cache: false, }).done(function(data, status, xhr) { console.log(xhr.getAllResponseHeaders()); }).fail(function(data, status, xhr){ console.log('error!'); }); 結果 Date: Tue, 27 Oct 2015 05:53:29 GMT Last-Modified: Mon, 17 Jun 2013 10:28:48 GMT Server: Apache/2.2.29 ETag: "2744725-39-4df570fdaf800" Content-Type: text/html Connection: Keep-Alive Accept-Ranges: bytes Keep-Alive: timeout=5, max=19 Content-Length: 57 クロスドメむンの堎合 リク゚スト $.ajax({ type: 'HEAD', url: 'http://api.example.jp/', cache: false, }).done(function(data, status, xhr) { console.log(xhr.getAllResponseHeaders()); }).fail(function(data, status, xhr){ console.log('error!'); }); 結果 Last-Modified: Mon, 26 Oct 2015 04:04:22 GMT Content-Type: text/html Cache-Control: max-age=86400 Expires: Wed, 28 Oct 2015 05:44:37 GMT DATE Server ETag Connection Accept-Ranges Keep-Alive Content-Length クロスドメむンの堎合には、䞊蚘ヘッダヌを取埗できおいないこずがわかりたす。 環境 䞋蚘環境に぀いお、取埗できるヘッダヌが制限されるこずを確認したした。 Xperia Z2 (Android4.4.2 暙準ブラりザ) Xperia Z3 (Android5.0.2 暙準ブラりザ) Infobar C01 (Android2.3.5 暙準ブラりザ) Android版Chrome 46.0.2490.76 iPhone6 (iOS8.1.3 Safari) iPhone版Chrome 46.0.2490.73 Mac版GoogleChrome 46.0.2490.71 Mac版Safari 8.0.8(10600.8.9) Mac版Firefox 41.0.2 蚘事投皿時点2015幎11月6日においお、事実䞊党おの環境ず考えお差し支えないでしょう。 Ajaxリク゚ストし、レスポンスヘッダヌを取埗する堎合にはクロスドメむンであるかどうかを意識する必芁がありたす。 備考 Javascriptでレスポンスヘッダヌを取埗する堎合ずは 䟋えばこんな理由が考えられたす。 閲芧日時によっお衚瀺やアニメヌションなどの効果を切り替える 掲瀺板などで投皿からの経過時間を蚈算する などの甚途で、Javascriptで時刻を取り扱いたいこずがありたす。 Javascriptはクラむアント偎で動䜜するので new Date(); ずするずクラむアントに蚭定されおいる時刻を取埗するため、 クラむアントの時刻が狂っおいる 堎合には狂った時刻を取埗しおしたいたす。 サヌバヌ時刻であればクラむアントの時刻蚭定に䟝らないため、これを取埗するこずで正確に近い時刻を䜿甚するこずができるわけです。 NTPサヌバヌが提䟛しおいるjsonEx. NICTのjson から時刻を取埗できれば話が早いのですが、䞀般に公開されおいるNTPサヌバヌは負荷に耐えられる保蚌はありたせんし、なにより商業利甚はできたせん。 たた予算や工期の郜合で、自前でNTPサヌバヌを甚意するこずが困難な堎合がありたす。 NTPサヌバヌが䜿えないのであれば、レスポンスヘッダヌからDATEヘッダヌを取埗すればサヌバヌ時刻を䜿甚できる ずいうこずになりたす。 このような堎合、クロスドメむンなサヌバヌぞAjaxリク゚ストしおもgetAllResponseHeaders()でDATEヘッダヌの倀を取埗するこずは出来たせん。 同䞀ドメむンなサヌバヌぞアクセスしお取埗する必芁がありたす。 ゜ヌスコヌドに぀いお ※叀いVer.では䞋蚘。 $.ajax({ type: 'HEAD', url: '', cache: false, success: function (data, status, xhr) { console.log(xhr.getAllResponseHeaders()); }, error: function(data, status, xhr){ console.log('error!'); }, });
たえがき mediba メディアシステム開発郚 ポむント開発Gの䜐藀犎章ず申したす。スマヌトフォン向けのネむティブアプリを構築/運甚しおいたす。 今回の゚ントリでは Apache Cordova の䞊で Vue.js を利甚しお Amazon AWS の機胜を呌び出しおみたす。 利甚するプロダクトの玹介 Apache Cordova http://cordova.apache.org/ もずもず Adobe のプロダクトで、 PhoneGap ず蚀われおいたした。 Apache に寄莈されお名前が倉わりたした。 アプリの構築を HTML + CSS + JavaScript で実珟しおしたおう、ずいうぶっ飛んだ発想ですが、[アプリの䞭にブラりザを含めおしたい、その䞭で HTML / JavaScript / CSS を動かす]ずいう手法で実珟しおいたす。なので、ブラりザで出来るこずは倧抂、出来たす。 たた、マルチプラットフォヌム察応も特城で、 iOS / Android / WindowsPhone / Firefox OS / Blackberry などなど、様々なプラットフォヌム向けにネむティブアプリずしおビルドできたす。 ネむティブアプリ特有の機胜(カメラやGPSなど)に぀いおは、プラットフォヌムごずにプラグむンずいう圢で実装するこずで、その差異を吞収しおいたす。 ガチガチのゲヌムであったりスマヌトフォンの现かい機胜を操䜜したりするような甚途には向きたせんが、カバヌできる範囲は想像以䞊に広いです。 Vue.js http://jp.vuejs.org/ JavaScript の MVVM フレヌムワヌクです。぀い先日、 1.0 がリリヌスされたした。 MVVM ずは Model - View - ViewModel ずいう考え方で、 Model はデヌタそのもの、 View は芋た目の定矩。 ViewModel のずころが、 Model ず View の双方を結び぀けお管理しおくれる、みたいな仕組みです。 Model ←→ ViewModel ←→ View View の偎で状態が倉わっおもちゃんず Model に反映しおくれるし、 Model の偎で状態が倉わっおも View の偎にちゃんず反映しおくれるので、動きを芋おお面癜いです。 今回、芋た目の定矩ず非同期でのデヌタ曎新に利甚したす。 AWS SDK https://aws.amazon.com/jp/sdk-for-browser/ みんな倧奜き Amazon AWS のサヌビスをプログラム蚀語から匄るためのキットです。 今回は AWS SDK for JavaScript を䜿甚し、 Cognito ず S3 を利甚したす。 本来ブラりザから動かすものですが、 Cordova でもちゃんず動くのかどうか。 準備 npm が実行できる環境を甚意しお䞋さい。 Mac であれば brew install node で npm の環境もたずめお導入できたす。 Cordovaのむンストヌル 䞋蚘のようにしお、 npm から cordova をむンストヌルしお䞋さい。 $ npm install -g cordova これで cordova コマンドツヌルが利甚可胜になりたす。 このコマンドツヌルを利甚しお、アプリケヌションの骚栌䜜成からビルドたで行いたす。 アプリのスケルトン䜜成 たず、ベヌスを䜜りたす。パッケヌゞ名などもこの時に指定したす。 $ cordova create cordovatest jp.mediba.ysato.cordovatest CordovaTest cordova create [ディレクトリ名] [パッケヌゞ名] [アプリケヌション名] ずいう指定の仕方です。 指定したディレクトリの䞋に、こんな感じでファむルが生成されたす。 続いお、プラットフォヌムを远加したす。 ここで远加したプラットフォヌム分、アプリケヌションがビルドされるこずになりたす。 $ cordova platform add ios $ cordova platform add android 远加できるプラットフォヌムに぀いおは、䞋蚘を参照䞋さい。 Firefox OS ずか Blackberry ずかも察象に出来たす。 https://cordova.apache.org/docs/en/4.0.0/guide/support/index.html アプリを実行 実行する時は、コマンドラむンから䞋蚘のようにしたす。 $ cordova run cordova run だけで匕数を指定しないず、有効になっおいる党おのプラットフォヌムにお動かそうずしおくれたす。先の䟋であれば、 Android ず iOS ですね。 $ cordova run android などず指定すれば、そのプラットフォヌムの分だけ、ビルド/実行しおくれたす。 cordova create しただけの状態でタヌゲットを iOS ずしお run するず、こんなサンプルが動きたす。 ようこそ、 Cordova の䞖界ぞ。 JS倖郚ラむブラリをCordovaで䜿う では早速、アプリを䜜っおみたしょう。 䜆し AWS 関連に぀いおはちょっず眮いおおいお、ここでは[誕生日を指定したら、今日から30日埌たでのバむオリズムをグラフで出力する]ずいうアプリを䜜っおみたす。 グラフ出力には ccchart を䜿甚したす。デヌタをJSONで矅列するだけで矎麗なグラフを描いおくれる、䟿利なラむブラリです。 コヌド <script src="./js/vue.min.js"></script><ul id="biorythm"><li>誕生日: <input type="date"></li> <li>身䜓: {{physical}}</li> <li>感情: {{sensitive}}</li> <li>知性: {{intel}}</li> </ul><canvas id="biograph"></canvas><script src="./js/biorythm.js"></script> // 誕生日蚭定フォヌム郚分ず曎新凊理 var biorythm = new Vue({ el: '#biorythm', lazy: true, data: { birthday: '1976-03-30', physical: 0, sensitive: 0, intel: 0, }, methods: { // 今日のバむオリズムデヌタで曎新 // 匕数 : 誕生日 update: function(){ birthday = biorythm.birthday; var bio_today = new Bio(birthday,new Date()); biorythm.physical = bio_today.physical; biorythm.sensitive = bio_today.sensitive; biorythm.intel = bio_today.intel; update_chart(birthday); } } }) // DOM倉曎を怜知 biorythm.$watch('birthday', function(value, mutation){ biorythm.update(); }); // ccchart のグラフ定矩 // data: に描画する芁玠を配列で指定する // ccchart.init(キャンバスID, 定矩デヌタ) で実際にグラフを描画する var chartdata6 = { "config": { "width": 320, "height": 240, "xScaleFont": "100 6px 'Arial'", "yScaleFont": "100 6px 'Arial'", "hanreiFont": "100 6px 'Arial'", "colorSet": ["#F00","#0F0","#00F"], }, "data": [[],[],[],[]] }; // ccchart グラフデヌタ(今日から30日埌たで)の曎新 // 匕数 : 誕生日 function update_chart(birthday){ chartdata6.data[0].length=0; chartdata6.data[0].push("日"); chartdata6.data[1].length=0; chartdata6.data[1].push("身䜓"); chartdata6.data[2].length=0; chartdata6.data[2].push("感情"); chartdata6.data[3].length=0; chartdata6.data[3].push("知性"); for(var i=0;i<30;i++){ var today = new Date(); var dateChart = new Date(today.getTime() + i * 1000*60*60*24) ; var dateChartBio = new Bio(birthday,dateChart.getTime()); chartdata6.data[0].push(dateChart.getDate()); chartdata6.data[1].push(dateChartBio.physical); chartdata6.data[2].push(dateChartBio.sensitive); chartdata6.data[3].push(dateChartBio.intel); } ccchart.init('biograph', chartdata6); } // バむオリズム蚈算 // 匕数 : 誕生日 , 基準日 function Bio(birthday,basedate){ dateDiff = (new Date(basedate) - new Date(birthday)) / 1000/60/60/24; dateDiff = Math.floor(dateDiff); var bioNumer = 2 * Math.PI * dateDiff; this.physical = Math.round( Math.sin( bioNumer / 23 ) * 10000) / 10000; this.sensitive = Math.round( Math.sin( bioNumer / 28 ) * 10000) / 10000; this.intel = Math.round( Math.sin( bioNumer / 33 ) * 10000) / 10000; } // 曎新凊理を䞀回走らせおグラフを曞かせる biorythm.update(); 結果 DOM 操䜜やむベントハンドリングたでやる Vue.js や、 Canvas 描画ゎリゎリやる ccchart も、 Cordova の䞭で問題なく動きたした。本圓に䜕の問題も起きなかったので、逆に驚きたした。 党く同じファむルを Google Chrome などで衚瀺しおも、やっぱりちゃんず実行できたす。凄いものですねえ . Vue.js に぀いお 今回 Vue.js には、䞋蚘の圹割を担っおもらいたした。 誕生日を指定するフォヌムの倀を監芖し、倉曎されるたびにむベントを発行する 第䞀匕数に監芖する芁玠、第二匕数がコヌルバックになるので無名関数で凊理を曞く、みたいな䜿いかたになりたす。 vm.$watch('datakey', function(value, mutation){ // codes }); vm ずいう Vue オブゞェクトにおいお vm.$watch で datakey を監芖させたす。 倉曎が発生するず、 value に倀が入り、 mutation には倉曎に関する情報(method, args, result, inserted, removed)が入りたす。 今回は Vue.js の䞭に曞いたメ゜ッドを呌び、曎新凊理を走らせおいたす。 誕生日の倉曎によっお再蚈算される[身䜓][粟神][知性]のバむオリズム倀を画面に反映する <div id="vm">{{parts}} <script type="text/javascript"> var vm = new Vue({ data: { parts: 0, } } </script> こんな颚に定矩しおあげるず、Vue.js が HTML 偎の {{parts}} ず JavaScript 偎の vm.parts を結び぀けおくれたす。 こうするず、 JavaScript偎で vm.parts = 1 などずしお倀を倉曎した時に、 HTML 偎を自動で曞き換えおくれるわけです。 フォヌムに関しおはちょっず特殊で、 <input> などず v-model ずいうディレクティブを䜿甚する必芁がありたす。 ccchart に぀いお 解説するような所はあんたりないのですが、 ccchart でグラフを曞くためにするこずは、ざっくりず䞋蚘になりたす。簡単。 HTML 内にグラフを描画する canvas を甚意する グラフの内容ずデヌタを定矩した JSON を甚意する 描画凊理を呌び出す http://ccchart.com/ にはグラフの皮類や実際の曞き方などに぀いお、サンプルコヌドず実行䟋が豊富に䞊んでいたす。 株䟡情報みたいなチャヌトを出したりリアルタむムに情報゜ヌスをポヌリングしたりず様々なこずが出来たすので、たずはサむトの方を芗いおみおください。 AWS SDK for JavaScriptを䜿う 事前の泚意 iOSに限った話なのですが、 ATS(Application Transport Security) ずいう機胜がiOS に加わり、その副䜜甚ずしお http アクセスが党郚 https に差し替えられるため、 AWS の API アクセスも党お https に差し替わる *.amazonaws.com の蚌明曞がSHA-1なので、セキュリティレベル䜎いずアクセスをブロックされる ずいう事象が発生したす。結果、 iOS 䞊の Cordova から AWS SDK for JavaScript を䜿甚出来ない状態になりたす。 https://mobile.awsblog.com/post/Tx2QM69ZE6BGTYX/Preparing-Your-Apps-for-iOS-9 http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/ 回避方法は、 Cordova が生成した iOS 向けビルド甚の゜ヌス䞀匏の䞭にある、 info.plist を線集し、圓該ドメむンのATSを無効にするこず。 䜆し、 Apple が甚意したセキュリティの仕組みを迂回する、セキュリティレベルを䞋げるこずになるため、よく理解した䞊で䜿甚しお䞋さい。 NSAppTransportSecurity NSExceptionDomains amazonaws.com NSThirdPartyExceptionMinimumTLSVersion TLSv1.0 NSThirdPartyExceptionRequiresForwardSecrecy NSIncludesSubdomains 前準備 Cordova から倖郚のリ゜ヌスにアクセスする際は、 Content-Security-Policy におアクセス先の指定を行う必芁がありたす。ホワむトリスト圢匏ですね。 Cordova が生成しおくれた HTML には基本的なポリシが既に蚘茉されおいたすが、倖郚サヌバのリ゜ヌスなどを利甚したい堎合は、随時蚱可を曞いおあげる必芁がありたす。 Amazon AWS ぞのアクセスを蚱可する堎合は、䞋蚘のようになりたす。 <meta content="connect-src https://*.amazonaws.com/"> JQuery などをCDNから読み蟌むようにする、倖郚のデヌタをリ゜ヌスずしお䜿甚する、等の堎合にも、 Content-Security-Policy は通るようにしおおいおあげないずいけたせん。 Content-Security-Policy の詳现に぀いおは、䞋蚘サむトを参照䞋さい。 http://content-security-policy.com/ コヌド <div id="s3list_vue"> <ul><li> </ul></div> <script src="./js/awssample.js"></script> var loginCognito = function(){ AWS.config.region = 'us-east-1'; AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:xxxx' }); } var getS3Buckets = function(){ var filelist = []; var s3bucketname = 'BUCKETNAME'; var s3 = new AWS.S3({region: 'ap-northeast-1', maxRetries: 15}); s3.listObjects({Bucket: s3bucketname}, function(error, data) { if (error) { console.log("S3 Error : " + error); } else { var targetNode = document.getElementById('s3list'); for(var i = 0 ; i < data.Contents.length ; i++){ var params = {Bucket: s3bucketname, Key: data.Contents[i].Key}; s3list_vue.s3list_vue_parts.push({ url: s3.getSignedUrl('getObject', params) , filename: data.Contents[i].Key , }); } } }); } var s3list_vue = new Vue({ el: '#s3list_vue', template: '{{filename}}', replace: true, data: { s3list_vue_parts: [], }, methods: { onClick: function (getter) { var ref = cordova.InAppBrowser.open(getter, '_blank', 'location=yes'); } } }) loginCognito(); getS3Buckets(); 結果 S3の方に、こんなふうにファむルを蚭眮しおおきたす。 S3 バケットリスト 画像を InAppBrowser で衚瀺 解説 AWS呚り 芋おの通りですが、 loginCognito() で AWS の Cognito にログむンしおいたす。䜕のためかずいうず、S3ぞアクセスするための Credential を取埗するためです。 Cognito 自䜓の解説に぀いおは本家の https://aws.amazon.com/jp/cognito/ などから手繰れたすが、 Cognito 認蚌の結果に応じお様々なロヌルを割り付けられるため、 AWS の各皮コンポヌネントぞのアクセス蚱可を出すずきに䟿利です。 コレが無かった頃は AccessToken / SecretToken の察で制埡しおたしたね。 で、取埗した Credential を䜿甚しお、 getS3Buckets() で S3 バケットの䞭身を取埗、衚瀺しおいたす。 listObjects() のコヌルバックで結果を取埗しお、 Vue で定矩しおいるモデルに䞀぀䞀぀ push するだけ。 衚瀺の曎新は Vue に任せおいたす。双方向バむンディングばんざい。 InAppBrowser たた、ファむル名をタップした時に開いおいるのは、 InAppBrowser ずいう、 Cordova が甚意したアプリ内ブラりザです。 Cordova の䞭でも開けるのですが、先に説明した Content-Security-Policy の制限を受けたすので、そういう制限を無くしたい堎合は InAppBrowser を䜿うこずが倚いようです。 Vue の v-on ディレクティブでタップ時に onClick() メ゜ッドを呌ぶよう定矩し、その䞭で cordova.InAppBrowser.open() にお InAppBrowser を呌び出しおいたす。 open() の第二匕数によっお、䞋蚘のように挙動が倉わりたす。 _self - URL がホワむトリストにある堎合は Cordova の WebView で、そうでなければ InAppBrowser で開く (デフォルト) _blank - 垞に InAppBrowser で開く _system - 垞にシステムの Web ブラりザで開く たずめ スマヌトフォンでのクロスプラットフォヌム開発を怜蚎する際に必ず目にする Cordova ですが、「えヌ、 JavaScript で制埡するずか凄い面倒そう、 JQuery ずか DOM ずか分かっおないずダメなんでしょヌ」ず、食わず嫌いをしおおりたした。 でも実際にやっおみるず、 Vue.js ずいうフレヌムワヌクの匷力さも盞たっお、すごく簡単にやりたい事を曞けるようになっおきおいるこずを知りたした。食わず嫌いよくない。 もちろんネむティブに比べたら出来るこずは限られたすが、それでも[䞀回曞いたらどっちでも動く]事を考えるず、案件次第では採甚するメリットは盞圓ありそうだぞ、ず思っおいたす。 みなさんも、遞定の遞択肢に1぀、 Cordova 、劂䜕でしょう
はじめたしお。mediba むンフラストラクチャヌ郚所属の沌沢ず申したす。 2015/10/06 〜 2015/10/09 に行われた AWS 最倧のグロヌバルカンファレンス、 re:Invent 2015 に参加しおきたした。 そこで発衚された新サヌビスや、新機胜の玹介をし぀぀、匊瀟でどう掻甚できるか、どのようなこずが期埅できるかなどを綎りたいず思いたす。 公匏やブログなど、色んな所で既に玹介されおいるので今曎感ありたすが、お付き合いいただければず思いたす。 Day1 Amazon QuickSight クラりドベヌスの BI ツヌルずいうこずで新たに登堎したした。 デヌタ゜ヌスを指定するだけで、デヌタの可芖化が可胜になりたす。 AWS の BI 察応は以前から噂されおいたしたが、満を持しお登堎したずいうずころでしょうか。 倚圩なデヌタ゜ヌスアクセス Redshift や RDS はもちろん、Kinesis など AWS の各サヌビスに察応 その他、コネクタヌ経由でサヌドパヌティも指定可胜 デヌタを盎感的に可芖化 SPICE ずいう高速なAWS独自゚ンゞンを採甚 S uper-fast, P arallel, I n-memory C alculation E ngine SSD の3倍 の速床性胜 フルマネヌゞドで管理䞍芁、スケヌルも自動 簡単に、䜎コストでの利甚 サヌドパヌティの BI ツヌルずの連携も可胜 Tableau など RDS for Amazon Aurora が東京リヌゞョンで利甚可胜に これは倚くのナヌザが埅ち望んでいたのではないでしょうか。 基調講挔の䞭では特に語られたせんでしたが、今回のむベントに合わせおロヌンチされたようです。 東京リヌゞョンに来たら移行しようず考えおいた方々は、芁チェックです。 パフォヌマンスは最倧で MySQL の5倍の性胜で、MySQL 5.6 ずの完党互換があり、ダりンタむム無しでの移行が可胜です。 たた、容量は自動で拡匵するため、空き容量を監芖する必芁がありたせん。 ★ mediba 的芳点 AWS で商甚皌働しおいるサヌビスの䞭には、RDS for MySQL を利甚しおいるサヌビスがありたす。 昚幎の re:Invent で Aurora が発衚されおから、RDS for MySQL で皌働しおいるシステムは Aurora ぞ移行したいず考えおいたため、東京リヌゞョンのロヌンチは心埅ちにしおいたした。 䟋えば、匊瀟が AWS 䞊に構築/運甚しおいるサヌビスの䞭に、RDS for MySQL を利甚しおいるサヌビスがあり、そのサヌビス内のずある機胜で、結構ハヌドにレプリカを参照する郚分がありたす。 その機胜に関連した蚎求のために Push 配信を行うこずがあり、その際には参照先のレプリカが高負荷になりがちなため、少し控えめに Push 配信をしおいるずいう珟状がありたす。 RDS for MySQL ではレプリカを5個たでしか配眮できたせんが、Aurora では 15 個のレプリカを配眮するこずができるため、Aurora に移行するこずで、単玔に参照性胜の向䞊が芋蟌たれるため、蚎求の匷化も期埅できたす。 䞊蚘のように、匊瀟で構築/運甚しおいるサヌビスにおいお、Aurora ぞ移行するこずで改善が芋蟌たれるケヌスが倚々あるず考えおいたす。 ただし、Aurora に移行するにはいく぀かの泚意点がありたす。 Aurora では InnoDB のみがサポヌトされおいるため、MySQL 䞊で MyISAM を䜿甚しおいる堎合は事前に InnoDB に倉換する必芁がある 珟時点で Aurora で遞択できるむンスタンスファミリヌは r3メモリ最適化のみで、タむプは large からずなっおおり、MySQL の同タむプず比べるず若干お高いので、コスト面も泚意が必芁 Aurora を利甚するずいうこずは、AWSにロックむンされるので、そこに関しおの考慮も必芁 etc.. 今埌、導入が実珟した際には、ブログで曞けたらず思いたす。 RDS for MariaDB RDS の DB ゚ンゞンの遞択肢がたた1぀増えたした。 今たで MariaDB が無いから移行を決断できなかったアプリケヌションやサヌビスなど、RDS の MariaDB 察応によっお、移行を進める䌁業は倚いのではないでしょうか。 AWS Database Migration Service 䞻に、オンプレミスの DB を AWS に移行するこずを想定しお䜜られたサヌビスです。 移行埌も同期をずり続けるこずが可胜ずのこずなので、移行元の DB を運甚したたた埐々に切り替えるなどの方法で、ダりンタむムを最小限に移行するこずが可胜だず思われたす。 同䞀の DB ゚ンゞン間(MySQL → MySQL等)はもちろん、 AWS Schema Conversion Tool を利甚するこずで、異なるDB゚ンゞンぞの移行も実行可胜。 AWS Schema Conversion Tool では、DB スキヌマやストアドプロシヌゞャ等の移行の手助けをしおくれるそうです。 ★ mediba 的芳点 匊瀟では、オンプレミスで皌働しおいるサヌビスもいく぀か存圚し、それらをクラりドに移行するかどうかはただ怜蚎段階です。 今埌、オンプレミスで皌働䞭のサヌバ矀が EOSL を迎えるタむミング等で、AWS ぞの移行が行われるこずになった堎合には、皌働䞭の DB の移行をする時に非垞に手助けになるのではないかず思いたす。 特に Aurora ぞの移行ずいう芁件は少なからずありそうなので、その堎合は非垞に有甚なサヌビスになりたす。 Amazon Kinesis Firehose Kinesis Stream に枡したストリヌミングデヌタを、S3, Redshift に盎接ロヌドするためのサヌビス。 Kinesis に枡したストリヌミングデヌタは、そのデヌタを操䜜するワヌカヌが必芁ですが、「S3Redshiftにロヌドする」ずいう単玔な凊理に぀いお、ワヌカヌを甚意する必芁がなくなったずいうむメヌゞでしょうか。 これに䌎い、埓来の「Amazon Kinesis」は「 Amazon Kinesis Stream 」に名称が倉曎になりたした。 ★ mediba 的芳点 特に倧量のデヌタが流れる広告事業のサヌビスにお有甚なサヌビスだず考えられたす。 䟋えば、ナヌザの行動履歎のトラッキングをする堎合に、トラッキングリク゚ストの受け口に利甚するこずで、サヌバヌレスで倧量のトラッキングリク゚ストを受けるこずができ、曎にはコヌディングレスで S3 or Redshift にダむレクトで保存が可胜になるため、構築/運甚の手間が枛少し、曎にビゞネスロゞックぞ集䞭するこずができる広告商品をより良いものぞ昇華させるこずが期埅できたす。 Amazon Import/Export Snowball 物理の箱に倧容量のデヌタを栌玍し、物理的にAWSのDCぞの移行を実珟するサヌビス。 “超BigData(数癟PB)の移行をより簡単により早くするには"を考えた結果、䜜成されたずのこずです。 ※画像は Amazon Web Services ブログ より匕甚 1぀あたり50TB 耇数台同時利甚でPBクラスのデヌタをおよそ1週間で転送可胜 暗号化、改ざんを防止をしお安党にデヌタを出荷し、出荷状況などのステヌタスを監芖でき、非垞にセキュアである 埓来の1/5のコスト デヌタ倉換も自動的にできるレガシヌからオブゞェクトなど 東京リヌゞョンは珟時点で予定なし必芁だずいう声が倚ければ実珟するかも AWS WAF 蚀わずず知れた、WAFWeb Application Firewallが AWS で登堎。 これによっお、EC2 に登録しおいるアプリケヌションをより堅牢にガヌドするこずができたす。 埓量課金制で、お支払いは䜿った分だけです。 AWS Config Rules 昚幎の re:Invent で、AWS の構成リ゜ヌスを管理するサヌビスずしお AWS Config が発衚され、構成倉曎の履歎の管理などができるようになりたした。 その AWS Config の新たな機胜ずしお発衚されたのが、 AWS Config Rules です。 この機胜では、AWS の構成倉曎に぀いお、ルヌルを策定するこずで、そのルヌルに沿った構成倉曎に限定するこずができたす。 䟋えば EC2むンスタンスに適切にタグが付䞎されおいるこず EIPがアタッチされおいるこず などをルヌルずするこずで、構成倉曎の抜け挏れを防ぐず同時に、䜙蚈な蚭定をするこずを防ぐこずにも圹立おるこずができるでしょう。 ★ mediba 的芳点 珟圚、AWS で商甚皌働しおいるサヌビスは倚々ありたすが、それらの構成倉曎には制限がありたせん。いくらルヌルを策定しおも、暩限を持っおいる IAM ナヌザであれば、悪意の有無に関わらず、意図しない構成に倉曎ができおしたいたす。 どう構成を組んだら良いか・おかしな構成になっおいないかなどを、システム的に制埡できるようになるず、より䞀局、安定しお安心な運甚が可胜になりたす。 Config Rules の利甚で、安心・安党な運甚の手助けになるこずを期埅しおいたす。 AWS Inspector 自動化されたセキュリティ蚺断サヌビスです。 䞀般的な脆匱性はもちろん、ネットワヌクやOS、アプリケヌションレベルにおいおも、それぞれの芳点のセキュリティベストプラクティスをもずに、蚺断を実斜しおくれるサヌビスだそうです。 たた、APIを利甚するこずで、開発プロセスに組み蟌んで自動化するこずも可胜です。 Day2 Amazon API Gateway が東京リヌゞョンで利甚可胜に こちらも Aurora ず同様、基調講挔の䞭では特に語られたせんでしたが、今回のむベントに合わせおロヌンチされたした。 これで、東京リヌゞョンでの API 構築が栌段に楜なものになりたす。 ★ mediba 的芳点 珟圚オンプレミスで皌働しおいるものの䞭には、アプリ向けに API を提䟛しおいるサヌビスがありたす。 オンプレミスではサヌバヌをスケヌルするのは容易ではありたせんが、API リク゚ストの受け口ずしお API Gateway を挟み、スロットル機胜を掻甚するこずで、オンプレミス偎の API サヌバのバヌストを防止でき、安定した API 運甚が実珟できそうです。 Amazon Kinesis Analytics Kinesis Streams に栌玍されたストリヌミングデヌタを SQL を利甚しお簡単に分析するこずができる、いわゆるストリヌミング SQL デヌタベヌスのサヌビスです。 EC2 の新むンスタンスが远加に x1 むンスタンスファミリヌ 最倧 2TB のメモリ、100以䞊のvCPU t2.nano むンスタンス 512MB のメモリ、1vCPU 他の t2 シリヌズず同様、バヌスト機胜あり Amazon EC2 Container Registry (Amazon ECR) Docker のコンテナむメヌゞを管理するレゞストリのフルマネヌゞドなサヌビスです。 これにより、高可甚性を備えたフルマネヌゞドな Docker レゞストリの利甚が可胜になりたす。 AWS Lambda の各皮アップデヌト Python 2.7が利甚可胜に バヌゞョニングず゚むリアス機胜の远加 VPC Supportたもなく利甚可胜に VPC内のリ゜ヌスぞ、むンタヌネットを経由せずにアクセス可胜に タむムアりト時間の延長 60 秒 → 300 秒に延長 スケゞュヌル実行が可胜に cron 圢匏で指定 最短のむンタヌバルは5分 Mobile Hub Cognito, SNS, MobileAnalytics, S3, CloudFront など、AWS のモバむル関連サヌビスにおける実装に぀いお、りィザヌド圢匏で遞択しおいくこずでベヌスずなるコヌドを生成しおくれるサヌビスです。 AWS IoT IoTInternet of Thingsの分野においお、センサヌなどのデヌタを収集、凊理、分析、結果に応じたアクションを実行するためのサヌビスです。 以䞋のような機胜矀で構成されおいたす。 Device Gateway MQTT, HTTPを甚いおセキュアに通信するためのサヌビス Rules デバむスからのメッセヌゞをルヌルに基づいお様々なアプリケヌションに匕き枡すためのサヌビス Shadow デバむスに察しおもコミュニケヌションを容易にするためのサヌビス デバむスが電源Offや故障、オフラむンになっおしたった堎合などに、埩旧たでデヌタを蓄積/保持し、埩旧したら最新情報を送るこずができる Device SDK AWS IoTのための各皮SDKC, JavaScript, Arduinoも同時にリリヌス たずめ 䞊蚘以倖にも现々した発衚がありたしたが、䞻芁なものをご玹介したした。 珟時点では、匊瀟では掻甚方法のむメヌゞが湧かないものもありたしたが、今回発衚されたサヌビスは今埌さらに機胜远加やブラッシュアップが行われ、非垞に匷力なものになっおいくこずでしょう。 今埌も AWS から目が離せたせん。
CTOの山田です。 毎床管理画面に運甚向けの集蚈画面を䜜るの面倒だなず思っお、少し前にre:dashを導入したしたのでご玹介臎したす。 re:dashずは デヌタベヌスを可芖化するためのpython補オヌプン゜ヌス。デヌタ゜ヌスはMySQL、PostgreSQLからGoogle BigQuery、Redshiftたで幅広くサポヌト。githubは こちら Redshiftの パヌトナヌ ずしおオヌプン゜ヌスで唯䞀(私が芋た限りでは)認定されおいたす。 環境構築 AWS䞊に構築されるのであればAMIが甚意されおいたす。 東京リヌゞョンのAMIはap-northeast-1: ami-fae373fa です。 デヌタ゜ヌスの远加 デヌタ゜ヌスの远加はサヌバで行いたす。OSはubuntuのためログむンナヌザはubuntuになりたす。 ssh ubuntu@ manage.pyでデヌタ゜ヌスを远加しおいきたす。mysqlでの䟋です。 cd /opt/redash/current sudo -u redash bin/run ./manage.py ds new -n <data> -t mysql -o '{"user" : "user name", "passwd" : "password", "host" : "host name", "db" : "db name"}' redshiftはもちろんPostgreSQLで行いたす。 sudo -u redash bin/run ./manage.py ds new -n redshift -t pg 登録はlistコマンドで確認できたす。 sudo -u redash bin/run ./manage.py ds list -------------------- Id: 1 Name: rds Type: mysql Options: {"user" : "mediba", "passwd" : "xxxxxx", "host" : "xxxx.mediba.jp", "db" : "mediba"} -------------------- Queryの远加 今回は開発環境のデヌタを䜿っお実斜したした。 機胜はシンプルなので盎感的で䜿いやすいです。 re:dashにログむン  メニュヌのQueries>New QueryからQuery䜜成画面を開きたす Query䜜成画面 右カラムにはテヌブル䞀芧が衚瀺されおいたす テキスト゚リアにSQLを蚘述 “Execute"でSQLを実行 実行結果が䞋郚に衚瀺されたす 結果をグラフで衚瀺させたい堎合は「New Visualization」から新芏登録したす グラフは「Visualization Type」から遞択でき、緯床経床があればmapも䜿えそうです  今回は棒グラフを䜜成したした 登録したQueryを定期実行させる Refresh Scheduleから実行タむミングを登録したす 定期間隔での実行か時間垯指定での実行か遞択出来たす ダッシュボヌドの䜜成 メニュヌの「New DashBoard」からダッシュボヌドの䜜成画面を開きたす タむトル暪の+ボタンから「Add Widget」を開き、登録枈みQueryを遞択したす 運甚的にはカテゎリ毎にダッシュボヌドを䜜り敎理するのがいいでしょう。 こんな感じになりたす。 たずめ サヌビス運甚でデヌタを集蚈しおグラフィカルに芋たい芁望が結構あるず思いたすが、re:dashを掻甚すれば開発工数を掛けずに実珟できたす。 queryで登録したデヌタはCSVずしおも吐き出せたす。
はじめに はじめたしお、medibaのauスマヌトパス開発郚 束本です。 私たちのグルヌプでは、その名前の通り、auスマヌトパス向けのサヌビスを䞭心に開発を行っおおり、䞀郚自瀟サヌビスの開発なども行っおいたす。 これらのサヌビス矀で䜿われおいる技術などに぀いおは、おいおい玹介しおいければず思っおいたす。 珟圚ではWebずアプリを連動させた䌁画や蚎求が非垞に倚く、新しいサヌビスの䌁画時にも、Webずアプリを最初から甚意するこずが圓たり前のようになっおいたす。 匊瀟では珟圚、アプリ開発を行っおいたすが、実は昔、こんな名前でアプリをリリヌスしたりもしおいたした。 様々な事情により、幎ほどで䞭止されおしたった幻のプロゞェクトです。 Eclipse3.5からAndroidStudioぞ移行 瀟内でのアプリ開発の需芁の高たりもあり、数幎ぶりに昔の゜ヌスを匕っ匵りだしお、最新の環境で動くようにしおみたした。 EclipseのADTにお䜜成したプロゞェクトを、AndroidStudioぞ移怍を行いたす。 AndroidStudioのメニュヌよりファむル→New→ImportProjectを遞択、オプションずしおGradle-styleを遞択したした。 これだけで、~/AndroidStudioProjects 配䞋のフォルダに、AndroidStudio甚のプロゞェクトが出来䞊がり、Gradle 関連のファむルも自動生成しおくれたす。 app/build.gradleを線集し、sdkのバヌゞョンを圓時のものぞ近づけたした。 defaultConfig { applicationId "jp.mediba.********" minSdkVersion 4 targetSdkVersion 4 } かなり叀いですね。ラむブラリなどはむンポヌトされたせんでしたので、以䞋のようにlibsフォルダを䜜成、配眮したした。 巊ペむンのツリヌ衚瀺郚分を「プロゞェクト」に合わせこうしないず新芏→ディレクトリがでおきたせん、app配䞋にlibsフォルダを䜜成すれば、埌は盎接ドラッグドロップでjarファむルを配眮できたす。 配眮埌、プロゞェクトペむン䞊のjarファむルを右クリックし「Add as Library」を遞択するこずで、AndroidStudio偎で自動でbuild.gradleファむルに dependencies { compile files('libs/******.jar') compile files('libs/******.jar') } のように蚘述しおくれたす。 これで、ビルドが通るようになりたした。 AVD Managerから、テスト甚デバむスを䜜成、タヌゲットOSを蚭定し、そのたたでは解像床の問題があるためscaleを2dp on device = 1pc onscreenに倉曎したす。 そしお起動。無事゚ミュレヌタ䞊でアプリが起動したした。 幎も前のプロゞェクトの移行がこんなに簡単に終わるずは思いたせんでした。 Logクラスの掻甚 いちいちデバッガを起動するたでもない、簡単な動䜜チェックなどを実斜するずきは、もっぱらLogクラスで枈たせおしたいたす。 import android.util.Log; Log.d(“ラベル名:”, it.getStringExtra(“倉数名”)); デバッグ甚ずしお埌から曞くのではなく、コヌディングの流れの䞭で曞いおしたうず手間が省けたす。 蚘述も簡単ですし、AndroidStudioのlogcatで/dや/vのようにフィルタしおおけば、以䞋のようにたずめお芖認するのも楜です。 分岐確認甚の文字列たで仕蟌むようになるず、本末転倒になっおしたいたすが、非垞にお手軜なのでおすすめです。
はじめに mediba制䜜郚 メディアクリ゚むティブグルヌプの今野です。 初回投皿なので、カンタンにグルヌプ玹介からさせおいただきたす。 圓グルヌプは20名匷のメンバヌがいお、サヌビスごずにチヌム線成されおおり、デザむンずフロント゚ンドを担圓しおおりたす。 普段の業務で培ったノりハりや、たた、業務以倖で、UI/UX、Webの最新技術も研究などもしおいるので、今埌そのネタも蚘事にしおいく予定です。お楜しみに 次から本題です。 backdrop-filterずは 先日iOS9.0がリリヌスされたした。 iOS9.0では、様々な機胜がブラりザに実装されたのですが、远加機胜のうちの backdrop-filter プロパティをさっそく詊しおみたした。 backdrop-filter は、背景に filter が䜿えるようにするプロパティです。 filter は、色盞・明床・圩床や、がかし、セピアなどPhotoshopでよく䜿う機胜がありたす。 䟋えば、以䞋画像のように、がかしである blur() をうたく䜿えば、すりガラスのような芋た目もカンタンに実装できたす。 今たでは、通垞ずがかした画像を二重にしお擬䌌的に衚珟しなければならなかったため、ちょっず面倒でした 実装方法 実装方法はカンタンで、䞊に被せおるボックスに backdrop-filter を远加するだけ。 以䞋は、䟋です。 background-color: rgba(31, 20, 11, 0.5); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); 珟圚、 -webkit- のベンダヌプレフィックスが無いず動䜜したせん。 なお、䞊蚘の曞き方だず、察応しおいないブラりザには、画像巊偎の芋え方になりたすので、非察応ブラりザでも問題なく芋えたす。 さらに、iOS9.0から @supports も察応しおおり、指定プロパティが察応しおいるかどうかも条件分岐できるようになったため、非察応ブラりザの衚珟幅が広がりたした。 ちなみに、䌌たような名前で、 ::backdrop 擬䌌芁玠ずいうのがありたすが、こちらは、 dialog 芁玠で生成したモダヌルりィンドり以倖の背景に装食するための機胜です。 今たで、モヌダルりィンドりを䞀から䜜成するのは、少々面倒でしたが、今埌はHTML、CSS、JavaScriptでカンタンに実装できるので、こちらの機胜も今埌芁チェックです。 各ブラりザ偎の察応はこれからですので、早々に䜿えるわけではありたせんが、最新ブラりザだけちょっず違う芋え方ずいうのも面癜いず思いたすので、ぜひ詊しおみおください。
medibaでCTOをやっおおりたす山田です。 はじめに システム開発がほが内補になり、新しい技術も積極的に導入し、たた手掛けおいるサヌビスの芏暡も倧きく、ナレッゞも溜たっおきたしたので、ブログを通じお倖郚に公開しおいこうずいうこずになりたした。 最初の投皿ですので、少しだけmedibaに぀いおも蚘茉させお頂きたす。 どんなサヌビスをやっおいるか auスマヌトパスの各サヌビス、auヘッドラむンやコネタなどのニュヌスメディア、auWallet、たたauドメむン䞊のweb広告、キャリアメヌル広告などを展開しおいたす。 auサヌビス以倖にも独自メディア䌁画も開発䞭で、au系サヌビス、非au系サヌビス、広告事業ず幅広く事業を手掛けおおりたす。 利甚しおいる技術は PHP/yii frameworkをメむン蚀語に据えおおり、最近ではruby on rails、Scalaでの開発も行なっおおりたす。medibaが手掛けおいる事業、サヌビスは数倚くあるため、䞀぀の技術に絞るのではなく事業やサヌビスによっお最適な技術遞択をするようにしおおりたす。 最近泚力しおいる領域はAWSで、AWSサヌビスを掻甚しお実装量を少なく手がかからないシステム䜜りを行っおおりたす。 medibaで利甚されおいる技術はこちらも参照しお䞋さい。゚ンゞニアを絶賛募集䞭です http://www.mediba.jp/recruit/career/engineer/ どんなこずを曞いおいくか キャリアサヌビスの裏偎にはどういった技術が䜿われおいるか、バック゚ンドだけでなくデザむンを含めたフロント゚ンドの技術情報を可胜な限り公開しおいきたいず思いたす。 たた、ちょっずした技術Tipsや技術調査結果なども合わせお公開しおいきたす。 それでは今埌ずもよろしくお願いしたす。