Q. 2017/12/9 の AWS Lambda の OpenSSL のバージョンは?
import ssl def lambda_handler(event, context): return ssl.OPENSSL_VERSION
チェック!
結果: "OpenSSL 1.0.0-fips 29 Mar 2010"
おし、めんどくさくなってきた。
情報元:
OpenSSL 1.0.2 Shared Library missing · Issue #855 · Miserlou/Zappa · GitHub
AWS Lambda の Traffic Shifting Using Aliases で無理やり Chaos Engineering
できんじゃねと思ったらできました。無理やり。
この間発表された AWS Lambda の更新で、エイリアスに対して割合で別バージョンを割り振ることができるようになりました。
ユースケースとしては Canary や Blue/Green が上がってたんですが、Chaos もいけんじゃねと思ってやってみたら一応できました。
正常なコードが以下です。バージョン 1 です。
import json print('Loading function') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) print("value1 = " + event['key1']) print("value2 = " + event['key2']) print("value3 = " + event['key3']) return event['key1'] # Echo back the first key value #raise Exception('Something went wrong')
異常なコードが以下です。バージョン 2 です。
なんも考えてません。例外はくだけ。
import json print('Loading function') def lambda_handler(event, context): raise Exception('Something went wrong')
んで、エイリアス chaos
をつくり、バージョン 2 へ 5% の確率で行くよう設定します。
あとはひたすらポチポチ実行。
おー、できました。無理やり感が否めないですがw
例外パターンを最初に考えないときつそうかなー。
あとどうやって例外バージョンを指定して割り振るかってのが難しそう。
ただ形にできると発展も効きそうです。ひたすらスリープして落ちるとか。
Serverless のプラグインとかですかね?
Rust の ライブラリ Rusoto を使って AWS サービスにアクセスする
表題にあるとおり、Rust から AWS にアクセスするための SDK を大分前にメモしていたので試した、という話。
extern crate rusoto_core; extern crate rusoto_s3; use rusoto_s3::{S3, S3Client}; use rusoto_core::{DefaultCredentialsProvider, Region}; use rusoto_core::default_tls_client; fn main() { let provider = DefaultCredentialsProvider::new().unwrap(); let client = S3Client::new(default_tls_client().unwrap(), provider, Region::ApNortheast1); match client.list_buckets() { Ok(output) => { match output.buckets { Some(bucket_name_list) => { println!("Tables in database:"); for bucket in bucket_name_list { println!("{:?}", bucket.name); } } None => println!("No tables in database!"), } } Err(error) => { println!("Error: {:?}", error); } } }
S3 のバケット列挙がこんな具合。
対応状況曰く、今のところ安定しているのが、
- EC2
- ECS
- DynamoDB
- ETS
- KMS
- SQS
らしいってS3入ってないじゃん!動いたよ上のコード!
と、ということはログを受けまくって AWS にあげてくれるやつが書けるかも…
楽しくなってまいりました。
Windows でプロセスごとの TCP IO をとってグラフにした
まぁいうてリソースモニターでできてることなんですが…
それでも面白いことがあったので。
結果はこんな感じ。
時々帯域をとってるのは、Firefox の通信です。
ブラウジングはこんなもんですかね。サイズ的にも KB なので、そこまでがっつり見に行ってなかったです。
で、これを通信イベントの回数にしてみると面白いんです。
やたらめったら目立つ黄色があったので、これだけに絞ってみます。
なんか定常的にやってる! あ、イベントの精査もできていないのでこれだけでこいつが悪者だ!!てわけではないです。
で、vpnkit という docker 関連のプロセスが発行しているですが、どんなイベントが発行させてるのかなーと調査してみたくなってきました。
何やってるんだろう。ワクワクします。
ちなみにサーバー側ですが、 docker-compose で InfluxDB + Grafana をローカルにたてて、 そこに向けてメトリクスなげてます。
以下の記事を参考にさせていただきました。感謝感謝。
influxDB + Grafanaに入門する - Qiita
クライアントは Rust で書いたんですが、unsafe
まみれなのでどうにかしたい…
そのあとにクライアント側で合算してサーバーに投げるとかになりますかねー
後は PID からプロセス名にするもありますか
先はながいなー
Grafana で AWS の見える化がすぐできた
いやー、すごい。
わかったらすぐできました。
例として AWS の使用料を見える化します。
まず、AWS 側で計測をはじめるため、請求ダッシュボード
-> 設定
-> 請求アラートを受け取る
にチェックをつけます。
で、Grafana を公式サービスおひとり様用で作成します。
Grafana のデータソースまで遷移して、プルダウンメニューから Cloud Watch を選びます。
一度、AWS にもどり IAM で以下のポリシーを付けた測定用のユーザーを作成、アクセスキー ID とシークレットキーを発行します。
- CloudWatchLogsReadOnlyAccess
- CloudWatchReadOnlyAccess
で、Grafana に戻り作成したアカウント情報を入れて、保存します。 ここでエラーが出る場合はポリシーの確認とかをするとよいかもです。
で、ダッシュボードのインポートで 139 を入れて、先ほど追加したデータソースを選び、ロードすると!
でたー!!
いやー、共有はつよいですねー。 先ほどの 139 も Grafana の公式サイトで公開されているやつです。
Grafana はローカル環境の性能計測で 3.x とかを使っていたので、ここまで進んでるとは思ってなかったです。いやすごい。
使用料だけでなく Lambda やら EC2 やら ElastiCache やらまで…
インフラはさっぱりなので、知見の塊っす。ありがたや。
誰か3か月前の僕にこの情報を届いてほしい…