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

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

2017-01-01から1年間の記事一覧

2017年の振り返り

前回1年間の振り返り書いたのは転職前が最後だったのか。っていうか転職して丸3年経ったのか、早い〜。 今年はインフラエンジニアになっていきたいと思ってやっていった1年で去年の自分と比べて新しいことをたくさん覚えられてとても嬉しい。何か新しいこと…

Jenkinsfileでビルドするときにこれをつけておくと最高になる

Before & 最高なAfterのJenkinsfileのdiff currentBuild.description = に好きな値を設定するだけ ❗️❗️ stage ("start notification") { steps { slackSend color: "good", message: "ビルド開始しました" + script { + currentBuild.description = "ここに…

Jenkinsfileで複数ジョブまたがるやつをコード化できました

Jenkins pipline scriptとは? 昔はpluginで提供されてたみたいだけど、Jenkins2からは標準pluginになったという代物。Groovy DSLと、groovyのscriptでJenkinsおじさんのジョブをコードに落とせます。 Jenkinsfileでジョブを書くときのメリットとデメリット…

Datadogの効果的なモニタリングとAlertについてシリーズを読んだ

狼少年 少年が繰り返し同じ嘘をついたので、本当に狼が現れた時には大人たちは信用せず、誰も助けに来なかった。そして村の羊は全て狼に食べられてしまい、死亡した。 Wikipedia サーバーの監視でalertやwarningが増えすぎると、 だんだん暗黙の了解みたいの…

ECSの概念を理解しよう

※ 追記 結構ちょこちょこブクマしてもらっているので意外と需要あるのかな。 もし、記事見て分からないところあったら Twitterなり気軽に質問してもらって大丈夫です!! 社内でインフラエンジニア増やしたいなと思ってECSの概念を理解してもらおうと思って…

ECSのlogdriverにawslogsを指定した場合はawslogs-stream-prefixをつけたほうがいい

awslogs-stream-prefixをつけない場合 log stream名が "${docker psのCONTAINER ID}${randomな文字列}" となる。 これだと、例えば、あるコンテナのログだけ見たいっていう場合に、sshログインして、docker psしないといけない awslogs-stream-prefixをつけ…

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

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

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…