modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

個人向けOffice365を安く(半額)で購入する方法

Microsoft Office 365とは、買い切り型ではなく月額使用料を払って常に最新のWord、Excelといったツールが使用できるサブスクリプション型のOfficeの事です。
最新というのは、買い切り型のOfficeにはない機能も随時追加され、非常に利便性の高い製品になっています。それ故の誤動作がある場合も見受けられますが・・・。

www.microsoft.com

普通にOffice365を購入すると、

  • \12,984 (年間契約)
  • \1,284 (月契約)

年間契約がお得になっています。

安く購入するには12月が狙い目!

2018年の12月にOffice365の3,000円キャッシュバックキャンペーンが行われ、2年目となる2019年も同様にキャンペーンが行われました。

www.microsoft.com

Amazonのセールと併用可能!

2019年を参考にすると、 \12,019 ⇒ \11,581 ⇒ 10%OFF ⇒ \10,423

ここから3,000円キャッシュバックとなるので、実質\7,423でOffice365の1年分ライセンスが購入できます。

月額にすると、わずか\600程度となります。

定価で月契約した際の半額以下となります。

Amazonのキャンペーン、およびMicrosoftのキャンペーンは期間限定ですので、お急ぎください!

【Elasticsearch】スナップショットの共有ストレージはNFSサービスを使う備忘録

Elasticsearchネタというか備忘録は続きます。

以下の書籍通りにスナップショット(バックアップ)を試みましたが、要らないコトをして無駄な時間を費やしました。反省。

失敗したコト

書籍の中では、NFSサービスを使用して共有ストレージに保存しましょうと紹介されていました。
使用しているVirtual BOXの仮想環境がオフライン(非インターネット接続)であった為、aptが面倒という理由でNFSサービスを使わない方向で行こう!と暴走。
結果、ドツボにはまる。

具体的に何をしたのかというと、V-BOXの共有ストレージ機能を使用して各ノードサーバーにマウント。
各サーバーからはキチンと読み書き出来たので大丈夫と思いきや、REST APIからスナップショットの指示を出すとrepository_verification_exceptionエラーが出た。

その際のエラーはこんな感じ。

{
    "error": {
        "root_cause": [
            {
                "type": "repository_verification_exception",
                "reason": "[mv_backup] [[Sup7NQqXQVaT1maJ49ajpg, 'RemoteTransportException[[node72][192.168.1.72:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node72}{Sup7NQqXQVaT1maJ49ajpg}{AOI8z2v7QzeohCBSFoZHRA}{192.168.1.72}{192.168.1.72:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [mHR3zxDqQCqDvGNBxUF2tw, 'RemoteTransportException[[node73][192.168.1.73:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node73}{mHR3zxDqQCqDvGNBxUF2tw}{BwILk21wR4GlJaWDy-DHFg}{192.168.1.73}{192.168.1.73:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [XEgaW0CvQt-02VEczOmHoA, 'RemoteTransportException[[node71][192.168.1.71:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node71}{XEgaW0CvQt-02VEczOmHoA}{WMgwMgp_QLae61ux_xPqtA}{192.168.1.71}{192.168.1.71:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];']]"
            }
        ],
        "type": "repository_verification_exception",
        "reason": "[mv_backup] [[Sup7NQqXQVaT1maJ49ajpg, 'RemoteTransportException[[node72][192.168.1.72:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node72}{Sup7NQqXQVaT1maJ49ajpg}{AOI8z2v7QzeohCBSFoZHRA}{192.168.1.72}{192.168.1.72:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [mHR3zxDqQCqDvGNBxUF2tw, 'RemoteTransportException[[node73][192.168.1.73:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node73}{mHR3zxDqQCqDvGNBxUF2tw}{BwILk21wR4GlJaWDy-DHFg}{192.168.1.73}{192.168.1.73:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [XEgaW0CvQt-02VEczOmHoA, 'RemoteTransportException[[node71][192.168.1.71:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node71}{XEgaW0CvQt-02VEczOmHoA}{WMgwMgp_QLae61ux_xPqtA}{192.168.1.71}{192.168.1.71:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];']]"
    },
    "status": 500
}

何がいけなかったのか

書籍通りにやらなかったというのが一番な訳ですが、どうも各サーバー上からはアクセスできても、実際のマスターノードが他のノードにアクセスする際、ローカルのパスだと駄目という海外の記述もあり。。。
素直にNFSサービスを入れることに。

Ubuntuでのスナップショット構築

NFSサーバー側ノード

※マウント先のドライブを/dev/sdb1で設定済みとし、/mnt/repoとしてマウント済み

  1. 権限変更
    RESTful APIが読み書きする為に必要

    sudo chown -R elasticsearch:elasticsearch /mnt/repo

  2. NFS server install

    sudo apt install nfs-kernel-server

  3. exports設定

    sudo nano /etc/exports

    # (公開したいディレクトリ) (どのマシンに公開するか) (公開モード)

    /mnt/repo *(rw,async,no_root_squash)

  4. sudo exportfs -av

    exporting *:/mnt/es_repo

NFSクライアント側ノード

  1. NFS client install

    sudo apt install nfs-common

  2. mount用folder
    【需要】マウント先の名前は揃える

    sudo mkdir /mnt/repo

  3. 権限変更

    sudo chown -R elasticsearch:elasticsearch /mnt/repo

  4. 自動マウント

    sudo nano /etc/fstab {NFSサーバーIP}:/mnt/es_repo /mnt/repo nfs rw 0 0

共通設定

  1. elasticsearch.ymlにRepositoryのPath追記

    path.repo: ["/mnt/repo"]

急がば回れとはよく言ったものですね・・・。

【Elasticsearch】クラスターにノードを追加する際 NotMasterException が発生する

Elasticsearch で クラスターにノードを追加する際、マスターノードが見つからないエラーが出たので、回避策の備忘録です。

現象

Elasticsearchでクラスターに複数ノードを追加する。

各ノード候補の /etc/elasticsearch/elasticsearch.yml に設定を追加する。 ノード候補となるElasticsearchは仮想環境で、同一のノードからクローン後に各ノード名を変更している。 ノード名を変更した後、クラスター名を合わせるだけで自動的にノードが追加される。

www.elastic.co

・・・ハズが、「マスターノードが見つからない」という症状が発生し、大いにハマる。

master_not_discovered_exception (NotMasterException)がスローされる。

{
    "error": {
        "root_cause": [
            {
                "type" : "master_not_discovered_exception",
                "reason" : null
            }
        ],
        "type" : "master_not_discovered_exception",
        "reason" : null
    },
    "status" : 503
}

原因

同じ仮想からクローンした為、Node-idが同じままになっており、うまくマスターノードを探せない状態に陥っていた様子。 elasticsearch.ymlでnode nameを指定しただけでは、node idなるものまでは変わらないようだ。

stackoverflow.com

解決策

古いノード情報を削除する。

cd / var / lib / elasticsearch 
sudo rm -rf nodes / 
sudo systemctl start elasticsearch

全てのノードを再起動後、エラーが出ないことを確認。

【2018年版】Apple Care+ for iPhone が得する端末損する端末

f:id:shin21sk:20181008225653p:plain

Apple Care+ for iPhone は、言わずと知れたiPhoneの保証を2年間に延長してくれるサービスです。

すべてのiPhoneには、製品購入後1年間のハードウェア製品限定保証と90日間の無償電話サポートがついています。AppleCare+ for iPhoneに加入すると、保証とサポートがiPhoneの購入日から2年間に延長されます。
さらに、過失や事故による損傷に対する修理などのサービスを、画面の損傷は1回につき3,400円(税別)、そのほかの損傷は1回につき11,800円(税別)のサービス料で2回まで受けることができます。
Appleの専任スペシャリストにチャットまたは電話で優先的に問い合わせることもできます。

AppleCare+ - iPhone - Apple(日本)

ただ、正直言ってお高い。これが3年保証ならまだ納得できるのですが、2年間というのがなんとも。。。

また、購入する機種によっては割高感が半端ないものもあります。これはひとえにApple Care+の金額が固定金額だからです。家電量販店などのように、「購入価格の●%」であれば端末間での相違も少なく損した印象も少なくなるのですが・・・。

  • 得する端末・損する端末
  • 液晶割れだけではないApple Care+の魅力
  • まとめ
続きを読む

auのキッズケータイ「mamorino4」で無料GPS検索はできるのか?

f:id:shin21sk:20180228005857p:plain

auキッズケータイモリーノ4 (mamorino4) が発売されました。auはもうキッズケータイを販売しないんじゃないかと思っていましたが、タッチパネル式の新型を投入してきました。

www.au.com

毎月の月額が安くなっている反面、機能面以外にもmamorino3とは大きく変わっている箇所が散見しています。
mamorino3の感覚で機種変更すると後悔する事もあるかと思いますので、注意してください。

Eメールは使用できない

mamorino4 はEメールが使用できません。これによりEZ WINの月額300円が不要となり、mamorino3よりも月額はお安くなります。ただし、Eメールが使えませんので、Cメール(SMS)での送受信となります。他社携帯からmamorino4にSMSを送ると3円程かかることになるので、au以外の携帯をご使用されている場合は注意が必要です。

居場所通知の検索方法が限定的

個人的にはツラい仕様変更でした。mamorino3は安心ナビに加入していなくても、居場所通知機能で簡易的に居場所を確認することが出来ました。

shin21.hatenablog.com

mamorino4ではこの機能がバッサリと無くなってしまったようです。

mamorino4の現在地を確認する手段

  1. お客さまセンターから
  2. ココセコムのサービスから
  3. 安心ナビの機能から

お客さまセンターに電話することで、おおよその位置特定ができるようです。なかなか不便ですね。mamorino4ではココセコムか安心ナビに加入しないとお手軽にGPSで居場所検索はできなさそうです。

さいごに

mamorino4が発売されたことにより、実質mamorino3は入手困難となっています。やはりGPS検索機能は子供が小さいと何かと重宝します。WINの費用が無くなった分を安心ナビ代と割り切って契約するのも有りだと思います。