投稿

1月, 2018の投稿を表示しています

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冊である人を動かすを読んだ感想です。

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

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

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

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

EC2にNameをつける

AWSを利用している方なら基本中の基本だと思いますが、EC2の管理画面を見ているとNameという列があり、Terraformで作成していると空になっています。
これは何故でしょうか?

TL;DR
Nameタグを設定すれば表示される。
何故、表示されないのか?
AWSの公式ドキュメントであるAmazon EC2 リソースにタグを付ける - Amazon Elastic Compute Cloudに書いてある通り、キーがNameのタグの値に名前を入れれば、表示されます。
つまり、Nameタグが未設定なだけだったのです。
以下が当時書いていたtfファイルです。

resource "aws_instance" "khasegawa" { ami = "${data.aws_ami.image_id}" instance_type = "${var.instance_type}" disable_api_termination = false subnet_id = "${aws_subnet.khasegawa.id}" tags { Administrator = "${var.email}" Environment = "${var.environment}" } lifecycle { "ignore_changes" = ["ami"] } }
tagsに見事にNameを書いてませんね。

Nameタグを設定しよう
Nameタグを設定した方がEC2インタンスだけでなく、他のAWSリソースでも判別しやすくなります。
適切な名前を設定をしましょう。
先程のtfファイルに追記すると、こうなります。

resource "aws_instance" "khasegawa" { ami = "${data.aws_ami.image_id}" instance…

Nginxでメンテナンスページを表示する

Nginxでメンテナンスページを表示させる仕組みを作った時の覚書。

環境
Nginx ... 1.12.2
やりたいこと
今回、メンテナンスページを表示させるに当たって、前提条件・実現したいことをまとめます。

前提条件
Nginxのrootに指定してあるディレクトリにmaintenance.hmtlというメンテンナンスページ用のページを用意している
実現したいこと
メンテナンス画面への切り替えで、Nginxの再起動を必要としないメンテナンス中は、Webアプリと通信しないメンテナンス中に/health_checkへのリクエストが来た場合、200で空のレスポンスを返す/health_check以外へのリクエストの場合は、メンテナンスページを表示させるメンテナンスページのHTTPステータスコードは503にする
これらを実現したいのです。

やってみる。
Nginxでは、ifの中に複数条件が書けないですし、ifの中にifを書くことも出来ません。
どういうことかというと、メンテナンス中かつ/health_checkへのリクエストであるをifの条件式に書くことが出来ません。
そのため、無理やりですが以下のように書きました。

error_page 503 @maintenance; # Maintenance set $maintenance false; set $maintenance_app_request false; set $maintenance_health_check_request false; if (/usr/src/app/tmp/maintenance.txt) { set $maintenance true; } if ($request_uri ~ ^/health_check) { set $maintenance_health_check_request $maintenance; } if ($request_uri !~ ^/health_check) { set $maintenance_app_request $maintenance; } if ($maintenance_app_request = true) { return 503; } location @maintenance { try_fil…

伝わっているか?を読んで

帰省中に読んだ本の中の1冊である伝わっているか?を読んだ感想です。

伝わっているか?
この本は、問題に困っている人に対し、イルカが助言を与えたり、一緒に考えていくスタイルの本でした。
それぞれの問題に関しては、会社員として働いてる方なら起こりそうな話題や、ちょっと変わったものまでありました。
どの問題も、普段からしている言い方や考え方もあれば、「そういう考え方もあるのか!」と納得するような問題もありました。
これらは、著者である小西利行氏が、長年コピーライターとして培ってきた知恵なんだと思います。
この知恵が価値があるかないかは、読んでみないことには判断しづらいです。
私が読んでも、「それはそうだよね」って思うようなこともありました。
それと同時に、読む前の私には出来ない考え方もありました。
だからこそ、人によっては全て当たり前のようなことかもしれません。
そういった方からしたら、価値は余りないと思います。

伝え方って大事ですよね
伝え方って大事ですよね。

友人、恋愛、親類、仕事。

どれをとっても、伝え方1つで印象が大きく変わります。
一歩下がって考えてみると見えてくるものもあります。
例え仕事に対し真面目であっても、伝え方が下手だったら、中々評価が上がらないし、場合によっては怒られてしまう世の中だとは思います。
それは私自信への戒めでもあり、就活している方たちや、すでに就職している方、フリーランスをやっている方にも一読してもらいたいなと思います。
まだ高校生の方だとしても、どこかで役に立つかもしれません。

世の中は理不尽です。
その理不尽の中で、どうすれば良いのか、考えさせられるような1冊でした。
自分の不幸や不運を嘆くことは簡単に出来ます。
が、それにどういう形であれ向き合うことは難しいことです。
そういった時は一旦落ち着いて、「伝わっているのか?」と、自問してみるのもいいですね。

その他にも、デール・カーネギー氏の人を動かすという本を手にとってみるのも面白いかもしれません。