GolangのGinをSystemdで動かすのにハマった

背景 デプロイ先のサーバーでビルドしたものを 以下のようなUnitファイルを作ったら起動できなかった話 [crayon-5b270d9cd12a5478901467/]   systemctl -l status hoge とやってもエラーが分からず /var/log/messagesを見るとpanic: html/template: pattern matches no files: templates/*が出力されてました。 賢い人ならこんなミスをしないと思うけど…;;   解決 [crayon-5b270d9cd12b0861854123/] WorkingDirectoryを追加して実行パスを適切に設定してあげれば 起動できるようになりました。 Golang…難しい。

外出先でも障害対応できるように 2in1 タブレットな ASUS T102HA を買ってみた

タイトル通りで外出先でも外出中でも障害対応ができるようにと タブレットを探していたんですけど色々悩んだ結果、20年くらい悩んでしましました。   候補はいっぱいあった ・タブレット ・2in1 ・小さいパソコン (GPD Pocket とか Vaio Pro 11とか) この3つの大きな外枠を決めるのに時間がかかった。 GPD Pocket みたいな小さい画面でFHDでターミナル表示とか フォントサイズを大きくしないといけないとか色々考えたら GPD Pocket である必要性はなくなった。 ちなみにどのOSでもそれなりのターミナルアプリはあるので 正直どのOSでも良かった。   2in1 な Windowsタブレット ASUS T102HA PENTAX Q-S1 (5mm, f/2.8, 1/30 sec, ISO800)これにした理由はないです…中古で30,000円だったから…。 メモリ4GB が載った Atom x5-Z8350 ターミナルぐらいだったら全然余裕だと思います。 T102HA 以外の 2in1 はメモリが 2GB とかだった気がする。   PENTAX Q-S1 (7.7mm, f/3.2, 1/30 sec, ISO800)スタイラスペンが付属してます。     外観 PENTAX Q-S1 (10.3mm, f/3.5, 1/30 sec, ISO800)下部:キーボードと接続する部分   PENTAX Q-S1 (12mm, f/4, 1/30 sec, ISO800)左:USB3.0 イヤホンジャック microHDMI microUSB(充電)   PENTAX Q-S1 (11.6mm, f/4, 1/30 sec, ISO800)上:電源ボタン マイク   PENTAX Q-S1 (5.7mm, f/2.8, 1/30 sec, ISO800)右:ボリュームボタン スピーカー 本体にキックスタンドがあって結構倒せます。 画像撮ってないけど後ろには指紋認証とボタンみたいのがあります。   PENTAX Q-S1 (5mm, f/2.8, 1/30 sec, ISO800)キーボード マグネットが割りと強力なので簡単は外れることはなさそう。   PENTAX Q-S1 (14.9mm, f/4.5, 1/30 sec, ISO800)キーボードはメンブレンな感じでキー自体が割りと高い JISじゃなくてUSが良かったな~   PENTAX Q-S1 (7.5mm, f/3.2, 1/30…

Slackにネイティブアプリのエンジニアに優しいBOTを作ってみた

皆さんSlack使ってますよね。 今じゃIT企業以外にもSlackが導入されてて日本への浸透も広がってきたと思います。   背景 今は趣味で色々やってるんですが、開発したAPIを叩くiOSエンジニアに 「最近のアクセスログが欲しい」 「エラーログ見せて欲しい」 等、色々と言われます。 ネイティブアプリのエンジニアはそもそもサーバーにログインする習慣がないので SSHのアクセス権限等を付与してあげてもインフラに関する知識や、覚えることが増えるので 直接聞いてきます。 これを解決するためにSlackのBOTがやるようにすればお互い楽なんじゃね?と思い、 作ってみた結果良かったのでチラ裏程度にご紹介です。   Buri Bot できることは ・APIサーバーのアクセスログを返す ・APIサーバーのエラーログを返す ・DBのテーブルを全て空にする ・DBのテーブル レコードを返す と言った、必要最低限のものを実装しました。   アクセスログを見る とりあえず最新の3件だけ   エラーログを見る エラーログはとりあえずの最新の1件だけ   テーブルを全部空にする APIを叩きすぎてぐちゃぐちゃになったテーブルをリセットするには とても便利。   テーブルの中身を見る GetRecord <テーブル名> <環境(stg|dev)> where <カラム> <値>みたいな感じで見る。 レコード数が多いとどうなるか分からない(文字制限が分からない)のでとりあえずwnereで規制しました。   結果 文字化けしててよく分からないけど便利だってことは分かりました。

MySQLのデータベースをインポートする際に存在するテーブルのレコードを削除せずにALTER文を作成、実行するスクリプトを作った

先月末に数学のテストを終えました。 C単位は降ってきてほしいと切に願います。 あと、中間発表を控えてます。   背景 ステージング環境のDBをプロダクション環境のDBへインポートする際に レコードを消すわけには行かず ・プロダクションにないテーブルは作成 ・すでに存在するテーブルはステージングとプロダクションの差異のALTER文を作成して実行 ということを実現したいと思っていたところ ・Workbench ・Schemea Sync ・手動 のどれかが解決方法らしい。 Workbenchを使うとうまく行かず、Schema Syncは導入が面倒、手動も面倒ということで シェルスクリプトで作ってみた。   schemaSync – シェルスクリプト https://gist.github.com/rluisr/ace0513d0251d6ceb2a093cf23b6dafb できること ・宛先DBにないテーブルを作成 ・宛先DBに既にあるテーブルはソース元と差異を取得してALTER文を作成、実行 ・AUTO_INCREMENTの値は不変 できないこと ・SSL ・テーブルオプション(文字コード等)の変更はされない 必要なコマンド ・mysql ・mysqldump ・mysqldiff   前準備 ソースのテーブル構造   宛先のテーブル構図 modifyがありません。   宛先テーブルにはレコードを追加しておきます。   ソースには追加でテーブルを1つ作り、計2つ   宛先DBのテーブルはそのまま1つ   実行する [crayon-5b270d9cd14ef709502462/] 最後にALTER文1つずつに確認画面がでるので 確認しながら実行できまできます。   宛先DBにソースのテーブルが作成される。   どちらにも存在したusersテーブルはレコードが削除されることなく ソースで追加したmodifyカラムが追加されました。 割りと実現したいことはできたかも。 他のエラー文を残したまま、WARNING文(パスワードをコマンドに書くな)無視はいつかやろうと思う。 本番環境で使ってみようと思います。 あ、これを使って生じた如何なる問題も僕は責任を持ちません。

Node.jsのプログラムをsystemdで動かすと意図しない動作をどうにかする

背景 Node.jsで書かれたプログラムをsystemdで動かすと 実行ディレクトリが変わってソースによっては意図しない動作をします。 例 コード [crayon-5b270d9cd15bd036009303/] 例 systemd Unitファイル [crayon-5b270d9cd15c3724840257/] 例 結果 [crayon-5b270d9cd15c5109768286/] requireで読み込んだプログラムはキャッシュされるため 逐一、使用する場面でキャッシュを削除し再度読み込むようなプログラムです。 systemd で動かすと結果の通り、キャッシュを削除していても Unix タイムスタンプが変更されずにいます。   原因 ソースコード fs.writeFileSync('/tmp/blog-test.log', path.resolve('date.js')); node test.js /root/blog-test/date.js systemd /date.js path.resolve('date.js')は相対パスから絶対パスを取得する部分ですが これがうまく動いていません。 systemd は cgroups を使って管理されるため プログラムの実行パスが / となり、delete require.cache が動きませんでした。     解決方法 サーバー上では systemd で起動しています。 各エンジニアのローカル環境でも正常に動いてほしいので サーバー上に環境変数を用意して雑に対応しました。 [crayon-5b270d9cd15c8172897118/]     思ったこと 「○○エンジニアは、○○だけに精通していれば良い」という人に反対です

Vultr.com $5 VPS と AWS EC2 t2.micro どっちがオススメか

初めて精神安定剤みたいのを買いました。 今後外出するときは使用してみたいと思います。   背景 会社のHPなどサービスを提供する際に停止してもそこまでクリティカルでないものを 如何に安く運用するかと考えたときにVPSかEC2かで悩んだので色んな観点からまとめようと思った次第です。   EC2以外の選択肢 EC2は思ったほど性能が良くない(と耳にしたことがある)ので クリティカルじゃないものなら敢えてEC2じゃなくて他社のVPSで良いのではと思う 国内のVPSだと さくらインターネット GMO カゴヤ ConoHa 国外だと Vultr.com cloudatcost AlphaRacks とか色々あります。 この中でもVultr.comは安くて安定性も良かったので 今回は Vultr.com $5/m のVPSとEC t2.microを比べてみます。 スペックはどちらも 1Core / 1G です。 月額$2.5で東京リージョンがある激安SSD VPSを契約してWordPressを移行した「Vultr」   スペック EC2 t2.micro Vultr  $5 CPU Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz Virtual CPU MEM 1G 1G SSD 8GB (gp2 – EBS) 25GB OS CentOS 7.3.1611 CentOS 7.3.1611 参考 ap-northeast-1a 東京リージョン どちらも CPU/MEM は 1Core/1G です   UnixBench t2.micro – 1回目 [crayon-5b270d9cd17ae625218961/]   t2.micro – 2回目 [crayon-5b270d9cd17b8507168617/]   Vultr $5 – 1回目 [crayon-5b270d9cd17bb730522210/]   Vultr $5 – 2回目 [crayon-5b270d9cd17c2562721911/]   結果 – UnixBench EC2 t2.micro Vultr $5 1回目 1586.7 1303.6 2回目 871.6 1333.7 1回目は t2.micro が優勢だったけどこれはT2インスタンス特有のバーストです。 クレジット残高が無くなったので2回目は本来の性能(言い方が難しい)になってます UnixBenchって何だかんだCPU寄りの結果だと思ってる(個人的に)ので fioもやってみたいと思います。     fio $ fio -filename=/tmp/test2g -direct=1 -rw=…

7,000円で買った SIGMA 70-300mm F4-5.6 APO DG MACRO レンズを LA-EA3 + α7II で使ってみた

今月は暑い日が多いらしいです。 嫌ですね…電車の空調は寒すぎて辛いです。   望遠マクロレンズを買ってみた PENTAX Q-S1 (5mm, f/5, 1/30 sec, ISO1600)SIGMA 70-300mm F4-5.6 APO DG MACRO をヤフオクで落札しました。 7,000円でした。新品でも2万円を余裕できる価格なのでレンズ自体が安いレンズです。   PENTAX Q-S1 (7.2mm, f/5, 1/30 sec, ISO800)Vario-Tessar T* FE 24-70mm F4 ZA OSS SEL2470Z と比較 レンズが質感が安っぽさが躊躇して出ていて何となく撮影意欲を削られる…。 リングの部分はゴムになっていて中古故に、新品同様の綺麗さはありません。 ここは致し方なしです。     PLフィルターも買ってみた「K&F Concept 偏光フィルター」 PENTAX Q-S1 (5.2mm, f/5, 1/30 sec, ISO800)K&F というメーカー名を初めて聴きましたが購入してみた。 Amazon.co.jp で1,373円でした。   PENTAX Q-S1 (14.9mm, f/5, 1/60 sec, ISO1600)JAPAN って書かれてるけど Made in JAPAN なのかな?? ダサいと行ったこともなくて価格の相応だと思います。(比較してないけど) フード着けちゃうのでダサくても問題ないんですけどね。     フードも買った「Kenko ラバーフード マルチレンズフード KMLH-58」 PENTAX Q-S1 (5mm, f/5, 1/30 sec, ISO800)このフードの良いところは単焦点から望遠レンズまでカバーできるラバーフードです。 ラバーなのでプラスチックではなくて、ゴムです。   ただこのフードのデメリットは逆付けができないので 携帯性が悪いです…。あとゴム製なので埃とかが付きやすいです。   PENTAX Q-S1 (5mm, f/5, 1/30 sec, ISO800)今回買った SIGMA 70-300mm F4-5.6 APO DG MACRO に KMLH-58 を取り付けるとこんな感じに。 レンズの赤い線と、フードの赤い線がいい感じに合ってる…。     マウントアダプターも買ったよ「SONY LA-EA3」 PENTAX Q-S1 (6.7mm, f/5, 1/30 sec, ISO1600)SONY α7II は Eマウントなので今回の SIGMA 70-300mm F4-5.6 APO DG MACRO (Aマウント)を取り付けるには E→A…

作ったAMIからインスタンスを作成するとSSHのパラメーターが変わる

背景 Auto Scaling Group の起動設定の元となるAMIを作成する際に SSHのPasswordAuthentication yesとしてAMIを作成をすると 復元するときにPasswordAuthentication noに戻ってしまう問題   原因 cloud-initが原因 [crayon-5b270d9cd19b5146726587/] ssh_pwauth: SSHのパスワード認証の有効/無効   cloud-init について Package provides configuration and customization of cloud instance. 僕の認識があっていれば起動時に毎回実行されるinitスクリプト(例外有り) 参考: cloud-initのデフォルト挙動を徹底的に調べてまとめてみた -結果ソースコードを読んだ-