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

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

えっ、nginxって$HOGEで環境変数読めないの??

人のコード見てわかった気になっていた 社内の他のインフラエンジニアが作ったnginxのDockerfileなどを見て、環境変数を読み込んでるっぽいらしい記述を横目で見ていたのでnginx.conf上で$HOGEとか書いておけばなんとなく環境変数って読めるんだろうって思っ…

WordpressをAmazon ECSで冗長化する

wordpressを動かすには何が必要か まずwordpressを動かすために何が必要かを整理すると、wordpressはMySQLとphpが動く環境が必要です。 なので本当に必要なものはDBサーバーとWebサーバーだけなんだけど、実際の本番運用してくとしたら画像のキャッシュとかD…

雑にテキストファイルを暗号化する

ssh公開鍵でファイルを暗号化する zip付きパスワードみたいの作るのがなんかmacだと面倒? なんかソフト入れないといけないとかなんか面倒なので会社で行われていたやつをメモしておく。 GitHubの公開鍵をとってきて暗号化 実はGitHubの公開鍵は全世界に公開…

dockerを何かを生成したり実行したりするツールとして使うという選択肢

dockerはサーバー動かすやつでしょ? dockerといえばサーバーみたいなものに使うものだと思っていました。転職してきた当時、こんな風に使えるんや!と自分の中でパラダイムシフトが起きたのを覚えています(大袈裟) cloudfrontの署名URLを作るperlのスクリ…

iTerm2を使ってる人限定だけどHTTPieとimgcatを使って画像を確認する方法

cli

リクエストにカスタムヘッダーを入れて画像を表示したい chormeでurl打ち込んで画像表示したいんだけど、そのときにカスタムヘッダーを入れたい。 そういうChrome拡張入れてもいいんだけど、なんか評価が高いやつとかデファクトっぽいやつがぱっと見つからな…

scrapboxが日々開発するときの思考の整理にすごくよい

scrapboxとは? 知らない人もいるかもしれないので一応前置き。 scrapboxはなんか共同編集できるwikiみたいなサービス。 Gyazo作ったところが作ってる。 scrapbox.io scrapboxを使うとラバーダッキングができる ラバーダッキングとは 開発中にどうしようもな…

terraformが0.10になってからproviderがpluginで取り込むようになってた

providerごとにrepositoryが分裂した https://www.hashicorp.com/blog/upcoming-provider-changes-in-terraform-0-10 0.9系まではhashicor/terraformで全てのprovider(AWSやGCPやいろんなもの)を管理してた。なのでそこに全ての要望やバグ報告がくるのでis…

Jenkinsではジョブを並列実行すると`@`がついたworkspaceが複数作成されるので容量に気をつけよう

Jenkinsが頻繁にdisk fullになる ビルドの破棄の設定などもしているんだけど、workspaceがすぐに肥大化する問題が起きていた。あるジョブのworkspace配下に@がついたディレクトリがたくさんできてしまっていることは分かっていたんだが、消してもたまに復活…

sentryでslackに通知するときにサーバー名とかを出すようにする設定方法がさすがだった

Sentryデフォルトだとサーバー名がスレッド番号みたいなやつ confで切り替えたりマイクロサービスっぽい感じでやってると、どのサービスか分からないからこれじゃ困る。かといって、それごとにproject作ってSENTRY_DSNを変えるのもめんどうだなぁと。 そこで…

Jenkinsfileですごく雑な承認フローそこそこ簡単に入れられた

ビルトインの機能でできる pipeline input step という機能を利用したら簡単にできました。とりあえずフローがどんな感じかで流れてくか紹介。 まずはジョブを普通に実行します ジョブを実行する人はいつも通りです するとslackに通知がきます これはリンク…

Datadogのアラートtrigger設定項目のon averageの使い方に実は条件があった

on averageはある期間の平均だと思っていた Datadogはこんな風にあるメトリクスの値が閾値を超えたらslackに通知するみたいな感じのことをこうやって設定します 指定したメトリクスの値が、5分間(during the last 5 minutes)の平均(on average)が300を上回っ…

datadogでrecoverdされない問題をサポートに聞いたら色々教えてくれた

alert出た後にrecoverされない alertが通知されたけど、その後、recoverdが来ないという現象 次の日になってrecoverされた これはなんかやり方があるだろうとdatadogのサポートに連絡 原因 サポートの回答 > AWS Cloudwatch doesn't generate a metric value…

terraformでECSのクラスタ、サービスのモジュールの構成を変更した

terraformでECSのclusterとserviceを作成するにあたって実際の運用を通して少し変わってきたのでまとめておく。 最初のterraformのmodule構成で起きた問題点 以前は、aws_ecs_clusterとaws_autoscaling_groupを同一moduleにおいていた。 問題その1: インスタ…

Spot Fleet化するまでにはまったところと工夫した点

AWS

入札するインスタンスタイプとストラテジー spot fleetの分散ストラテジーには、lowestPriceとdiversifiedがある。lowestPriceはその時点で入札を入れたプールの中で一番最安値のやつで全台購入する。なので、そのプールが高騰したときに弱い。 じゃあ、dive…

AWS Spot Fleetでインフラ作ったら安すぎたので本当は内緒にしておきたい話

会社で昔発表したやつを汎用的な感じにして残しておきます。 EC2のお値段が性能そのままに8割お安くなりましたという話 Spot Fleet前のAWSのECSでクラスター構成について クラスターのEC2インスタンスはオンデマンド(定価)のautoscaling Docker化でスケー…

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も…