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

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

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

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

Kubernetsに出てくる用語:PVCとは?

PVCとは? KubernetesのPersistentVolumeClaimsの略である。 https://kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims A persistentVolumeClaim volume is used to mount a PersistentVolume into a pod. PersistentVolumes are …

Deisのpostgresをoff-clusterにする(postgresql on GCEを利用)

やること mpon.hatenablog.com 前回はCloud SQLを使ったが、Cloud SQLはデフォルトネットワーク外にあるので、Cloud SQL Proxyをたてて通信するか、外部IPを許可するしかなかった。Deisの場合だと、proxyたてるパターンを使えず、外部IPを許可する方法にした…

Deisのpostgresをoff-clusterにする(Cloud SQLを利用)

やること postgresをoff-clusterする。 で、そのpostgresをどこに立てるかというとGCEにたてるかGCPのmangaedなCloud SQL(RDSみたいなやつ)があるので、どっちにするかということで、今回はCloud SQLを使ってみた。 Cloud SQL PostgreSQL beta Cloud SQLのポ…

deisでminioを置き換えるだけをやってみる

公式ページを参考に Configuring Object Storage 本当にここを変えただけ。bucketはGCSであらかじめ作っておく。権限とかもなんもしてない。 diff --git a/values.yml b/values.yml index c25cfb2..1d94aca 100644 --- a/values.yml +++ b/values.yml @@ -7,…

Deisをproduction運用するための設定の仕方調査

背景 Deisはhelmコマンドでインストールすれば簡単に入るけど、そのままだとデータ保存先がephemeralなものになってしまうのでダメ。他にもproduction運用のためにした方が設定があるのでまとめる。 調べ方 ほとんどdeisの公式ページに書いてあった installi…

Terraform0.9.0からremote configがdeprecatedになる

remote configがdeprecatedになる terraform0.9.0からterraformコマンド実行するとdeprecated warningがでてきます。 3行 remote configコマンドがなくなってinitコマンドが導入される backendという概念が導入されterraform.tfstateファイルを保存する設定…

terraform0.9.1からplanレベルでsecurity_groupのcidr_blocksのvalidateが入るようになった

0.9.1 changlog :tada: https://github.com/hashicorp/terraform/blob/master/CHANGELOG.md#091-march-17-2017 provider/aws: Validate CIDR Blocks in SG and SG rule resources (#12765) planで未然に防げる つい間違ってcidr_blocksの方にsecurity_group…

terraform consoleっていうREPLみたいなやつがあるの知らなかった

v0.8から導入された模様。俗に言うREPL。今のtfstateをもとにsyntaxを試すことができる。planやapplyなどを発行することはできないので安全。単にこういう時はterraformではどう書くんだろう??みたいなのを試したいときに便利。 例1: moduleのoutputを呼び…