aws-cliのs3api put-objectでContent-MD5ヘッダをつける
put-object — AWS CLI 1.9.2 Command Reference をみると --content-md5
オプションがある。 PUT Object - Amazon Simple Storage Service にあるとおり、
To ensure that data is not corrupted traversing the network, use the Content-MD5 header. When you use this header, Amazon S3 checks the object against the provided MD5 value and, if they do not match, returns an error.
ということでオブジェクトの完全性をチェックするには Content-MD5
ヘッダをPutObjectリクエストにつけるとよい。
AWS Developer Forums: awscli put-object --content-md5 trouble ... でもハマっている人がいた。最初 md5
とか md5sum
コマンドでやっていたのだが、これだとhexになったのが出てくる。 https://www.ietf.org/rfc/rfc1864.txt にもあるとおり、Content-MD5ヘッダに設定すべきは base64(md5)
であり base64(hex(md5))
ではない。ということでこれをまとめて aws s3api put-object
をつかって書くと以下の様にして実現できる。
# s3://your-bucket/your-key-prefix/obj に カレントディレクトリのobjをPutObjectする。
aws s3api put-object --bucket your-bucket --key your-key-prefix --content-md5 `openssl dgst -md5 -binary obj | openssl enc -base64` --body obj
APIを適当な言語で使っている場合にはmd5 sumのbinaryをPipeして組み立てればよいのだが、cliだとうっかりハマってしまった。ちなみにresponseのETagはPutしたObjectのmd5 checksumのhexが返ってくるので、これも合わせてチェックするとさらによいだろう。 レスポンスの例は以下のとおり。
{ "ETag": "\"a41422711fcbb0982991580e0d4799f6\"" }
これは md5sum -q obj
の結果と等しくなる。ただしMultipart Uploadの場合には必ずしもそうはならないので、留意すること。
vim-go-extraからvim-go に移った
ずっと vim-jp/vim-go-extra をつかっていたのだけど、oracleとかvetとかもろもろ扱いやすくしたいなと考えていたらもう fatih/vim-go でいいか、と考えてvim-goに移った。
前から dgryski/vim-godef を重宝していて、Godocをみるよりもソースに飛んでドキュメントとコード両方みる、みたいなことをしている。vim-goだとデフォルトの gd
の挙動がカレントバッファにジャンプ先を表示してしまって使いづらかったのでaliasを足しておいた。
nmap gs <Plug>(go-def-split)
ということで gs
で godef
をつかうようにした(sleepさんごめんなさい・・)。ちなみにsplitでみるのは私の癖で、実装元のコードと実装しているコードを並べて見ながら書く癖があるためである。並んで表示されていないと、すぐ忘れて行ったり来たり・・というのを繰り返してしまうのである。
vim-goにして3週間ほど経つけど問題ないので、ひとまず使い続ける予定。
re:Invent 2015のスライドをみたメモ その2
re:Invent 2015のスライドをみたメモ - すずけんメモ のつづき。
(BDT320) New! Streaming Data Flows with Amazon Kinesis Firehose
- KinesisのGMとPMの方の発表
- Kinesis Streamの最近のupdate
- Kinesis Firehose
- Redshiftへの適用
- COPYコマンドを発行できる
- Amazon Kinesis Agent
- Firehoseのためのagent
- ファイルをモニタリングしてDelivery Streamにおくったり、ファイルのローテーションおいかけたり、リトライしたりする
- Fluentdみたいなやつっぽいさがある
- Agentの状況はCloudWatchでみることができる
- AgentはFirehoseだけじゃなくてKinesis Streamにもつかえる
- Writing to a Delivery Stream with Amazon Kinesis Agents - Amazon Kinesis Firehose
- Firehoseは1GBあたり0.035ドル
- FirehoseはKinesis Streamとちがって、設定して突っ込めばs3とかRedshiftまで送ってくれるツール。Kinesis Streamはカスタムしたいユーザ向け。
- Firehoseの場合、特に管理しなくて良い。かつストリームに対して60秒以内にもろもろ仕事してくれるらしい
- consumer側を書かなくて良いのは楽だなぁ
- FirehoseをつかったS3への転送
- Amazon Kinesis Analytics
- まだリリースはされてない
- Kinesis StreamだけじゃなくてFirehoseのdelivery streamもつかえるらしい
(BDT303) Running Spark and Presto on the Netflix Big Data Platform
- Netflixの中の人のプレゼン
- 視聴時間、Quarterで100億時間とな・・会員も6500万人以上
- s3に25PB, 1日5500億イベント
- 相変わらずEMRつかってるらしい
- ParquetサポートのPredicate pushdownってなんだろ
- ああ、読むひつようのないrow groupをskipするってことかな
- Sparkもつかってる。 on YARN
- YARNのDynamic Allocationがだいぶ重宝されてる感じだ
- Sparkでのs3のlistが遅い問題
- s3のlistはそもそも遅いんだけども、Netflixだと1テーブルのpartitionが100万とかになったりするらしい
- AmazonS3Clientを並列に実行してバルクでパーティションをリストするようにしたとのこと
(SPOT302) Availability: The New Kind of Innovator’s Dilemma
- NetflixのPerformanceとReliabilityのDirectorの方
- 3 regionでactive-activeはすごいな・・・
- microservices構成、それぞれのserviceごとにASGがわかれている
- 500以上のマイクロサービスがある
- AsgardじゃなくてSpinnakerというのに移行しているらしい
- ビデオでみたいセッションだ
(CMP407) Lambda as Cron: Scheduling Invocations in AWS Lambda
- Sophosの人のセッション
- あれ、これLambdaのscheduled events使うのじゃだめなのか?
- ああ、Lambda functionでsignalの波形になるようなのつくって、CloudWatchにおくり、alartをSNSにhookして定期実行させてるのか・・
- g-a-d/lambda-cron
** NOTE ** Amazon have now announced native scheduled functions for Lambda. You are very much advised to use those as opposed to this!
切ない
(BDT207) Real-Time Analytics In Service Of Self-Healing Ecosystems
- Anomaly Detectionの話題が
(ARC348) Seagull: How Yelp Built A System For Task Execution
- Yelpの方。CIにおけるテスト高速化の話。
- Seagull: 並列なタスク実行のための分散システム
- テスト実行とかをしてるらしい
- 1日に350 seagullが走ってる
- 1 seagullごとに7万テストはしってる
- 2日間終わらないこととかあった
- 3000のテストを200台のクラスたで実行してる
- 2日間かかってたのが14分で終わるようになった
- artifactのダウンロードだけで1日に36TB...
- というかなぜそんなにartifactをダウンロードする必要があるのだろう
- 1日に150万Dockerコンテナつくってるらしい
- 構成はJenkinsクラスタ、ジョブ実行のためにcontainerなどなど
- Homepage - SignalFx を監視につかってるらしい
- Jenkinsではartifactをs3にあげてる
- artifactは数百MBになるらしい
- Jenkinsでテストがあるか否かを見つけている
- テストの優先順位付けをしている
- それぞれのテストにかかった時間をDynamoDBにいれてる
- Prioritizerでそれをみるだけで2500万レコード/日してるらしい・・・
- とはいえ月に200ドルくらい
- ピークタイムにテストが集中する
- Mesosのスケジューラを使って、600ワーカ立ててる
- r3.8xlarge 200台
- Mesosのスケジューラを使って、600ワーカ立ててる
- s3からのartifactダウンロードに時間がかかるのでnginxでserveするようにしたらしい
- originはs3でfrontにnginxってことかな?
- autoscaleの計算も、必要なメモリの総量を見積もってから行っている
(ARC308) The Serverless Company: Using AWS Lambda
- Lambdaの人
- ビデオのtranscodeからaudioの抽出、サムネイル作成まで全部Lambdaでやってる事例面白いな
- 普通にexecでffmpegを実行していた。
- Lambdaのtips
(STG401) Amazon S3 Deep Dive & Best Practices
- デモが面白そうな感じ
- というかほとんどデモだこれ
(STG306) EFS: How to store 8 Exabytes & look good doing it
- amazon.comの人
df -H
で9.3Eとかでててやばい- EFSのパフォーマンスモデル
(BDT318) How Netflix Handles Up To 8 Million Events Per Second
- Netflixの人、Event and Data Pipelines担当らしい
- Chukwa - Welcome to Apache Chukwa
- ああ、Kafkaの多段構成にかわったのかな
- frontのKafkaにd2.xlargeとな・・・
- routingにSamzaをつかっている
(DVO313) Building Next-Generation Applications with Amazon ECS
- METEORの中の人
- Meteor
- JavaScriptでwebとモバイルアプリのビルドするプラットフォーム
- ああ、それで実行環境を分離できるECSはうれしいってことなのかな
- Mobileだとconnected clientなアーキテクチャになると
- connection貼りっぱなしの状態だとデプロイとかtrackingとかも大変
- requirements
- 10000オーダーの同時接続がある
- clientが接続してくる層と裏のserviceレイヤをわけているらしい
- WebSocketの場合、もし違うECS内のappに接続した場合にはcookieでIDを取得して、裏側のサービスへの問い合わせにつかっているっぽい
- 裏側のサービスはユーザごとになるべく同じものを利用するようにする方針ぽさ
- もし裏側のサービスが落ちていたらproxyが別のappを選択するようにしている
- サービスをデプロイする場合には、まずcontainerを配置してから古いcontainerを落とす
- するとproxyが新しいcontainerを選んでくれる
- WebSocketの場合、もし違うECS内のappに接続した場合にはcookieでIDを取得して、裏側のサービスへの問い合わせにつかっているっぽい
- サービスメトリクスはcontainerごとに取得している
- Docker Remote APIでとれる
(ARC403) From One To Many: Evolving VPC Design
- AWSのPrincipal Solutions Architectの人
- 家で試しましょう!とな
- Scalable, Available NAT
- NATを使わずにpublic subnetsでやるという選択肢もあるけどね
- HA NATをEC2 Auto RecoveryとAuto Rebootを使って実現しよう
- Auto Recovery
- c3, c4, m3, r3, t2ならつかえる
- Status Checkがこけたときにhookできる
- rebootしたりとかもできる
- VPC Endpointについて
aws ec2 create-vpc-endpoint --vpc-id vpc-40f18d25 --service-name com.amazonaws.us-west-2.s3 --route-table-ids rtb-2ae6a24f rtb-61c78704
- route tableについて
VPCE
なtargetを追加できる- Prefix list: ロジカルなdestination target
- s3のip rangeが変わってもこれで勝手に対応される
(SPOT301) AWS Innovation at Scale
- 見れなくなってる?
(NET307) Pinterest: The road from EC2-Classic To EC2-VPC
- PinterestのVPCへの移行事例
- 1億のpinする人、ピークで15万リクエスト/秒
- 移行理由はNetworkパフォーマンス、あとはセキュリティか。
- 先にDBから移行したのか
(GAM402) Turbine: A Microservice Approach to 3 Billion Game Requests
- Turbineというゲーム会社の発表
- Scaling MongoDB?
- Mobile game platformの構成、ごりごりのCoreOSインフラだ
- Go, Docker, CoreOS.
- microservice構成になっててConsulつかってdiscovery
- containerつかってるけど全部1MB以下らしい
- OS入ってないcontainer
- MongoDB構成
- r3.2xlarge, 1shardあたり3台, 2TBのGP2
- 100GB/hでoplogがでる。
- backupも日に数TB
- r3.8xlargeとかにしてshard数減らしたりもしたけど、結局r3.2xlargeでシャード増やしたほうが安定したらしい
- write lockが5%分だけ起きてた
- シャードを増やしたら安定
- あと新しいLinux Kernelつかうとよくなったらしい(コンテキストスイッチの回数が減ったとのこと
- failoverするとき、メモリが大きすぎると逆にcompactionに時間がかかって失敗していたらしい
- failoverのためにmongodが詰まる
(STG403) Amazon EBS: Designing for Performance
- 200万volume/日でつくられているらしい。
- Kernel 3.8以上でIndirect grantsがつかえるらしい
- queueごとに4096KBつかえる
- Pre-warmingいらなくなった件について
- もうpre-warmingはおすすめじゃなくなったらしい
(DVO209) JAWS: A Scalable Serverless Framework
(DVO202) DevOps at Amazon: A Look At Our Tools & Processes
- AmazonでのDevOps話
- 年間5000万回デプロイ
(CMP402) Amazon EC2 Instances Deep Dive
- EC2のPrincipal PMの方
- Partition周りについてもがっつり説明されている
- paritionの計算方法変わるかも、って書いてるな
- Burst capacityについても数字でてるな
- provisioned capacityが1200なら300秒間で3600CUが余力らしい
- それでも足りなかったらthrottled requestになる
- hot keyとかhot partitionが多くてもthrottledになるとのこと
- provisioned capacityが1200なら300秒間で3600CUが余力らしい
- AdRollのテーブルはうちでやったモデリングとほぼ一緒だ
- Messaging appのmodeling例面白い
(ARC346) Scaling To 25 Billion Daily Requests Within 3 Months On AWS
- 250億リクエスト/day
- Data Processing Engine
- Riakだ。messagingはRabbit MQでやってるらしい。
(BDT209) Launch: Amazon Elasticsearch For Real-Time Data Analytics
- Elasticsearchのたちあげをやるよ、というサービス
Action
をIAMで制限できるのはよさそうes:ESHttpGet
のみ許可、とか
- awslabs/logstash-output-amazon_es
- ESのメトリクスもCloudWatchでみることができる
- JVM Memory Pressureとか
- restoreとsnapshotの設定もできる
re:Invent 2015のスライドをみたメモ
今年はre:Inventには参加せずオフィスで仕事しようと考えていたのですが、実は先週急遽入院していました。*1ちょうどre:Inventのスライドとビデオが公開されていたので、昨日今日とメモしたものをここに貼っておきます。
スライドしかみてないので、デモ中心のbreakout sessionはビデオをみたいところです。
ビデオはここ
スライドはこちら
Amazon Web Services’s slideshows on SlideShare
順序は適当です。
AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報
- 日本のSAの小林さんがまとめてくれている
- AWS IoT
- AWSサポートのデバイスもあるのか
- Amazon QuickInsight
- よさそう。10$ / ユーザ / 月。安い。
- Kinesis, Amazon Kinesis Streamに名前変わったのか
- AWS Inspector
- AWS Import/Export Snowball
- AWSから提供するハードウェアを用いてデータのインポートとエクスポートを可能に
- 48TBを10Gbps or 1Gbpsでつなげる
- DCのデータ移すのとかに使えるのか
- AWS Database Migration Service
- AWS Mobile Hub
- Amazon EC2 Container Registry
- Docker registry。IAMと連携したり、暗号化できたりする。
- まだ使えない
- 多分beanstalk用にDockerコンテナ使うときにregistry自前で立てなきゃいけなかったりとか、そのへんの対策なんだろうな
- IAM連携できるの良さそう
- Amazon RDS for MariaDB
- よさそう。XtraDBやAriaをつかえる
- バージョンは10.0.17
- AWS Config Rules
- AWS Configにルール機能を追加することができるようになった
- Lambda functionとしてルールを作成できる
- ということはかなり自由にルールを作成できるということでもある。Lambda as UDFという感じだ。
- Cloudwatch Dashboard
- AWS Lambda Updates
- Amazon ECS機能追加
- CLIが出た。docker compose連携できる。
- むしろいままでdocker compose連携できなかったのか
- タスクスケジューリングがmulti-azになるようになった
- CLIが出た。docker compose連携できる。
- EC2まわりのupdate
(DVO303) Scaling Infrastructure Operations with AWS
(CMP305) Deep Learning on AWS Made EasyCmp305
- Datoの人のDeep Learning事例
(MBL308) Extending Alexa’s Built-in Skills. See How Capital One Did It
- Amazonの中の人によるAlexaの活用事例
- alexa = クラウドベースの音声サービス
- Siriみたいなやつ
- Amazon Echo = Alexaを使えるデバイス
- 開発者がAlexaのサービスをつかって独自のスキルをつくることもできる
- DynamoDBっぽいスキーマだ
(MBL305) You Have Data from the Devices, Now What?: Getting the Value from the IoT
SAのMichaelさんのスライド
- IoTにおけるデータの違いを学ぶ
(ISM402) Cost Optimization at Scale
- 1000台くらいEC2があるときにどうやってRIを採用するか、というあたりの自動化のはなし
- まあTableauのテンプレートとかでてきて便利かなって感じ
(DEV201) AWS SDK For Go: Gophers Get Going with AWS
- AWS SDK for Goの話
- awslabs/aws-go-wordfreq-sample のデモをひたすらやっていたっぽい
- Docker上でGo 1.5.1つかってる
- Videoでみるかな
(NET404) Making Every Packet Count
- EC2のnetworkingまわりのsenior manager
- RTTが2ms、帯域窓が100KBなら
- 100KB x 8bits/byte x 1000ms/s / 2ms = 400Mbps
- さくっと計算できたほうが良さそう
- 同様にRTTが100msなら8Mbps
- Receive window(RWIN) の設定は
net.ipv4.tcp_rmem
(最小、デフォルト、最大) で。- 最大域は
net.core.rmem_max
- 最大域は
- Congestion window - Wikipedia, the free encyclopedia
- Socket level diagnostic
- ソケットの診断するには
ss -ite
をつかう
- ソケットの診断するには
- TCPでの再送をトレースする
- brendangregg/perf-tools
tcpretrans
- Congestion control algorithms (in Linux)
- 再送のタイマーについて
- congestion control algorithmはパケットの消失について考慮する
- 現在のキューを観る
tc qdisc list
- EC2におけるネットワーキング
- Amazon EC2 enhanced networking
- M4, C4, C3, R3, I2, D2で適用されている
- re:Invent 2014のSDD419をみること
- 後半、実験のやつおもしろいかも
- 最後のhigh transactionの例はweb serverそのものという感じ
(ARC302) Running Lean Architectures: Optimizing for Cost Efficiency
Team Internetの人とAWSの中のひとのセッション
- ECSつかってcontainerのusageをまるっと1 instanceにおさめてく最適化、理論ではわかるけどうまく動いてるのかなこれ
- Spot Bid Advisor使うのは良さそう
- DynamoDBに問い合わせるときにはRAMにキャッシュすると安上がり
- over capacityな書き込みにはSQSをつかう
(STG406) Using S3 to Build and Scale an Unlimited Storage Service
- Amazon Clod Driveの中のひとのセッション。熱いのでは。
- Amazon Cloud Drive: Cloud Storage - Online Backup
- 写真は年間12ドル、全部何でもなら年間60ドルで保存できる、安い
- いろんなレベシェアのパートナーがいる。scanとか印刷会社とか。
- 100万単位のユーザ、10億超えのファイル、無制限なストレージ
- 写真、ビデオ、文章。メタデータ色々。
- 様々にインデキシングやキューを出来るようにしたい
- 9ページに構成。まあ予想通りというところ。ビデオのエンコーディングとかもやるのか。
- リージョンごとにs3バケットは1つだけ。
- s3のkeyはランダムに生成していて、key自体はDynamoDBに保存されている
- hot keyをさけるため。list operationはしていない
- s3ではAES256で暗号化
- 3リージョンで800サーバ以上ある
- 1時間に200GB以上ログでる
- ログはこれ JakeWharton/timber
- ログはs3 -> EMR -> s3でRedshiftにCOPY
- 機能を出しわけ出来る
- 0 -> 100%のユーザに適用、とか
- HTTP HEADで出し分けしている。設定ファイルはs3にある。
- 6つのチャレンジ。まずファイルサイズが様々なこと。
- 15MB以下だとPUTで。
- それより大きいならmultipart upload APIで。
- partは5MBで
- ただpartは10000までしか分割できないので、ファイルサイズ50GBが限界
- 早くアップロードすること
- 接続の中断
- ダウンロードサイズもばらばら
- リソースなくなるとでかいファイルのダウンロードが失敗する
- サイズごとにダウンロードのロジックをわけた
- 5MB以下の場合
- 単一のGET
- 失敗したら単純にリトライ
- 全オブジェクトの90%がこの大きさ
- でかいファイル
- 並列にダウンロード
- partは5MB
- 他の操作に影響されないスレッドプールを容易
- コネクションは再利用する
- 一回だけリトライ、だめならtimeout
- Apache HTTPClientをつかっている
- 並列にダウンロード
- でかいイメージのサムネイル
- サムネイル取得に 3000req/s とかくる
- 一時的なサムネイルの生成をしている
- 48時間でexpire
- keyは(customer id, image id, image version) のhash
- でかいファイルの直接ダウンロード
- 一次サインしたs3のURLにリダイレクトする
(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch
- デモみないとよくわからん
(NET302) Delivering a DBaaS Using Advanced AWS Networking
- Instaclustrの人
- Cassandra as a Service
- 300インスタンス
- 最初は顧客ごとにAWSアカウントわけてた
- アクセスとか請求分かりやすいけど、管理しづらい
- 全部Instaclustrのアカウントで管理するようにした
- どうやって顧客のクラスタからのアクセスを受け付けるようにするか
- 静的なipやっぱり欲しいよねっていう話
- VPC Peeringした。まあそうだよね。
(SEC403) Diving into AWS CloudTrail Events w/ Apache Spark on EMR
- IAMのSenior Security Engineerのひと
- あーSparkから単純にクエリするだけじゃなくて、Spark Streamingで異常検知もしよう、みたいな話か
- alertにしようという。
- Spark Streaming, 3秒ごとらしい
(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct
- Courseraの人
- 1500万learner, 1300コース、おおいなー
- RedshiftをDWとしてつかってる
- 1200テーブル・・
- 167人がRedshiftつかってる。3000万クエリ。やばい。
- coursera/dataduct
- 結構よさそう
(SEC324) NEW! Introducing Amazon Inspector
- AWSのPrincipal Security Engineerの人の発表
- InspectorはEC2にserviceとしてインストールして使うらしい
- Demoあるのでvideoみたほうがよさそう
(MBL402) Mobile Identity Management & Data Sync Using Amazon Cognito
- Cognito IdentityはIDあたえたりOpenID連携したりするやつ
- Cognito Syncなんていうのがあるのか
- CognitoのIDにはIAMのひも付けもできる
- IAMというかRoleか
- identifyされていてauthされているならtokenをもらえるようにできる
- CognitoのtokenはJWTのフォーマットになってる
- Unauthenticatedな場合にはSTSで一時的なcredentialを発行できる
- Cognito Sync
(DVO312) Sony: Building At-Scale Services with AWS Elastic Beanstalk
- Sonyのエンジニア。日本人2人の発表。
- もともと自社?IaaSにのっててモノリシックな環境。
- デプロイに半日・・設定管理manual。。。
- fluentdのロゴが
- beanstalkのsgとかどうしたんだろう
- あーDockerイメージのdisk容量問題だ
- appendix、実は大事なところだ。drawingのtimeoutとか。
- 面白かった
(DEV301) Automating AWS with the AWS CLI
- AWSの中の人?Jamesさん。
- Commits · aws/aws-cli
- aws-cliの開発してるひとかな
- 1コマンド1パラメータの出力にするとよい
|| errexit "err msg"
とかでエラーハンドリングしやすくなる
- 1コマンド複数出力のものをそれぞれ
aws
コマンドにわたしたいfor
とかxargs -I {}
- 実行するコマンドのパラメータをJSONに保存して実行したい場合
- jmespath/jp をつかうとJMESPathについてとりだしやすくなる
- でもamiのidとかinstanceのidとかはparametarizeしたい、みたいなことがよくある
instance=$(aws run-instance --image-id ami-1234 -query Instance[0])
みたいにしてはめ込む- query()を用意しておく
query() { jp -u "$2" <<<"$1" }
instance_id=$(query "$instance" InstanceId)
とすればidだけとれて便利- 前は
--output text
とかやってsedしたりしてたけど、--output json
でjp
つかうと便利だよ、とのこと
resource_exists()
はまあそうなるよな、という感じ
(DAT205) NEW LAUNCH! Introduction to AWS Database Migration Service
- 新しくでたAWS Database Migration Serviceの発表
- 違うDBの種類、異なるエンジンでもマイグレーションするよ、というサービス
- VPN経由でオンプレとAWSつないでマイグレーションすることができる
- AWS Schema Conversion Toolが出た
- ビデオみないとよくわからない
(CMP403) AWS Lambda: Simplifying Big Data Workloads
- FireEyeのMartinさんの発表。Lambda事例か。
What to Expect from the Session
は今回の発表スライドのフォーマットに指定されているのかな- Cyber Security & Malware Protection | FireEye
- ユーザのイベントを蓄積して、その中からevilなものをみつける、ということをしたい
- オンラインでindexingしているものと、s3に保存しているcold dataがある
- 入力: Questions, 出力: Answersと表現するの珍しいかも
- Lambda driven search and analyticsが気になる
- EMRでは異常検知をやってる
- k-means, 線形回帰、geographic time-lining
- Lambda
- レポート、可視化、統計値
- クラスタリング、相関、線形回帰、など
- レポート、可視化、統計値
- 大きさ: 5TB/dayくらい
- 1イベント: 3KB, 20K events/s
- Building Scalable and Responsive Big Data Interfaces with AWS Lambda - AWS Big Data Blog
- Lambda functionの複数走らせるためにfrontにnode.jsのアプリをおいている。ジョブのキックはここから。
- そこからLambda functionのprocessをspawnする。結果の集計をcascadeのアプリが担っている
- インメモリでLambda functionのspawnをキューしている
- cascadeではLambda functionでのcallbackをうけとって、集計して結果を返す。つまり、cascadeはMapReduceにおけるReduceの役割もしているといってよい
- ユーザに結果を返すにはnode.jsアプリからSSEで返している
- Lambda functionの中からs3のデータを読んでいる。
- 解凍、中見る、カウント、などなど。
- s3からのデータ取得は並列にやるとよい。いつものパターン。
- 面白い。
(NET403) Another Day, Another Billion Packets
- AWS SecurityのEricさんのプレゼン
- 割愛
(NET409) How Twilio Migrated Its Services from EC2-Classic to EC2-VPC
- Twilioの @sumbry さんのプレゼン。EC2 ClassicからVPCへの移行話。
- 2008年からAWSつかってて多くのサーバがEC2 Classicで動いてた
- あーグローバル展開する段階でregionまたぐときにregion間通信のためのproxy、というかNATつくってたのか
- あれ、VPCじゃないとHVMとかENIつかえないんだっけ
- Twillio Cloud: VPC基盤でのTwillio
- EC2 Classic環境とは完全に切り離して用意
- マイグレーションの手順
- 移行用のツール作った
- IP Tunnel Manager / ClassicLink
- ああ、もともと作ってたらClassicLinkでてきたからそっちつかった、みたいな話かな
- Global Service Discovery
- クラスタのなかのipを保持して、要求された時に返すagent
- HAProxyで分散ロードバランサ
- あーアプリからDBとか叩くときにはHAProxy経由にしているってことか
- Config-Renderer
- HAProxy Configsみたいなやつ
- Global Service Discoveryの情報を取得して返す
- IP Tunnel Manager / ClassicLink
- 無事移行進んでる
- 巨大なマイグレーションを一気にする必要はないんだよ、といういい話
(MBL317) NEW! Introducing AWS Mobile Hub
- 新サービス、AWS Mobile Hubの発表
- Demoみないとわからんという感じ
(ISM317) Amazon WorkMail: Corporate Email in Less Than 10 Minutes
- Amazon WorkMail、っていつでたんだっけ・・
(GAM406) Glu Mobile: Real-time Analytics Processing og 10 MM+ Devices
- Glu Mobileの解析エンジニアの人の発表
- DAUが400~600万、全世界で累計10億以上のインストール
- 要件など
- 最初はPythonのフロントアプリ -> s3 -> Redshiftな構成
- ETLはHadoopクラスタで。 Big Data as a Service — Hadoop and Spark as a Service を使っていた。
- 可視化はTableau
- 解析用のSDKつくって、必要なデータを集め始めた
- リアルタイム集計にはStormを利用
- Kinesis、マシンごとのシャードを増やそうとすると結果として小さいファイルがたくさんできてしまう
- IPのないレコードがあった場合
- Kinesis Streamのシャードのスケールには awslabs/amazon-kinesis-scaling-utils をつかう
(DAT207) Amazon Aurora: The New Amazon Relational Database Engine
- AuroraのGMの人の発表
- 去年Auroraの発表聴いたきり、ほとんどキャッチアップしてないなぁ
(DAT405) Amazon Aurora Deep Dive
- Aurora, Redshift, EMRのVPの人の発表
(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second
- CrowdStrikeの中の人の発表。
- CrowdStrike
- endpoint protectionのビジネス。500000 event / sec.
- 自明の理?
- Never run Cassandra on Amazon EBS これはw
- 要件
- 数百万デバイスから1PBのイベント来る
- バースト時は100万write / sec ...
- 95%が書き込みで5%がread。すごい要件だ・・
- 最初は Cassandra + Titanで
- Titan: Distributed Graph Database
- Netflixでも2014年に1M writes / secの追試をしている The Netflix Tech Blog: Revisiting 1 Million Writes per second
- EBSつかったらc4.2xlargeだけ使うより安くなるっていう試算、なんともすごいな
- Cassandra Summit 2015: Real World DTCS For Operators
- これ、日にちの経ったデータほどcompaction効かせる、ってことかな?
- 最初の立ち上げ: Cassandra 2.0.12, m3.2xlarge, 4TB EBS GP2 10000 IOPS
- ベンチマークのwriterにc4.4xlarge 20台もつかうのか。
- もろもろベンチとって達成
- Ubuntu, HVM, XFS
- Java8, G1GCか
- ああそういえばEBSのpre-warm必要なくなったのか
(ARC401) Cloud First: New Architecture for New Infrastructure
- Monsantoの人の発表
- 1000? VPCすごいな
- MonsantoCo/cloudformation-template-generator
- Scala製、CloudFormationのテンプレートを生成する
- MonsantoCo/stax
- CloudFormationのstackを管理する
- shell scriptだった、長い
(BDT305) Amazon EMR Deep Dive and Best Practices
- AWSの人とFINRAの人の発表
- EMR 4.1での話
- Zeppelin これ知らなかった。Spark向けnotebookか。
- OozieとかHueがすんなり使えるようになったのはいいよなぁ
- EMRFS
- DynamoDBつかってmetadataおくようにするとlistオペレーションが速くなる
(NET301) New Capabilities for Amazon Virtual Private Cloud
(DVO314) USA Today Uses Chef & AWS for Infrastructure Standardization
- USA TodayのChef事例
- 発表はGannettとChefの人
- Gannettでは複数メディアを運用していて、社内PaaSみたいになっている
(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift
- Yahoo!でのRedshift事例
- HadoopクラスタもあるのにRedshiftつかうのか
- Redshift
- 21 dc1.8xlarge, 20億イベント / 日, 1200クエリ / 日, 27TB
- Pigで加工してs3に置いたものをReshiftにロードしてる
- airbnb/airflow つかってる
- ETL
- upstream
- ClickstreamデータをOozieのhourly batchでHDFSに
- botoつかってs3へ
- downstream
- こっちはairflow
- upstream
- JOINをなるべく減らす工夫をしている
- ETLをデフォルトのキューでやるな、っていうのはそうだよなというところ
- Workload managementつかおうという話
- ユーザのリテンション分析用に多次元テーブルを用意していた
- 性別とかOSごととかにコホートだしていれておく
- いわゆる中間テーブル
(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs
- PMの人の発表
- API Gatewayよくわかってないからみておく
- SwaggerつかうとAPI Gateway設定を簡単にかける
- Swagger | The World's Most Popular Framework for APIs.
x-amazon-apigateway-integration
- awslabs/aws-apigateway-swagger-importer をつかうと簡単にswaggerでの設定をAPI Gatewayにインポートできる
credentials
でIAM設定も書ける
- API Gateway Mapping Template Reference - Amazon API Gateway
- Mapping Template便利らしい
- authorized api
- IAMで
execute-api:invoke
- resourceについてはAPIごとに許可の設定を書ける
API_ID/*/POST/pets
とか。
- IAMで
- IAM Policy Elements Reference - AWS Identity and Access Management
- fine-grained access permissionについてはここにのってる
- awslabs/api-gateway-secure-pet-store にサンプル全部載ってる
(CMP301) AWS Lambda and the Serverless Cloud
- AWS LambdaのGMの人の発表
- Lambdaのresource Sizingについて
- 23段階のpower levelがあるとのこと
- Scheduled Functions
- Versioning
- uploadしたら勝手にバージョニングしてくれる
- シンプルに1,2,3とincrementされるだけ
- 名前もつけられるっぽい
- alias
- uploadしたら勝手にバージョニングしてくれる
- VPCアクセスが可能に
- subnetとsecurity groupを指定するかたち
- ElasticacheとかRDSとかVPC内のEC2とか・・
- 年内に全部のregionで使えるようにするとのこと
(ARC309) Getting to Microservices: Cloud Architecture Patterns
- gilt.com の事例
- ブランドの商品を会員限定価格で提供してるサイト
- 正午にセールしてる、スパイクする
- 2007年ごろはRoRのモノリス
- 2011年にはJavaで
- Voldemortつかってるのか
- 各チームはそれぞれのビジネスラインにそって開発
- 2015年(現在)
- LOSA(lots of small apps) & microservicesに
- microservicesのレイヤはScalaで
- microserviceの構成
- 各サービスはだいたいJVM環境
*監視はNewRelic
- ScalaかJavaかJavaScript
- Scalaの場合はPlay, あとは内製のservice framework
- ScalaかJavaかJavaScript
- 各サービスはだいたいJVM環境
*監視はNewRelic
- ZookKeeperをservice discoveryにつかってる
- クライアントからZKに問い合わせ。サービス名でqueryしてURLをもらう形
- LBを挟んでapiのnodeに問い合わせる
- このあとDC -> VPCに移行
- microservice
- Dynamic Service Registry
- サービスごとにデータストアも分割したらしい
- 1コンテナ / 1インスタンスについて複数のサービスを置くのはやめた
- ユーザからのリクエストから複数のserviceに問い合わせるケース
- 毎回問い合わせるのではなくてcacheをつかって問い合わせを減らす
- リクエストのtrace
- serviceをまたいでリクエストが多段になるときも、一貫したIDをつけておくこと
- たとえば商品カタログはうまくでていても、決済が失敗してる、とかがわかるようになる
(NET405) Build a Remote Access VPN Solution on AWS
- SAの人の発表
- オンプレでもAWSでもいいけど、VPNの入り口をAWSにすればVPN経由のユーザについてのcapacityとかを柔軟にできるよ、という話
- CloudFormationでぽちっとやればできると
- VPCをたてる
- この構成のスケール例
(MBL311) NEW! AWS IoT: Securely Building, Provisioning, & Using Things
- AWS IoTのセッション
- ビデオみたほうがわかりやすそう
(DVO305) Turbocharge YContinuous Deployment Pipeline with Containers
- SAの人のセッション
- Using the Amazon ECS Command Line Interface - Amazon EC2 Container Service
- docker composeの設定をECSでつかえる
ecs-cli configure
ecs-cli compose build
とか
- JenkinsのSlaveをECSでつくるデモ
- これもビデオでデモみたほうがよさそう
(CMP406) Amazon ECS at Coursera: A general-purpose microservice
- CourseraのECS事例
- batchでやってること
- レポーティング
- Gradeだしたり学習者のデモグラだしたりとか
- レコメンドのemailつくったりもしてる
- 2012年1月ごろにやっていたバッチ処理の方法
- バッチジョブについてほしいもの
- いろいろ検討した
- 自家製でバッチジョブ用の何か作る?
- 調整とか同期まわりがめんどう
- Mesos
- 本番に入れるのが大変
- kubernetes
- opsは大変かも
- 自家製でバッチジョブ用の何か作る?
- ECS使いたい、がツールいろいろつくった
- Iguazu
- Long-running jobs at Coursera - Coursera Technology
- ECS用のジョブスケジューラ、Scala製
- IguazuのfrontからSQSでbackendに電波して、backからECSのapiを叩くようになってる
- Iguazuの管理画面からscheduledジョブをつくることもできる
- ジョブのデプロイはJenkinsで
- パッケージをzip、Docker imageを作成、registryにpushしてECSのAPIで引っ張るだけ
- ログ
/var/lib/docker/containers/*
にある- Sumologicにおくってる
- ジョブごとにnameとIDふってるのでそれで探せる
- メトリクスはDatadogつかってる
- Iguazu
- 規模は65ジョブ、44のスケジュールジョブ、1000job / day
- 別の話題、containerで危ないジョブを動かす
- Courseraのプログラミングの課題がある、それをテストするのにコンテナをつかってる
- CUDA, Scala, rails, Python, JavaScript, C ...
- 悪用されないように、課題を評価したい
- Courseraのプログラミングの課題がある、それをテストするのにコンテナをつかってる
- GrIDというシステムを作った: Grading Inside Docker
- ECS + Iguazu
- AWSアカウントをわけて、GrID用のアカウントで評価する
- GrID側でECSも動かす
- networkアクセスを限定、実行時間やリソースを限定
- VPCでinbound/outbound共に制限
- coursera/amazon-ecs-agent
- コンテナごとに独立したネットワークスタックになるようにagentを変更
- root権限周り
- DockerのsocketをDockerコンテナの中にいれるようにした
- セキュリティのモニタリングに Threat Stack
- ペネトレーションテストに Synack もつかっている
(DVO401) Deep Dive into Blue/Green Deployments on AWS
- blue/greenのパターン
- DNSのcutoverだとやっぱりrollbackがなーというところ
- ELB以下のASG切り替え
- rollbackも簡単
- ELBの暖気も、もともとあるのを使うから必要ない
- launch configの切り替えによる方法
- まあできるけど自分ならやらないかな
(CMP401) Elastic Load Balancing Deep Dive and Best Practices
- AWS Principal Engineerの人
- awslabs/s2n
- ELBでつかってるっぽい
- SSL Security Policies for Elastic Load Balancing - Elastic Load Balancing
(BDT319) New! Amazon QuickSight: Cloud-native Business Intelligence
- Directorの方。Amazon QuickSightは今回リリースされたもの。
- Amazon QuickSight - Fast Business Intelligence by AWS
- 対応するデータ
- RDBやNoSQLはもとより、EMR, S3, ファイル、streamingのデータソースもサポートするらしい
- SPICE: Super-fast Parallel In-memory optimized Calculation Engine
- columnarデータを2から4倍圧縮する
- SQLっぽい文法で扱える
- fully managed
- デモあったっぽい。ビデオみるか。
- やっぱりやすいなー
- ただGB課金は結構でかいかも
- Enterprise EditionだとAD連携とかアクセスコントロールができる。あと2倍速い。
- あとでビデオみよう
(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from Heroku to AWS
- Remindの方
- 先生のためのmessagingサービス
- 3000万ユーザ。USのpublic schoolの半数くらいで使われている
- 20億メッセージがやり取りされている
- 従業員50人以下、エンジニアは30人以下
- Herokuはいいけど
- 全部のappがpublicにアクセス可能
- DBさえも
- 制御できるところも限定されてる
- 全部のappがpublicにアクセス可能
- The Twelve-Factor App 初めて知った。webアプリが守るべき12の要素
- お、Goで書いてるのかな
- 最初はCoreOS + Fleetでやってたらしい
- routerはnginx
- Dockerコンテナのbuildは
git push
したら外部CIでやってる - Introducing Empire: A self-hosted PaaS built on Docker & Amazon ECS | Remind Empireっていうのはこれのことか
- ECS + DockerでつくるPaaS
- remind101/empire Goだった
- Dockerコンテナのログつかうのにlogspoutつかってる
- gliderlabs/logspout
- Dockerコンテナのためのlog router
- logはSumologicにながしてる
- Docker imageのビルドには remind101/conveyor をつかっている
- Introducing Conveyor: A fast build system for Docker images | Remind
- cacheレイヤをうまく使うようにしている
*1:結局月曜日から土曜日まで入院していました。これでアメリカ出張中だったら、、と考えると・・。チームのメンバーには迷惑をかけてしまいました。
ATSに対応できているかチェックするツールats_checkerを書いた
追記: El CapitanにATS用のチェックツールが nscurl
に付属したのでそちらをつかうことをおすすめします。
App Transport Security Technote: App Transport Security Technote https://developer.apple.com/library/watchos/technotes/App-Transport-Security-Technote/index.html#//apple_ref/doc/uid/TP40016240-CH1-SW7
/usr/bin/nscurl --ats-diagnostics [--verbose] URL
のように利用できます。
iOS9でApp Transport Securityが適用されます。
要約するとサーバ側でATSに対応するなら以下のことが必要です。
- TLS 1.2以上を使うこと
- Cipherは指定されているものを使うこと
ということでURLがATSに対応できているか*1、というのを調べる簡単なツールを書きました。
以下のように使います。acceptableではない場合にはtlsオブジェクトをとりあえずデバッグのために出力しています。(ちゃんと値を見せてあげないとわかりづらいですが・・・
-> % ats_checker https://google.com https://google.com is acceptable for ATS -> % ats_checker https://example.com https://example.com is acceptable for ATS -> % ats_checker https://apple.com https://apple.com is not acceptable for ATS debug info: &tls.ConnectionState{Version:0x303, HandshakeComplete:true, DidResume:false, CipherSuite:0xc014, NegotiatedProtocol:"", NegotiatedProtocolIsMutual:true, ServerName:"", PeerCertificates:[]*x509.Certificate{(*x509.Certificate)(0xc82049c000), (*x509.Certificate)(0xc82049c480)}, VerifiedChains:[][]*x509.Certificate{[]*x509.Certificate{(*x509.Certificate)(0xc82049c000), (*x509.Certificate)(0xc82049c480), (*x509.Certificate)(0xc8203aed80)}}, SignedCertificateTimestamps:[][]uint8(nil), OCSPResponse:[]uint8(nil), TLSUnique:[]uint8{0x5e, 0x2e, 0xd8, 0x2d, 0x9c, 0x75, 0x56, 0xa4, 0x68, 0xa4, 0x71, 0x61}}
これでATS対応もばっちりですね!
任意のコマンドを適当にリトライするツール、retryを書いた。
外部サービス叩いたりしてるとよく手元でretryすることになったりする。shellで書いても良いのだけど、Goで書いてみた。
suzuken/retry https://github.com/suzuken/retry
-> % retry Usage: retry <command> -initialInterval int retry interval(s) (default 1) -maxElapsedTime int Max Elapsed Time(s) is limit of backoff steps. If the job spends over this, job makes stopped. If set 0, the job will never stop. (default 10000) -maxInterval int cap of retry interval(s) (default 1000)
retry
を頭につければよしなにリトライしてくれる。
-> % retry command_not_found fake 2015/08/26 19:53:28 err: exec: "command_not_found": executable file not found in $PATH 2015/08/26 19:53:29 err: exec: "command_not_found": executable file not found in $PATH 2015/08/26 19:53:31 err: exec: "command_not_found": executable file not found in $PATH ...
リトライの間隔や、最高試行時間をつけることもできる。例えばジョブによってあまり何度もリトライしたくないものなどは最大試行時間を短めにするといい。
$ retry -initialInterval=2 -maxElapsedTime=8 command_not_found 2015/08/26 16:57:37 err: exec: "command_not_found": executable file not found in $PATH 2015/08/26 16:57:39 err: exec: "command_not_found": executable file not found in $PATH 2015/08/26 16:57:43 err: exec: "command_not_found": executable file not found in $PATH 2015/08/26 16:57:49 err: exec: "command_not_found": executable file not found in $PATH operation failed: exec: "command_not_found": executable file not found in $PATH
もしよかったら使ってみてください。
Go 1.5でgo docがちょっと便利になった
$ go doc fmt.Sprintf func Sprintf(format string, a ...interface{}) string Sprintf formats according to a format specifier and returns the resulting string.
見やすくなりましたね。