ConohaのロードバランサーでHTTPのヘルスモニターがうまく動作しない

当社はNginxでConohaのロードバランサーを使用している。

今まではPINGでヘルスチェックを行っていたのだが、Nginxに障害が出た際に、Pingだと予備サーバーのNginxデーモンが落ちた際に、うまいことバランシング出来なくて、障害が発生したので、HTTPのヘルスチェックに切り替えることにした。

でもうまいこと行かない

原因はHTTPSでした。

今までNginxは

server {
listen 80;
server_name xxx.medicalfields.jp;

if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
}

てな感じで設定したんだけど、どうもConohaだとHTTPでアクセスするとステータスコードが301(URL転送)になってヘルスチェック失敗になるっぽい

そのため親ディレクトリだけはHTTPでアクセスした際にリダイレクトしないように設定した

解決↓

server {
listen 80;
server_name xxx.medicalfields.jp;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location ^~ /php/ {
if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
}
}

ロードバランサーでHTTPのヘルスチェックに失敗する場合は、参考にしてください

 

WordPressのサーバー移動時に記事のURL(ドメイン)を変えることなく、新サーバーで事前テストする方法

タイトルが長くなったけど、つまりはWordpressの設定で

WordPress アドレス (URL):medicalfields.jp

みたいな感じで普通は設定するけど、これだとテストで自分の環境だけで動かしたい場合、テスト環境じゃなくて本番環境のURLに飛ばされる(当たり前だけど)

でも、サーバー移行時のテストなどで、どうしても自分の環境だけで本番URLのままで試したい場合がある。

解決法:

hostsファイルを書き換えましょう

具体的にはテスト環境のIPアドレスに書き換える

例えば当ブログだとmedicalfields.jpがドメインなので、これをテスト環境のIPアドレス(ローカル環境だと127.0.0.1とか)に書き換える。

そうすると、なんとローカル環境でもURLがきちんと逆引きされWordpressが問題なく動作する。

ちなみにWindowsの場合でしか試していないですけど、マックでも問題なくできるとは思う

やり方:

・Windows 10のhostsファイルの場所

C:\Windows\System32\drivers\etc\hosts

127.0.0.1 medicalfields.jp

と追加する

ちなみに管理者権限じゃないと書き換えれないです。また、上書きしたら直ぐに反映されます。

これを知っているだけでwordpressのサーバー移動がかなり楽になるので、ぜひ試してください!

CentOS7からCentOS8に移行した時にトラブったこと

現在当社ではConohaのVPSとオブジェクトストレージとロードバランサーを利用している。

その中でさらにVPSではDB(mariaDB)サーバー、HTTPS(Nginx)サーバーで分けている(DBはインターネットからは接続できないようにしている)。

セキュリティアップデートと動作が早くなるとのことで今回VPSをすべてCentOS8に変更してみた。

素直に動作するかなーと思ったら動作しなかったので、トラブった所をメモ

トラブった所

症状:カスタムのネットワークスクリプト(/etc/sysconfig/network-scripts/)で設定した、プライベートIPアドレスの設定がうまいこと行かない

nmtuiで確認したのに、なんかプライベートIPアドレスが設定されていなかったり設定されていたりする。

これ凄く悩んだ。なぜなら中途半端にスクリプトが動いたから

例えばcd /etc/sysconfig/network-scripts/

でロードバランサーを使用する場合はlo: <LOOPBACK>の設定をするんだけど、Loは有効になってなくて、eth1とかはスクリプトが動いたから(nmtuiでの設定は信用できない?)

ifcfg-eth1は動きます

解決法:network-scriptsが未インストール(deprecated)なのでインストールする

コマンド:yum install networkscripts

 

 

症状:systemctl restart network が動作しない

解決法:systemctl restart NetworkManager.service にかわった

とりあえず、ネットワーク関係がちょっと変わっている。

それ以外は一応問題なく動いた。

まぁCentOS8からyumじゃなくてdnfに変わったけど、しばらくはyumが使えるっぽい

あと、メインHPのWordpressの移行もやったからそれについても後日記事各予定です。

Windows hostsファイルを書き換えて、ローカルで確認ってやり方が凄く良かったから、それについて詳しく書きます!

 

AWS IoT ButtonでSwitch Botをオンにする

現在、当家ではセコムホームセキュリティに入っている。

これをSwitch Botを使ってアマゾンダッシュボタンではなくアマゾンダッシュボタンの代わりとなるAWS IoT Button(AWS IoT エンタープライズボタンとか)でオン、オフを制御しようと思う。

イメージとしては

AWS IoT Button

自宅ルーター

AWS IoT 1-Click

AWS Lambda

IFTTTのWebhook

自宅ルーター

Switch Bot Hub

Switch Bot

セコムホームセキュリティがオン

という流れ。

ボタンが押されたらセコムが自動的にオンになって、すごく安全になるはず。

この設定で難しいところがAWS関係だと思うので、そこを中心にやり方を説明します!

やり方

1.スマホにSwitch Botインストールし、ID作って、セットアップ

2.スマホにIFTTTをインストールして、IFTTTのSwitch Botのアクセスを許可して、WebhooksでSwitch Botの連動設定

こんな感じになる

3.スマホにAWS IoT 1-Click(Apple Store Google Play)をインストールして、AWS IoT buttonをセットアップ

4.PCよりAWSにログインしてサービス→コンピューティング→Lambdaを開いて関数作成

関数名:secom

ランタイム:python 3.6

でプロジェクト作成

5.Lambdaの関数コードにIFTTTと連動させる

 

IFTTTのAPIキーはWebhooksのAccount Infoで見れる

シングルクリック、ダブルクリック、長押しの変更は以下のコードを参考にしてください

↓これを入力(APIキーはかえてね)↓

import json
import urllib.request
    
def lambda_handler(event, context):
    clicktype = event['deviceEvent']['buttonClicked']['clickType']
    print(clicktype)
     
    if (clicktype == "SINGLE"):
        url = 'https://maker.ifttt.com/trigger/secom_on/with/key/あなたのAPIkey'
        message = "ボタンが1回押されました"
    elif (clicktype == "DOUBLE"):
        url = 'https://maker.ifttt.com/trigger/secom_off/with/key/あなたのAPIkey'
        message = "ボタンが2回押されました"
    elif (clicktype == "LONG"):
        url = 'https://maker.ifttt.com/trigger/secom_off/with/key/あなたのAPIkey'
        message = "ボタンが長押しされました"
    else:
        message = "clickTypeを正常に取得できませんでした"
        

    req = urllib.request.Request(url)
    with urllib.request.urlopen(req) as res:
        body = res.read()
    return {
        'statusCode': 200,
        'body': json.dumps('')
    }

作成できたらこんな感じになる

6.AWSのメイン画面に戻って、サービス→IoT→IoT 1-Click→プロジェクトを作成を選択

7.プロジェクト名に適当な名前をつけて以下のように設定し、プロジェクトを作成

8.作成したプロジェクトにプレイスメントを以下のように設定。

9.IoT 1 Clickのメイン画面に戻って、管理→デバイス→デバイスの有効化

以上で設定完了です。

これでIoT buttonを押したらSwitch Botが反応するようになります。

ただ、注意点として、毎月AWSのサーバー利用代金に25円ほどかかります。

また押してからのタイムラグは7秒ほどあります!

 

 

Buffaloの外付けSSD(SSD-PM120U3A-S)を分解したらSSDが入ってなかった

ノートパソコンのHDDが壊れたから修理のためにSSDを調達しようとした。

すると最近SSDの値段が高騰していて、2.5インチの内蔵SSDがなかなか昔と比べて値段が上がっている。

安く買えないかなーと思っていたら128GBのBuffaloの外付けSSD(SSD-PMU3AシリーズのSSD-PM120U3A-S)が相対的にお安く買えたので購入した。

これを分解してHDDが壊れたノートパソコンに換装する予定だったのだが、誤算だった。

↓分解から結果↓

2.5インチのHDDとの比較、明らかに小さい(この時点でちょっと焦る)

裏の比較

USB3.1(Gen1)の差込口

普通に小さなマイナスドライバーでこじ開ける

 

こじ開けた結果

 

SATAが挿せるSSDが入ってない・・・・・・・・

使いみちがなくなってしまった。

非常に残念

Google Tag Managerでタグが配信されないことがある

当サイトではGoogle Tag ManagerからGoogle Analyticsに飛ばしてサイトのアクセスを管理している。

そのときにURLに /blog/ が含まれている場合はBlog用のUniversal Analyticsに飛ばして、でもmedicalfields.jpのAll pagesの解析もしたいとのことで、これにもタグを飛ばしている。

でも何故か、All Pagesのタグが飛ばないことがある。

モバイルだとより飛んでなさそう

これは多分ブラウザのリクエスト数の制限を受けているからっぽいです。

https://support.google.com/tagmanager/answer/6103683?hl=ja

発火するタグは減らしましょう

 

あと、<!– Google Tag Manager (noscript) –>タグの設置はちゃんと<body>のあとにしましょう

最新の医薬品データベースを取得できるサイトまとめ

医薬品のデータベースには色々な種類がある

例えば個別医薬品コード(YJコード)、薬価基準収載医薬品コード、レセプト電算処理システムコード、JANコード、調剤包装単位コード、販売包装単位コードなど沢山

薬価基準収載医薬品コードと個別医薬品コードの違い

 

国とか一般財団などが提供している、最新情報にアップデートされる(はずの)無料で使える医薬品データベースをまとめました。

 

薬価基準収載医薬品コード(=厚生省12桁コード)

個別医薬品コード(=YJコード)

JANコード(≒販売包装単位コード)

レセプト電算処理システム用コード(1)

医薬品名

Medis一般財団法人 医療情報システム開発センター

 

レセプト電算処理システム用コード(1)

医薬品名

医薬品名(カタカナ)

薬価

薬価マスタ診療報酬情報提供サービス

 

個別医薬品コード(=YJコード、商品を区別できる)

JANコード(≒販売包装単位コード)

調剤包装単位コード(ヒートのバーコード [0] から始まる)

販売包装単位コード(箱のバーコード [1] から始まる)

元梱包装単位コード(多分ダンボールとかのバーコード [2] から始まる)

販売名・調剤包装単位コードファイル一般財団法人医療情報システム開発センター

 

薬価基準収載医薬品コード(=厚生省12桁コード)

成分名

薬価基準収載品目リスト及び後発医薬品に関する情報について厚生労働省

 

※ちなみにJANコードは廃止されたけど、販売包装単位コードから頭文字の「1」を抜いて、チェックディットを計算させて増やせばJANコードに擬似的に復元することはできる。

薬価基準収載医薬品コードと個別医薬品コードの違い

Meids収載の個別医薬品コード(YJコード)薬価基準収載医薬品コードは微妙に違う

 

基本的に、[個別医薬品コード(YJコード)]=[薬価基準収載医薬品コード]で割り当てられているけど、たまに違うコードがある

これは、薬価請求の時に2種類の方法で請求ができる医薬品があるため、その場合は[薬価基準収載医薬品コード]として別に割り当てられているからだ。

 

商品名レセ電算コード」と「統一名レセ電算コード」による請求である

※Medisでは

商品名レセ電算コード=レセプト電算処理システムコード(1)

統一名レセ電算コード=レセプト電算処理システムコード(2)

 

統一名レセ電算コード」による請求は同じ成分の医薬品なら同じ金額になる

そのため、「統一名レセ電算コード」による請求が出来る場合は、他の同じ成分の医薬品と同じコードになる(ちなみに[薬価基準収載医薬品コード]は末尾から2つ目に全部[01]が割り当てられている)

 

例:アマンタジン塩酸塩錠50mg「杏林」

価基準収載医薬品コード:1161001F1018(610461046【統一名レセ電算コード】)

個別医薬品コード:1161001F1140(620008286【商品名レセ電算コード】)

 

アマンタジン塩酸塩錠50mg「ZE」

薬価基準収載医薬品コード:1161001F1018(610461046【統一名レセ電算コード】)

個別医薬品コード:1161001F1115(620117114【商品名レセ電算コード】)

 

参考:シンメトレル錠50mg

薬価基準収載医薬品コード:1161001F1050(統一名レセ電算コードなし)

個別医薬品コード:1161001F1050(611240080【商品名レセ電算コード】)

 

 

SSL証明書のファイル形式と作成方法まとめ

SSL証明書には主にKEYファイルCSRファイルCRTファイルCERファイルがある

※CRTとCERはほぼ同じだけど便宜上今回はわけます

KEYファイル:秘密鍵ファイル(漏れちゃだめ!)

CSRファイル:秘密鍵を元に作った公開鍵ファイルにコモンネームなどの情報を付加したもの

CRTファイル:↑のCSRファイルが正しいかをSSL証明書会社が証明しているもの。サーバー証明書とも

CERファイルCSRファイルCRTファイルの仲介役的なもの。中間証明書。なくても動いたりするブラウザもあるけど基本的にSSL化するサーバーに必要

 

秘密鍵[KEYファイル]の作り方(centos)

サーバーの秘密鍵作成(パスフレーズなし)
openssl genrsa -out server.key 2048

 

公開鍵[CSRファイル]の作り方(centos)

openssl req -new -key server.key -out server.csr

apacheへの設置の記事はこちら

 

サーバー証明書[CRTファイル]の作り方

SSL証明書業者に頼む必要がある

自分はssl2buy.comってところで頼んでる。安いから

SSL証明書業者に渡す必要があるのはCSRファイルだけ

CSRファイル-[SSL会社の秘密鍵で暗号]→CRTファイルが作られる

 

中間証明書[CERファイル]の作り方

これはネットでダウンロードする

自分の購入したSSL業者のページにあると思う

ちなみにアルファSSLはこれ

 

以上です!

注意点として

インターネットに流出× → [KEYファイル]

逆に[KEYファイル]以外はインターネットで公開してる

 

また、豆知識として

1年とかでCRTファイルCERファイルも)は更新する必要があるけど、同じCSRファイルCRTファイルを作成した場合、期限内のCRTファイルが2つ出来ることになり、期限内であればどちらの証明書でも使うことができます!

※サーバーに設置しているKEYファイルが同じ場合のみ

エンジニア向け広告(チラシ、バナー)デザインの基礎

いろんな所で調べた結果、大体のデザイナーさんが共通してやってること

エンジニアや初心者向け

・左右対称(シンメトリー)

・6:3:1とか1:2とか1:1.618とか(他にもなんか色々)の法則(全部を法則に揃えるのが大事)

・文字のカタマリを意識する

・文字はセンターじゃなくて左右で揃える

・カタマリもそろえる

・カタマリは見えない線でつながってるような感じで配置

・フォントは出来れば1つだけ(〇ゴシック体 ×明朝体 ×ポップ体)

・影やふちなどの装飾はつけない(そのままの文字か、黒で囲んで文字だけ白とか)

・余白を思い切って結構空ける

・開けた余白は間隔を揃える

※bootstrapのグリッドシステムの概念をチラシやバナーにもって考えるとやりやすい

・できれば3色以内(白黒印刷にした時に見にくいと色の使い方がおかしい)

※イメージカラー、文字を読む色、注意の色ぐらいだけ

・文字や写真のアスペクト比は固定させる

 

縦は↘に目線が行く

横はZに目線が行く

 

あとシンプルにする!