投稿

新生活始まります

4月になり、新生活を始める方も多いと思います。
私は特に変わらない生活が続いているので、新生活といった感じではないですが、今年度もできる限り体調が崩れないようにしていきたいなと思います。
皆さんも体調には気をつけてくださいね。
特に若い人達は一度やってしまうと長引く病気などもあるので注意してくださいね。

RDSのMultiAZについて

Amazon RDS Multi-AZ 配備という公式のドキュメントに書いてあることだが、RDSのインスタンスをMulti-AZ 配備という項目を設定するだけで、簡単にMulti-AZ構成にすることができる。
ただし、DB Instanceが所属するDB Subnet Groupに設定するSubnetが複数AZであることが前提条件である。

今の案件で最初から、DB Subnet Groupに複数AZのSubnetを登録していため、特にはまらずMulti-AZに変更することができた。
単純に可用性を高めたいだけだったので、レプリカインスタンスを作るのではなく、Multi-AZ構成で十分である。

Postfixでsasl_passwdを変更するときの作業メモ

PostfixでSESにリレーしてメールを配信する仕組みを作っている時の作業を忘れがちなため、メモ書きを残す。

sasl_passwdの編集
大体の場合は、/etc/postfix/sasl_passwdにあると思うので、これを適切な内容に変更する。
DBファイルを作成しないと、再起動しても変更が反映されないので注意。

$ sudo vi /etc/postfix/sasl_passwd
Postfixで使うDBファイルの作成
変更した内容に基づいてDBファイルを作成する。
Postfixで使うDBファイルを作成する場合、postmapコマンドを利用する。
これが終わったら、後はPostfixの再起動だけである。

$ sudo postmap /etc/postfix/sasl_passwd
Postfixの再起動
今回は、systemdを利用しているので、systemdでの例を書く。

$ sudo systemctl restart postfix
最後に
何回も同じ作業をやっているのだが、短期間で頻繁に設定することがないため、忘れてしまう。
このあたりの設定もAnsibleでできるようにしておくと捗りそう。

タスクの実行結果をwhenで指定するならcheck_modeつける

Ansibleでコマンドの実行結果をwhenで指定するなら、そのコマンドにcheck_modeをつけよう。
Ansibleの公式ドキュメントに書いてあることだが、cehck_mode: no をつけないと、dryrunでコマンドが実行されずにエラーとなる。
Ansibleのバージョンが2.2未満であれば、alwarys_runというオプションがあるので、そちらを利用する。

どんなケースでエラーになるかというと、

--- - name: 'LANGの確認' shell: localectl status | grep "System Locale" | sed -re "s/.*:\sLANG=//" changed_when: false register: current_lang - name: 'LANGの設定' shell: localectl set-locale LANG={{lang}} when: current_lang.stdout != lang
こんな感じ。
最初のタスクにcheck_mode: noをつければ問題はなくなる。
でも、破壊的な操作につけたら、それはそれで問題になるはずなので、気をつけよう。

ActionMailerで配信前にメールの宛先を変更する

Railsガイドを読んだことある人であれば知っていると思いますが、ActionMailerにはregister_interceptorというメソッドがあり、これに特定のクラスを登録することで、メール配信前のフックを実現することができます。
参考: メールを配信直前に加工する
今回は、それのお話。

配信前に宛先を変更する
Railsガイドに書いてあることと内容が全く同じなので、余り意味がないかもしれません。
基本的には以下のステップで書きます。

フック用のクラスを作成するregister_interceptorにフック用のクラスを渡す
です。

フック用のクラスを作成する
ここでやることは、以下になります。

delivering_emailメソッドを定義するメソッド内で宛先を書き換える
それをまとめると、以下の用になります。

class TestEmailInterceptor def self.delivering_email(message) # クラスメソッドとして定義する message.to = ["test@example.com"] # 宛先を書き換える end end
このようになります。
簡単ですね。

delivering_emailの中では、まだ送信が確定されていないため、色々な加工をすることができます。(後日そのあたりを使った記事を書こうかと)

register_interceptorにフック用のクラスを渡す
ここでやることは、以下になります。

config/initializersに適当なファイルを用意するregister_interceptorの引数に、フック用のクラスを渡す
今回は、config/initializers/test_email_interceptor.rbに定義することにします。

ActionMailer::Base.register_interceptor(TestEmailInterceptor) if Rails.env.test?
のような形です。
最後にifをつけるのかどうかは、どういった処理にしたいかによるかと思います。

最後に
Railsガイドと全く同じと言っても良い記事になってしまいました。
自分のメモ用の記事として書いてみました。
途中でも書いた通り、後日今回のフックでメールのちょっと…

ElasticIPを複数利用する時の注意

今の案件で、複数のElasticIPを利用しようと思った時のメモ。

ElasticIPが確保できない?
Terraformを利用してAWS上のリソースを管理しているのだが、terraform applyが失敗したのである。
その時のエラーの一部を抜粋したの以下。

Error creating EIP: AddressLimitExceeded: The maximum number of addresses has been reached.
どうやら上限に達してしまったらしい。
公式ドキュメントに書いてあるのだが、デフォルトのElasticIPの上限は5である。
すでに5個のIPを利用してしまっていたので、この制限にひっかかってしまった。

もし制限を緩和したい時は、AWSのサポートセンターにケースを作成して、問い合わせよう。

人を動かすを読んで

帰省中に読んだ本の中野1冊である人を動かすを読んだ感想です。

人を動かす
この本は、アメリカ出身のデール・カーネギー氏の著書です。
割りと有名な本だとは思いますが、今回は自分の行動を振り返るという意味で読み始めました。

人を動かす三原則人に好かれる六原則人を説得する十二原則人を変える九原則
といったように、章立てされています。
内容については省きますが、要は「相手の立場になって考える」ということになります。
本の中では、著名な方や一般の人達の多くのエピソードが載っています。
その中で、「彼らは何故成功したのか」といった観点で本が進んでいくように思えます。
「自分がこうされたら、嬉しいか?」と考えながら、読み進めていくとするすると、入ってくると思います。
実践しようとしても、中々難しいことがあります。
自分が育ってきた環境や、現在の性格などで、簡単に変えることはできませんし、忍耐が足りずにボロが出てしまうことでしょう。
だからこそ、今の自分に足りない人間的な部分の目標が出来ました。

人を動かせるか
それは無理だと思います。
本の序盤で出てくるエピソードで、人の心理は分からないということを書いています。
だから確実にできるとは言えないと思います。
また、ここに書かれているエピソードを元にして、悪用することもできるかもしれません。
この本では、そういった事を伝えたいのではなく、心の底から態度を変える必要があるということなのでしょう。
そうすれば、見える世界も、周りの環境も変わります。と。

この本は、定期的に読み直して、日頃の自分の立ち振舞を改善していきたいです。