みんな大好き Let's Encrypt。

DNSラウンドロビンしてると、HTTP-01 challenge でも色々頑張るとできるんだけど、
せっかくなので、DNS-01 challenge を試してみました。

サマリー
- gcloud コマンド使えるようにして、Cloud DNS の API を使えるようにする
- dehydrated っての使ってみるよ


----
設定したいインスタンスはAWS上にあります。

DNS は Cloud DNS を使っているので、
DNS管理者の権限持ったサービスアカウント作成して、鍵を作成して json ダウンロードして、つかいたいサーバにおいて
gcloud SDK インストール

apt-get だと簡単だNE
https://cloud.google.com/sdk/downloads?hl=JA#managing_an_installation

gcloud init はしなくて大丈夫
https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account

$ gcloud auth activate-service-account --key-file=FILENAME.json
Activated service account credentials for: [example@example.iam.gserviceaccount.com]

あとでプロジェクト設定しろYOって言われるので先にしとく
でも、自分のは権限ないからエラーになる
けどクレデンシャルに合ったプロジェクトになってればよさそう
LB使う場合は権限いるかも
実際の書くわけにもいかないので例

$ gcloud config set project example
Updated property [core/project].
WARNING: You do not appear to have access to project [example] or it does not exist.

$ gcloud config list
[core]
account = example@example.iam.gserviceaccount.com
disable_usage_reporting = True
project = example

okpk


これ使ってみる
https://github.com/spfguru/dehydrated4googlecloud

インストール方法は↑のサイト見てね

## Config

dehydrated is looking for a config file in a few different places, it will use the first one it can find in this order:

- `/etc/dehydrated/config`
- `/usr/local/etc/dehydrated/config`
- The current working directory of your shell
- The directory from which dehydrated was run

/usr/local/etc/dehydrated/config にしよう
mkdir -p /usr/local/etc/dehydrated/config
cd /usr/local/etc/dehydrated/config
cp ~/dehydrated/docs/examples/config .
domains.txt も作る

けど、引数で出来るので実はいらない説
同じディレクトリに domains.txt も置いたんだけど反応なかった

っていうか

/usr/local/etc/dehydrated/config

ってファイルかあああああ

もういい、引数に書く(´・ω・`)
2回目は設定ファイルなしですすめます


./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh'

ってすると、まずは

./dehydrated --register --accept-terms

しろと言われるのでおとなしくします。

で、再度 hook 実行

./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh' -d rodon-cdn-v2.puyo.jp -d rodon-cdn01.puyo.jp

こんな感じ

DNSにTXTレコード追加して~の、読めるようになるまで待ち~のなので、ちょっと時間はかかります。

数分待てば

Deploying certificate for rodon-cdn01.puyo.jp from /root/dehydrated/certs/rodon-cdn01.puyo.jp/privkey.pem and /root/dehydrated/certs/rodon-cdn01.puyo.jp/fullchain.pem

と表示されておわり。

LBに登録するまでが dehydrated みたいですが、別にいらないのでその辺のエラーが出ても放置です。
そう、証明書さえ作れてしまえばいいのです。

ってアレだ、ROOT 直下に置かれても困るのでは問題ハハハ

--out ってあるので、せめて /etc の下のてきとーなとこに出そう・・・
とりま mkdir -p /etc/dehydrated

# ./dehydrated -c -t dns-01 -k 'hooks/google-cloud/hook.sh' --domain rodon-cdn01.puyo.jp --domain rodon-cdnv2.puyo.jp --out /etc/dehydrated
#
# !! WARNING !! No main config file found, using default config!
#
Processing rodon-cdn01.puyo.jp with alternative names: rodon-cdnv2.puyo.jp
 + Creating new directory /etc/dehydrated/rodon-cdn01.puyo.jp ...
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting new certificate order from CA...
 + Received 2 authorizations URLs from the CA
 + Handling authorization for rodon-cdn01.puyo.jp
 + Found valid authorization for rodon-cdn01.puyo.jp
 + Handling authorization for rodon-cdnv2.puyo.jp
 + Found valid authorization for rodon-cdnv2.puyo.jp
 + 0 pending challenge(s)
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...

Deploying certificate for rodon-cdn01.puyo.jp from /etc/dehydrated/rodon-cdn01.puyo.jp/privkey.pem and /etc/dehydrated/rodon-cdn01.puyo.jp/fullchain.pem
ERROR: (gcloud.beta.compute.ssl-certificates.create) Could not fetch resource:
 - Invalid Credentials

ERROR: (gcloud.compute.target-https-proxies.describe) Could not fetch resource:
 - Required 'compute.targetHttpsProxies.get' permission for 'projects/example/global/targetHttpsProxies/https-proxy-rodon-cdn01-puyo-jp'

=====================================================================================================
WARNING: Unable to find https target proxy named 'https-proxy-rodon-cdn01-puyo-jp' - no automatic update performed
YOU have to update your target proxy manually and set the SSL certificate to 'rodon-cdn01-puyo-jp-1565969804'
Go to https://console.cloud.google.com/networking/loadbalancing/advanced/targetHttpsProxies/
OR run the following command: (change $MY_HTTPS_PROY_NAME to your actual proxy name)
gcloud compute target-https-proxies update $MY_HTTPS_PROY_NAME --ssl-certificates rodon-cdn01-puyo-jp-1565969804
=====================================================================================================
 + Done!


再読み込みしないで、--out に指定したディレクトリに移動してくれたよ!!!!
天才かよ・・・

LBに登録しにいかないオプションありそうだからヘルプをもう一度読もう
→なさそう


そして、ここで気づいた


設定したドメイン名間違ってるううううううう


あほk

HTTP-01 challenge だと間違えてると気づくけど、DNS-01 challenge だと気づかないな
これは盲点だった
A にあるかどうかまでは見てないか。

ってももう一度やり直せばいいだけなのでおkpk

やりなおして、 nginx に設定して完了。


$ curl -I https://rodon-cdn-v2.puyo.jp/asdf
HTTP/2 404
server: nginx/1.10.3
date: Fri, 16 Aug 2019 16:28:23 GMT
content-type: application/xml
x-amz-request-id: 42CBB8DDA1D3C314
x-amz-id-2: xRdylDrMp2n4k0ai6EFUPCzDwiza7WfO+SHYc0tK8C1/sPj3SUqJo+IaakE7yrb/+n8XKE3TBiE=
x-varnish: 42 32795
age: 1341
via: 1.1 varnish (Varnish/5.0)
x-powered-by: Poporing
x-serve-name: Poporing02

$ curl -I https://rodon-cdn-v2.puyo.jp/asdf
HTTP/2 404
server: nginx/1.10.3
date: Fri, 16 Aug 2019 16:28:24 GMT
content-type: application/xml
x-amz-request-id: F9BA8CCC7318632F
x-amz-id-2: J3aURcK56kxCqXbX7qQ2VcvZxGS31bs+KwYLXhrJe1EXhQhSlH/NgIQkbff54rFcZvv06Z2cg0Y=
x-varnish: 32822 32812
age: 1142
via: 1.1 varnish (Varnish/5.0)
x-powered-by: Poporing
x-serve-name: Poporing01

404なのは正常です。
どっちのサーバいってもうまく出来てるね

よかったよかった( ˘ω˘)



me-ru


ちょい前に受けて、一発で受かりました(∩´∀`)∩ワーイ

忘れる前に、どんな勉強したかとかを軽くまとめておきます。


■ 勉強開始前のステータス

AWSは多少経験あり
GCPはまじヒヨコ DataFlow? DataProc? DataPrep? ナニソレみたいなレベル。
さすがにBigQuery(の名前)くらいは知ってる( ˘ω˘ )


■ なんで受けたの

職場で受けろって言われたから(受験料2万円は会社持ち)
受かったら職場からボーナス出るって話だったから。
Professional では一番簡単なのではと言われたので、Dataにしたけど、
他を受けてないので実際のところは不明。


■ 勉強時間

3週間で、たぶん30時間~40時間程度
仕事終わって家帰って1~2時間勉強する感じ
集中しちゃって寝る時間過ぎたこともしばしば( ˘ω˘ )
新しいことを知るのって意外と楽しいんだよね・・・


■ 何をしたか

何から手をつけていいのか全然わからなかったので、とりあえず模擬試験やってみるてすつ。
当然だが、ぼろぼろだった!!!!
簡単な解説があるので、それを見ながら知らないことについては調べたりして理解を深めていく感じ。

模擬試験って何種類かあるのかと思ったら1種類しかなくて途方に暮れたよ!!!

その後は、認定試験ガイドを読んで、色々理解を深めていく方向。

1セクションにつき数時間くらい向き合ったとは思う。
とりあえず Google Cloud 内の関係ありそうなドキュメントを斜め読みしつつ、ノートにまとめていった。ノートは試験前に軽く復習するのに役に立ちました。

あとは こちらのブログを読んで、触ってないところを慌てて触ったり。
GCP Professional Data Engineerに合格してきたので勉強方法等書く


模擬試験は数日おきにトータル4回やって、
1回目 ぼろぼろ 3割くらいしか出来てない 意味わからなやばい
2回目 満点
3回目 数問間違える
4回目 満点

間違えたところを重点的に復習。
満点でも、理解出来てなくて覚えてて出来たところは復習。


■ 当日

1問目から全然わからなくて、これは死んだなと正直思った。
試験時間は2時間なのだけど、1時間で最後までとりあえず回答出来たので、
残り1時間を使って見直し。いくつかは選択肢変えた。
吉と出たか凶と出たかは不明(得点わからないし
でも、「合格」だったのできっと吉だったと思いたい・・・


■ プレゼント

purezennto


受かった人は、ロゴ入りのグッズ(リュックかパーカー)がもらえます。
パーカーが欲しいのですが、在庫なくて注文できませーん
在庫が補充されるまで待ち。


■ 次は

Professional Cloud Architect 取りたいなぁとほんのり思ってるけど、ちょっと疲れたので休憩してから( ˘ω˘ )

IDCFが個人利用出来なくなるとのことでASWへの移行作業メモ
特に有益な情報はないです。

なんでAWSにしたかというと、まぁ少し触ったことがあるから。
GCPも考えたけど、触ったことないので除外。

2017年4月に立てたときはIDCFの500円サーバ使ってたみたいだけど、めっちゃ人増えてすぐスケールしましt


・マネージドは RDS(postgreSQL) ElastiCache を利用

基本的に自分で管理することは減らしたい
RDSをdb.t2.small にしてしまったけど、db.t3.small のほうがよかったんかな。まぁいいか・・・


・WebやStreamingのインスタンスは1つ。 t3.medium。

今までは t3.small クラスのインスタンスを3つ使ってて、1つにDBとかRedisとか入れてたんだけど、そのへんを外出しにしたので今は1つだけ。
個人の趣味だからスケールしとく必要もないし、複数台にするとアップデートとかめんどくさいんだYO。
CUP使用率とか見てる感じだと、t3.small でもいけそう感はある。でも medium だとやっぱ早い気はする。
人減ったら変えよう。
今回はOSを Ubuntu にしました。Ubuntuで運用するの初めてだぜ。とはいえ特に意味はない。
今までは99%Debian。
AmazonLinuxでもよかったけど、MastodonのドキュメントがDebian系前提で書かれてるのでやめといた。


・AWS ElasticSearchは面倒そう

相性が悪いというか、そもそもMastodon側ではローカルで自分で立てて使うのを想定してるのでデフォルトでは設定出来ない。
少しconfig以下をいじってあがいて見たけど、手を入れるべきところが多すぎそうだったからやめた。
IAM設定するところまではいいんだけど、その後の認証周りのライブラリがなにかに依存してるのか動いてくんない。
別にインスタンス作ってそこで独立で動かすか、Webのとこに同居させるか考え中。


・postgreSQLのデータの引っ越し

RDSに mastodon ユーザ作って mastodon_production DB作る。前はこの辺Mastodonのドキュメントにあったのに、今はコマンドでやるようになってて手動でやろうとすると少し手間ではある。普段使わないから覚えてないYO
pg_dump で SQL形式でやる方法だと pgsql コマンドに放り込む方法が使えなかったので

pg_dump -O -Fc mastodon_production > filename 

でアーカイブ形式にして、pg_restore で戻す感じ。
でも少しエラーは出る。とりあえず大丈夫そうだから放置。

移行時にMastodonのバージョンも上げたので、リストアして migration しておしまい。
ずいぶんバージョンアップをせずに放置してたのもあって、migration に30分くらいかかった。


・S3、CloudFront

前から使ってるのでそのまま。


・忘れたこととか

ulimit デフォルトのままだった。手元のメモに ulimit って書いてあるのに忘れるとは・・・
open_files がデフォルトで 1024 だと多分足りない。

nginx の worker_connections をデフォルト(768だっけ)のままにしててエラー出まくってしまった。なお今は4096。Streaming で 1人あたり3本くらい使うから、ゴールデンタイムだと700セットくらい繋ぎに来ててそりゃ足りないわ。

Mastodon に同梱されてる nginx のファイル、SSL証明書のとこの行がコメントになっててしばらく気づかなかった(´・ω・`) 



なお月々のお支払いはトータルで2万超える模様。
とはいえ、支援してくださる方々が結構いらっしゃるので安心してリソース使えます(そこか!
ありがたいことです・・・


あと、どうでもいいんだけど CloudWatch のダッシュボードのタイムゾーン変更できるんだね。気づかなかった(´・ω・`)

cloudwatch

↑このページのトップヘ