2019年1月6日日曜日

文字列を数値に変換する

PHPだと変数を特に宣言しなくても利用できてしまうので、数値チェックなどでうまく動作してくれなかったりします。そんな時、文字列を数値に変換するという方法があります。
文字列を数値に変換する

上記サイトからの抜粋ですが、10進数の場合は以下のように利用できます。
---
// 文字列型変数の宣言
$str = "11";

// 文字列型変数を数値型変数に変換する
$num10 = intval($str);
---

2018年12月27日木曜日

サーバ移転に伴うLet’s Encryptの引越

サーバをIDCFクラウドからGCPに移転しているのですが、サーバ証明書も引越させないといけません。サーバ証明書としてLet’s Encryptを利用しているのですが、再発行させてかっこよく移行しようとしたのですが、うまくいかないのでこちら↓のサイトを参考に、一旦今ある発行済の証明書をそのまま持ってくることにしました。
サーバー移転(引越し)でLet’s Encrypt 「SSL/TLSサーバ証明書」はどうする?

上記サイト内ではzipで固めて持ってきていますが、tarの方がそのままでシンボリックリンクも持ってこれるのでおすすめです。(zipもオプションを付ければ良いだけですが...)

具体的には以下の手順ですね。

引越元サーバで圧縮
cd /etc
tar zcvf letsencrypt.tar.gz letsencrypt

引越先サーバで解凍
cd /etc
tar xvf letsencrypt.tar.gz

2018年12月26日水曜日

Suama Online ServiceはIDCFクラウドからGCPへ移行!

IDCFクラウド個人向けサービス終了に伴い移行先をどこにするか検討していましたが、色々と検討した結果Google Cloud Platform (GCP) に移行することにしました。

移行先としてGCPを選択した理由は以下のとおりです。。

  • f1-microインスタンスであればサーバ1台を期限なしで無償利用できる(米国リージョンのみ)
  • GCPの中で今利用しているSendGridを利用することができる
  • GCP自体、以前お試しで利用したことがあるので使用感が分かっている。
上記理由のうち、1つ目についてはサーバ自体は無償枠で利用できますが、通信量の課金が発生するという可能性があり、少し悩みました。ただ、Suama Online Serviceは今の所テキストサイトなので、下りの通信はそれほど発生しないだろう、ということで今回はGCPに決定です!

以前環境を作ってはいたものの、今回は一から再構築を行いました。
概ねこちらで紹介されている手順ですね。

ただ、自分の作り方が悪かったのか、ファイアウォールが初期でほぼ当たっていない(つまり、丸裸で公開されている)状態になってしまいました。仕方がないのでファイアウォールは個別にルールを色々と設定しています。

後はやはり通信量で課金が大きくなることが怖いので、予算アラートも設定しています。
こちらで紹介されている手順ですね。

今回は折角GCPに移行したので、ランニングコストを限界まで下げることにも挑戦したいと思います。

2018年12月16日日曜日

IDCFクラウド個人向けサービス終了

12月12日、メールでIDCフロンティアより個人向けIDCFクラウドの終了に関するお知らせが来ていました。
 この度弊社は、2019年3月31日(以下「廃止日」)をもって個人向けIDCFクラウドサービスの提供を終了させていただくことになりました。現在個人名義で対象サービスをご利用いただいているお客様は、廃止日以降ご利用いただく事ができなくなります。
 今後、IDCFクラウドサービスは、法人及び個人事業主のお客様を対象とする「ビジネス会員」としてご利用いただけます。お客様がIDCFクラウドサービスのご利用を希望される場合は、下記の「ビジネス会員」の資格および同意手順をご確認ください。
 今後もお客様への一層のサービス向上に取り組んで参りますので、何卒ご理解のほどお願い申し上げます。
ビジネス会員になれば引き続き利用できるよ、ということですね。自分はビジネス会員になる資格がなさそうなので、出ていかなければなりません。。。
【対象サービス】
個人向けIDCFクラウドサービス(付帯関連する全サービスを含む) 
【廃止日】
2019年3月31日 
【約款の変更】
上記、個人向け対象サービスの終了に伴い、対象サービスに係る「クラウドサービスに関する契約約款」を変更しております。下記URLよりご確認ください。
https://www.idcf.jp/pdf/common/cloudservices.pdf 
【ビジネス会員の資格】
法人(国、地方公共団体、日本国法又は外国法の法定に基づいて設立された会社その他の社団・財団・組合をいう)及び個人事業主(個人事業主、自営業者、個人事業者等、個人で事業を営んでいる人であって、かつ税務署へ開業届を提出している者をいう)。
今回の個人向けサービス終了は利用者には個別でメールが来ていますが、特にプレスなどは出ておらず、約款の変更だけみたいですね。

IDCFクラウドはかなり以前から利用していて、Suama Online Serviceの基盤にも利用させて頂いています。ワンコインでサーバが立てられる、しかもスペックもそれなりに良いし安定しているということで重宝していましたが、この見せ玉のワンコインサーバばかり利用する個人ユーザは採算が合わないと判断したのでしょう。残念ではありますが、仕方ないですね。

1点不満に思うのはサービス終了の連絡がサービス終了の3ヶ月少し前に来たということで、移行作業などに取れる時間が3ヶ月しかない点です。まあ個人向けだから影響が少ないという判断なのでしょうが、やはり1年前、せめて半年前には通知、もしくは先に新規契約終了などを行い、サービス終了を匂わせておいて欲しかったです。

何にせよ、自分は移行先を考えねばなりません。やはりサービス継続性を考えるとメジャークラウドに行かざる得ないのか、と思いますが、本当に選択肢がそれだけになっていきそうで少し悲しい気もします。

2018年12月2日日曜日

作成したWebAPIの仕様を公開しました

これまで作成したWebAPIの仕様を整理し、公開しました。
Suama Online Service WebAPI

これまで作成したWebAPIは以下の3つです。

  1. 接続元グローバルIPアドレスを返すAPI(グローバルIP単体)
  2. 接続元グローバルIPアドレスを返すAPI(json形式)
  3. グローバルIPアドレスの国を確認して返すAPI
アクセスすると、接続元IP(グローバルIP)を返します。それだけ。

アクセスすると、接続元IP(グローバルIP)を返します。ただし、こちらはjson形式で返します。IPアドレスのほか、ホスト名も逆引きして返してくれます。

グローバルIPアドレスをGETで渡すと、そのIPが割り振られている国情報をjson形式で返してくれます。

WebAPIについてはこれからも、ラインナップを増やしていきたいと思います!

2018年11月24日土曜日

グローバルIPアドレスの国を確認して返すWebAPI

先日、グローバルIPの国を確認するサイトを作成しました。
グローバルIPアドレスの国を確認するサイトを作りました!

今回はこれを少しカスタマイズして、WebAPI版を作成してみました。

アクセスポイントは以下のアドレスになります。
https://api.suama.onl/v1/ip-country.php

で、ipaddrをGETで渡す必要があります。

例えば、正しいグローバルIPを入れた場合は以下のようになります。

【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=1.1.1.1 |jq

【実行結果】
{
  "message": "OK:The search target IP address is a global IP address, registration information existed!",
  "code": "200",
  "result": {
    "ip": "1.1.1.1",
    "hostname": "one.one.one.one",
    "countrycode": "AU",
    "countryname_ja": "オーストラリア",
    "countryname_en": "Australia",
    "RIR": "apnic",
    "status": "assigned",
    "date": "2011/08/11"
  }
}

正常に国を取得できないIPアドレスを指定した場合、以下のような結果になります。

【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=192.168.1.1 |jq

【実行結果】
{
  "message": "NG:Search target IP address is private IP address!",
  "code": "400",
  "result": {
    "ip": "192.168.1.1"
  }
}

入力がなかったり、IPアドレス以外の入力の場合、以下のようになります。

【実行例】
curl https://api.suama.onl/v1/ip-country.php

【実行結果】
{
  "message": "NG:No input!",
  "code": "400"
}

そろそろAPIについて纏めたページを作らないとダメですね。。。

2018年11月13日火曜日

自分のグローバルIPアドレス(接続元IP)を返すWebAPI

最近APIで色々処理できるものが増えてきたのですが、プログラムの実行環境も色々なパターンがあるので、自分のグローバルIPを確認できるAPIがあると便利ではないか、と思いました。でもまあ、こういうちょっと便利なものって、大抵誰かが作っているんですよね。調べてみると、やはりありました。

こちらの記事に纏まっています。
グローバルIPをcurlで確認

以下、抜粋です。
グローバルIPをcurlで確認 
・httpbin.org/ip
$ curl httpbin.org/ip
{
  "origin": "121.102.14.91"
} 
・inet-ip.info
$ curl inet-ip.info
121.102.14.91 
・ifconfig.me
$ curl ifconfig.me
121.102.14.91
でも折角なので、2つほど作ってみました。

IPアドレスを単純に返すだけのもの
$ curl https://api.suama.onl/v1/ip.php
1.1.1.1

json形式でIPアドレスとホスト名を返すもの
$ curl https://api.suama.onl/v1/ip-hostname.php |jq
{
  "ip": "1.1.1.1",
  "hostname": " one.one.one.one"
}

ご自由にご利用ください!