まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

プロダクションレディマイクロサービスを読んでハッとさせられた

とにかくハッとさせられた この本を読んで、マイクロサービスとか関係なく、社内のインフラもまだまだやれることあるなー、というかこの本に書いてあるレベルにしなければという気になった。 最初、雑にマイクロサービスってこういうものだよーみたいな本か…

Cloudwatch Logsが簡単便利安いだった

事の発端 Railsのlogrotateされたあとのファイルをどこに保存しようかと迷ったのがきっかけでした。 fluentdなどでS3に保存していくとか作るかーと思ってたんですが、社内のメンバーに相談してみたところAWSのCloudwatch Logsで簡単にできるよとのことで、調…

fluentdのS3 output pluginでは権限に注意しよう

現象 fluentdが集めてきたログをS3にputしていたつもりが、全体のうちの1/3ぐらいしかputされずそれ以外がロストしていたという話です。 調べてみると・・エラー吐いてた fluentdのヘルスチェックとかは確認していて、fluentdが死んでいる様子はない。 S3に…

Rails5とpumaを使ったときのlogrotateでハマった話

現象 普通Railsのアクセスログってproduction.logに出力されますが、出力されないことがあったという怪談の話です。 対応を1行でまとめると、Puma使うときはRails5からはRAILS_LOG_TO_STDOUTを設定しようということです。 ここからは怪談の詳細です 原因1: …

GASでconstの挙動がおかしいので使わない方がよさそう

GAS

GASだとconstのスコープが違う? 最近のJavascriptとかTypeScript界隈では、var、let、constが変数の宣言として使えて、scalaとかswift脳からするとなるべく再代入は避けたいのでconstを使いたい。 例えばfor文内で一時的な変数を宣言して利用しようとした場…

AWSのRoute53でpublic/private zoneの名前のつけ方に注意

aws

Route53のzoneの名前を同じにしていると・・ Route53では、外部公開用のpublic zoneとVPC内に閉じたprivate zoneで、それぞれレコードを登録することができます。 しかし、public/privateなzoneでdomain nameを同じにするとpublic zoneの名前が引けなくなっ…

Datadogでいい感じにAlertの通知を出し分けるやり方

出しわけたいユースケース 例えば、GCPの2つのprojectからCloud SQLの複数のDatabaseのmetricsが送られてくる場合。 project Aの場合は、こっちのチャンネルに通知、project Bの場合は、そっちのチャンネルに通知したいみたいなときに有効です。 metricsの設…

crondはtimezone変えただけだと反映されない

aws

cronはUTCのまま JSTにタイムゾーン変更したときに、crondをrestartしないと実行がUTCのままでした。 service crond restart で反映しました。 参考: Timezoneを設定したらcronの実行時間がずれる EC2の初期スクリプトとかでrebootいる? AWSのEC2のuser dat…

AWSのEC2でRetire Notificationというのがきた

aws

まとめ 突然EC2インスタンスが故障して、1時間後ぐらいにAWSからそのインスタンス修復不可能だからretireさせるよという通知がメールで来ました。 stopさせようにもstoppingでなかなか進捗しなかったので、開発環境だったからterminateしたけど、terminateも…

Terraform実践入門 #3

入門三部作ラスト www.mpon.me www.mpon.me ここまでで、簡単にTerraformの機能をおおざっぱに説明してきました。 今回は、そこそこ現実に即したインフラを作るまでの流れを追いながら、徐々にリファクタリングしていくことで実践的な考え方を身につけていき…

Google Container Engine+Deis環境にDatadog監視をいれる

概要 Google Container Engine(kubernetes)の監視環境の動向 - まーぽんって誰がつけたの?を受けてDatadogでやる Google Cloud Platform Integrationをいれる GCPのメトリクスをAPI経由でとってきてくれる kubernetes Integrationをいれる kubernetesのリソ…

Google Container Engine(kubernetes)の監視環境の動向

まずはk8sの監視環境について理解する DatadogやStackdriverなどの外部サービスを使うと簡単にできそうなのではあるが、そもそも何を監視しようとしているのかよく分からない。なので、まずは外部サービスを使わない場合どうなっているか調べてみた。 ちなみ…

Google Container EngineとLocustを使って負荷テスト環境をさくっと作る

GKE+Locustの負荷テスト環境を作ろうと思った背景 GKEとLocustを選んでみた理由としては以下のようなポイントでした。 インスタンスは秒課金なので気軽に利用できる GKE(k8s)なので動的ポートマッピングの設定などが簡単 Locustは単なるpythonのスクリプトの…

ログ収集基盤に求められる要素技術を理解する

○○○じゃダメなのか 単なるアプリケーションサーバー 秒間数百とか大量のデータを受け付ける場合に向いてない。 SQSじゃダメなのか キューイングが目的だけど、SQSは大量のデータを受け付けることは目的としてない。 SQSは命令をつっこむ、別のworkerがそれを…

Terraform入門 #2 Terraformはこわくない!!

Terraform入門 #1の続きです。 Terraformを始めるのに一番の障壁 既存のインフラコードで試してみたいけどアクセスキーの準備とかアカウント申請が面倒だし、なんか壊しそうで怖い:scream: 自分でやるにしても、AWS契約しないと試せないんでしょと思って面倒…

Terraform入門 #1 Terraformはいいぞ

前書き 人が書いたterraformのメンテぐらいは見よう見まねでやってるけど、一からやれと言われたらよく分からない。そう思ってた1年前ぐらいの自分を思い出しながら気軽に入門してもらうにはどうすればいいか考えてみました。 Terraformはこわくないしほんと…

GoogleAnalyticsのiOS SDKをpodspec側のdependencyにすると相性が悪い

GoogleAnalyticsのSDKのラッパーライブラリを作りたい そのためには、podspec側にdependencyを書いておく必要がある。こんな感じ。 Pod::Spec.new do |s| s.name = 'Example' s.version = '0.1.0' s.summary = 'A short description of Example.' 略 s.depen…

言語のコミュニティがどうとかどうでもいい

当方、iOSをobjcからやってて、Androidも少し。フロントエンドは、jqueryの頃から、typescriptあたりまでなんとなく。 サーバーは、Rails、Scala Play frameworkあたりを少々。 今はインフラ周り、AWS、GCP、コンテナ周りは、docker、k8s、ECS、Deisなどを、…

Objective-Cのallocは何をしてるのか

allocはNSObjectのクラスメソッド alloc - NSObject | Apple Developer Documentation + (instancetype)alloc; The isa instance variable of the new instance is initialized to a data structure that describes the class; memory for all other instanc…

AnyClassの正体

AnyObjectの型 typealias AnyClass = AnyObject.Type 何か分からないものの型を表現してる。 参考 Swifter - Swift Must Know Tips

kubernetesでserviceのselectorはnamespace内に閉じてるのか検証

まとめ 同じlabel名がつけられていてもnamespace内でのみ振り分けられる 検証の構成 GKE上で試した Deploymentでただ単にnginxかapacheが動いてるだけ sandbox1ではnginx、sandbox2ではapacheが動いてる Service(LoadBalancer)で接続 labelは同名にする name…

Swiftで動的にクラス作ってメソッド呼ぶ。しかも全く型情報がない状態で。要はjavascriptみたいなことがしたい

まとめ NSSClassFromString使う 引数が3つ以上だとperformSelectorは使えない SwiftだとNSInvocationは使えないので代わりにIMPを使う Class methodとInstance methodで呼び方ちょっと違う performSelectorの返り値の型はUnmanaged<AnyObject>でtakeUnretainedValueを使</anyobject>…

kubernetes meetup Tokyo #4に参加してLT発表してきた #k8sjp

k8sjp.connpass.com 今日はこれで発表してきます Kubernetes Meetup Tokyo #4 https://t.co/2rxxAnKyAB #k8sjp— オオシママサト (@_mpon) 2017年4月20日 ECSからGKEに乗り換えたい 感想 Google Japanの食堂でながーい会場で発表した。人めっちゃいた。 kuber…

GKEからCloud SQLに接続する方法

Deisのpostgresをoff-clusterにする(Cloud SQLを利用) - まーぽんって誰がつけたの?やDeisのpostgresをoff-clusterにする(postgresql on GCEを利用) - まーぽんって誰がつけたの?でCloud SQLをdeisのdatabaseとしようともがいてたけど解決した話。 Cloud S…

Proxy Protocolを知りました

Proxy ProtocolはL4におけるx-forwarded-forみたいなもの 2010年ごろからあるみたいだったけどお恥ずかしながら知らずに生きてきた。 HTTPヘッダが覗けるロードバランサー(L7ロードバランサー)ならx-forwarded-forとかx-real-ipとかにIPを追記していくこと…

Deis/routerでwhitelistでIP制限する方法

Security Considerations - Deis Workflow Documentationで公式にIP制限する方法が紹介されてるが、403が出る。 なんで403になっちゃうのかをここを調べてみた。 公式通りにやっても403 公式ページにもあっさりこうすればできると書いてあるが、確かに403に…

deis-routerなしでKubernetesのIngressでDeisを動かす

Clusterを作る時にデフォルトでついてくるLBを外す gloucd container clusters createをするときに、--disable-addons "HttpLoadBalancing"をつける。これをしないとGLBCがIngress Controllerとなってしまうため。コマンドラインからしか外せない。 cluster…

GKEだとデフォルトでIngress Controller(=GLBC)がいる

おまえ、そこにいたのか kubernetesでIngressでやる場合、Ingress Controllerが必要なんだけど、GKEの場合はマスターノード、つまりGCPのマネージドな領域でクラスター作成時に一緒に作られるようになってた。 で、これをGLBC(GCE Load-Balancer Controller)…

Deis Workflow v2.13.0でKubernetesのIngressがサポートされた件

Deisがverupした 本日、Deis Workflowがverupしたんですが、Changelogを見てるとIngressというものがなんか導入されてDeis/routerなくてもいけるみたいなことが。 そもそもWhat is Ingress? Kubernetesのたくさんあるリソースのタイプのうちの一つのIngress…

【AWSしかやったことない人向け】AWSとGCPのネットワークの違いを理解してみよう

背景 AWSでVPC作ったりしたことあるけど、GCPやったことないって人は色々違いに戸惑う アカウントの関係性、ネットワークの概念の違いなどを理解したのでまとめた AWSとGCPのアカウントの考え方の違い AWSの場合、ある人間に対して色々なAWSアカウントが付与…