ElastiCacheの複数のRedisインスタンスのデータを移植し、1つに統合する。

Redisはキャッシュサーバーでありながら、データの冗長化や永続化さらにはソートされたデータの順位の計算も可能なため、(本当は良くないと分かりながらも)つい保存しなければならないデータまでRedisに格納する運用をしていた。

しかし、コスト削減のため1つのサーバーにデータを統合する想定があまりないのか、かなり面倒くさい…しなかなか情報もないという問題があった。

https://www.slideshare.net/ssuserf3788f/redis-58419914 こちらの資料が非常に参考になったが、AWS ElastiCacheのアップデートによって変わった点や他に調べないとわからない点があったため、より具体的に手順を記述する。

手順1:Redisのスナップショットを取得する。

// aws_region,cache-cluster-idは自分の環境に合わせてください。
// S3 bucketを用意してない場合は予め作成してください
aws_region=ap-northeast-1
cache_cluster_id=redis-a
snapshot_name=redis-snapshot-a
s3_bucket_name=bucket-a

aws elasticache create-snapshot \
    --snapshot-name $snapshot_name \
    --cache-cluster-id $cache_cluster_id \
    --region $aws_region

手順2:保存するS3バケットにスナップショット作成用権限を一時的に付与する

理由についてはこちらのドキュメントが参考になります。

aws s3api put-bucket-acl --bucket $s3_bucket_name --grant-full-control id=540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353

手順3:作成したRedisのスナップショットをS3にコピーする。

aws elasticache copy-snapshot \
    --source-snapshot-name $snapshot_name \
    --target-snapshot-name $snapshot_name \
    --target-bucket $s3_bucket_name \
    --region $aws_region

手順4:S3からスナップショットファイルをダウンロードする。

手順5:ダウンロードしたスナップショットをマージする。

以下のコードを実行して、生成されたファイルをS3にアップロードする。RedisのDumpファイルの中身の構造についてはこちらが参考になった。

またチェックサムの計算の方法については調べても中々出てこずに手間取ったが、こちらの実装コメントが参考になった。

※こちらのスクリプトは1つのRedisスナップショットに複数DBが含まれているケースは想定していない。順に、DB0に1つ目のスナップショットのDB、DB1に2つ目のスナップショット…という具合に結合している。

merge_redis_dump.rb

require 'crc'

file_names = [
  'redis-snapshot-a.rdb',
  'redis-snapshot-b.rdb',
  'redis-snapshot-c.rdb',
]

merged_file = file_names.each_with_index.inject("") do |merged_file_str, (file_name, index)|
  file_str = File.binread(file_name)
  if index != 0
    file_str.slice!(0..10)
    file_str.insert(0, [254, index].pack("C*"))
  end

  if index == file_names.size - 1
    file_str.slice!(file_str.size - 8..file_str.size - 1)
  else
    file_str.slice!(file_str.size - 9..file_str.size - 1)
  end
  merged_file_str << file_str
end

crc = CRC.new(64, 0xad93d23594c935a9, initial_crc = 0, refin = true, refout = true, xor_output = 0)
checksum = crc.digest(merged_file).unpack("C*").reverse.pack("C*")

merged_file << checksum

IO.binwrite("redis-snapshot-merged.rdb", merged_file)

作成したファイルのチェック

redis-check-dump redis-snapshot-merged.rdb
  • 手順6:S3にアップロードする。
  • 手順7:アップロードしたファイルに、スナップショット利用権限を付与する。
aws s3api put-object-acl --bucket $s3_bucket_name --grant-full-control id=540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353 --key redis-snapshot-merged.rdb

手順8:新しいRedisサーバーをスナップショットから立ち上げる

ドキュメントはこちら

一例:

aws elasticache create-cache-cluster \
--cache-cluster-id my-cluster \
--cache-node-type cache.r5.large \
--engine redis \
--engine-version 3.2.4 \
--num-cache-nodes 1 \
--cache-parameter-group default.redis3.2 \
--snapshot-arns arn:aws:s3:$(echo $s3_bucket_name)/redis-snapshot-merged.rdb

妻の終身保険が高いので見直してみた

妻が妊娠をきっかけに退職した際に、保険の負担が毎月万単位でかかるので負担が重い…ということで肩代わりする際に本当に必要かどうか見直しをしてみた。結論としては(満期型の)生命保険は契約時の金利の高さと節税効果が幸いして当面は維持した方がお得そうとの判断になったが、医療保険とがん保険については下記理由で解約を進めることにした。

保険の大前提

トクしようと思ってはいけない

大前提として、保険会社はトータルで見て各契約者から支払われた保険料(+金利)を超えて保険金を支払い続けたらいつか破綻してしまう。
したがって、よっぽど自分は人よりも将来ガンなどの病気になる自信がある(かつ、保険会社に拒否されない)限りは、 期待値的に見てマイナス になるはずである。

そもそも、転ばぬ先の杖として保険を使用するのは問題ないが、不幸が起きればトクをする考えになってしまったら本末転倒である。

最強のソリューションは自分の預金で解決。預金で解決できないところを保険で担う。

なので、期待値的に考えれば保険会社に保険料を支払わず、その分を自分で預金することこそが最善案と考える。
とはいえども、預金では解決できないレベルの支払いに突然直面したら、自分ないしは家族の人生の今後が破綻してしまうかもしれない。
そうなる危険があるならば、その分を保険で補填してもらうよう考える。

確かに生命保険や損害賠償責任保険、火災保険や地震保険であれば最大損失および補償額は数千万円~億円単位になるので、状況に応じて入る価値はあると思う。

が入院1日5000円、手術1回最大〇十万円といった医療保険の補償内容だと、一度に数百万円単位で保険料が戻る未来が見えない。それであれば数百万円単位の預金を全力で作ればあとは必要では無いように見える。

医療系の保険が活きる場面があるとすれば、保険適用外の治療を全額補償してくれるとかだろうか。

終身保険は実質老後のための預金

なんで妻の保険料はネットで調べて出てくるようなやつより数倍も高いんだろう…とよく確認すると、終身保険だと気づいた。どうやら60歳まで保険料を払うと、一生涯保証が続くと…なるほど、老後の医療費込みの保険料と納得した。

老後にかかる医療費は、働いている内(60〜65歳まで)にかかる金額の数倍にもなるそうだ。支払われる保険料と直接リンクするわけではないが、かなりの相関はあるに違いない。

年齢階級別1人当たり医療費 を確認してみると、平均でかかる医療費の合計は以下のようだ。

年齢 医療費 ウェイト
21~40歳 200万 9.2%
41~60歳 404万 18.6%
61~80歳 1105万 50.9%
81~85歳 462万 21.3%

85歳まで生きたと仮定して実に7割以上は60歳以降にかかっている。

一方で終身保険の支払いについては60~65歳まで、もしくは老後でも増えないようになっている。グラフにすると恐らくはこのような形になるだろうか

そのため、終身保険は老後にたくさん保険金を支払っても大丈夫なよう、働いている内に多く保険金を徴収することで実質的に保険会社の中で預金を作っている。(赤線-青線の分)

保険会社の中で一定の金利で運用する想定であれば、金利の分だけ保険料を安く設定しているのかもしれないが、それでも現役の間はただ多めに保険料を払っているだけと思われる…

がん保険の使いづらさ

罹患率は半分と高い

こちらの統計によると、生涯罹患率は男性で62%、女性で46%だそうだ。
人生で半分以上の確率でがんにかかる可能性がる。
がんにかかる確率が高いからこそ保険でしっかり備えようというセールストークがあるが、ここに罠が潜んでいる。

罹患率が高い=トータルで払う保険料は給付金と大差ない

半分以上の確率でがんにかかる可能性があるということは、即ち契約者の半数以上が給付金を受け取ることになる。
そのため、給付金がトータルで払い込む保険料の2倍(+金利)を超えるような設定をしたら保険会社が破綻してしまう。

そんな保険料よりちょっと上乗せされた給付金を狙うより、他の病気のリスクやトラブルに巻き込まれる可能性を考えて自分で預金したほうが柔軟性が効いていいのではないだろうか、との疑問が沸いた。

もしがん以外の大病を患ってしまったら…

そして最悪のケースが、ガン以外の難病にかかってしまったらである。
ガン保険のためにガン給付金の半分以上という高い負担を強いられ続けたのにもかかわらず、結局保険を使えずさらに高い医療費負担を強いられるかもしれない…まるで2つの難病にかかったかのような負担になってしまう。

そう考えていくとガン保険はアンバランスな印象が拭えない。

価値観と合わせて考えてみる

とはいえガンについては社会保険のきかない高額な先進医療を全額補償する特約などがついているため、これについては価値観次第なところもあるなと思った。

  • 社会保険適用外の先進医療を組み合わせてでも、最善の治療を行う。
    • 治療の種類によっては数百万円以上かかるため、非常に重い負担になる。
  • 社会保険適用内の医療に限って使用して治療を行う。それでの回復が困難であれば、諦めることも視野に入れる。
    • 高額医療費制度により、月額でかかる医療費の最大値は決まっている。

また罹患したのが若い内か老後かでもどちらを取るかは変わってくると考える。
若い内で仕事ざかりであれば高いお金をかけても治療に成功すれば元が取れる可能性は大いにあるし、老後であれば延命に成功できても限りがあるので、割に合わないかもしれない。

そこで、若い内および老後の治療スタンスと、それに最適なソリューションをまとめると以下の通りとなる。

ソリューション 若い内 老後
終身がん保険 全力 全力
更新型がん保険 全力 最小限
無し 最小限 最小限
  • 若いうちだけきっちり保障を求めるなら、更新型のほうがいい。なぜならガンは若いうちはかかる確率が低い。したがって、罹患した場合は保険料の数十倍の給付金が受けられるよう、割が良くなってくる。
    • その上で老後も手厚い保証を求めるなら、値上がりを受け入れて更新する。保険料は高くなるが、そのほうが融通が効いて物価や価値観、制度の変化に因るリスクも抑えられるメリットが有る。
  • 本当に老後にわたってもしものときは保険適用外の先進医療を使ってでも治したい場合は、終身型ガン保険の意味が見えてくる。
  • 保険適用内の治療に収めるのであれば月数十万円も治療費が嵩むことは無いので、長期にわたることを見越しても数百万円単位の預金があれば充分と考える。
    • どちらかといえば医療費より仕事が出来ないリスクのほうが額は大きいので、ガン保険よりも汎用性の高い就業不能保険のほうが重要に見える

一方、妻の価値観は

こんなにも終身保険をかけているということは、相当老後のことを気にかけているのだろうな…きっと出来る限り余生を過ごせるようにしたいんだろうなと思った。しかし妻の価値観は「むしろ長生きしたいとは思わない」と…終身保険と最も相性悪いパターンだった。

それなら老後の高額の治療に備える意味はほとんど無い…余命と天秤にかけられるなら治療費を抑える選択肢もきっとあるだろうに。

これまで支払った割に合わない保険料は本当に勿体ないけども、泣く泣く損切りの解約で合意した。それにしても妻の場合は解約返戻金が無いのには泣いた。

終身保険は現役のうちはただ割高な保険料を払っているだけなので、解約すれば丸損である。しかし進むも地獄なのも確か。老後に一気に戻る額の期待値が上がることを鑑みれば、それまでずっととにかく割高な保険料で積み増すしか無いからだ。このまま行っても損失はどんどん拡大してしまう。まだ支払いも前半、引き返せるくらいの年齢のタイミングで止められて良かったと思うことにした。

株式投資を始めて気付いた疑問 -低PBR株がお買い得とは本当か?ー

社会人生活も早2年目になり、たまっていく貯金をそのまま放置するのも勿体ないなと思い株に投じてみるこの頃。
とはいえ株式投資で生き抜くうえでは色々な知識や経験が必要なので、日々情報をあさって調べてみようと思いました。
そんな中で気付いた疑問について書き綴ってみようと思います。

PBRとは

株価/1株当たりの純資産であらわされます。
そのため分子の株価が高い場合は、PBRが高くなります。そのため値が高い場合は概ね割高と言えますね。
またPBRが1の場合は、一株あたりの純資産=株価ですので、理論上はもしその場で会社を清算をすればトントンになって株主に還ってくるでしょうということを表しているようです。
(実際は清算のためにもかなりのコストが掛かるのでそうとは言えませんが)

PBRが1倍以下はお買い得と言えるのか?

PBRが1倍以下の株は、1株あたりの純資産>株価ということになります。なんだか1000円札が900円で売られているみたいで…超お得なように見えますが、必ずしもそうとは言い切れない理由があります。それが以下に述べる通りの内容です。

PBRが1倍以下でも要注意なパターン

1.純資産が目減りする恐れがある場合

赤字の場合

企業が赤字に陥った場合、その分資産/純資産から補填しなければいけないので、目減りすることになります。ここ数年の業績や最近の動向などを踏まえて赤字に転落する危険がないか、元から赤字の場合は黒字に転化する見込みがあるか考える必要があります。

今後賠償金やリコール費用など巨額の負担を支払うリスクがある場合

なぜなら、今後いくら支払うか分からない賠償金については、PBRの計算においては考慮されていないからです。東京電力やタカタなどがこのパターンにあたります。
もし純資産が1兆円あるとしてもし今後支払う費用が2兆円にのしかかるかもしれないとしたら…実質的には総資産はマイナスになり得ます。もし将来純資産がマイナスになったら株価が下がるどころでは済まず、最悪経営破綻からの紙くずもあり得ます。(手持ちの純資産ではリコール費用に耐え切れず、経営破綻したのがタカタのパターンです。)
もちろん上手くいけば危機を回避できるかもしれませんが…競合他社と比べて大きな足枷を抱えながら勝負していくわけで、今度は将来への投資で不利になった結果経営が悪化するかもしれません。いずれにせよ非常に大きなリスクであることに間違いはありません。

2.資産の中身が価格変動する場合

ところでPBRの算出で使われる総資産は(資産-負債)であらわされます。そのため資産の価格が上下すると、その分純資産も変動します。
資産に関しては土地や建物、株や債券など…情勢によって値段の上下が激しいものや、または自社で製作したプロダクトという実際いくらで売れるか分からないようなものも含まれています。
これらは評価額が変動したり見直したりする過程で、損益に含まれることになりますが、見直し次第途端に大幅な損失を計上して資産・純資産が今後目減りするリスクをはらんでいます。
したがって資産と一口に言えども現預金など目減りしづらいものの割合が高いのか、それともほかの資産が多いのかなどを考慮する必要があります。

結論:あくまでPBRは一つの目安。

必ずしもPBRが1倍以下であればお得と言えるかは、上記を踏まえてより詳細に見て自分で判断するしかありません。
例えていうなら、9千円で1万円分のモノが売られていると言われても、隣町の商店街で使える商品券だったり、あるいは1割の確率で全額没収になるクジだったりしたら…買うかどうか悩みますよね。
そのような感じで中身を調べて把握する必要があります…とはいえ、調べるにも限界がありますけどね。突っ込もうとすると簿記/会計の知識が必要になりそうです。
それに、実際に割得だと思っても株価が今後上がるか…どうかは別の話。まあ難しいところではありますが、知れば知るほど面白いと感じるこの頃であります。