0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Heroku初心者がハマった罠3つ

Posted at

Heroku使っていて、アドオンについてかなり苦戦したので備忘的に残しておきます。
MailgunとPostgresです。

HerokuのアドオンのMailgunのプランを変えたらリセットされてsandboxドメインになっていた

やりたかったこと

メールの独自ドメインの認証を済ませて、すでに動かしているプロダクトだったのですが、固定IPが欲しくなって課金しました。

起きたこと

Starter(Free) から Production 100k にしたんですが固定IPもらえなさそうだったので戻しました。
しばらくすると「メールが送信できない」と報告があり、見に行くとSandoboxで送ろうとしているエラー文。
調査すると、Herokuの環境変数(MAILGUN_SMTP_SERVER など)が書き換わっている。

Mailgunはプラン変更やドメイン追加のタイミングで、自動的に環境変数を書き換えることがあり、Herokuアドオンを使っていると、これがサイレントで起こるのが超怖い。
なんで勝手にそんなことするんですか。やめてくれと思いながら設定し直しました。

そもそもcredentialsで環境変数を設定しよう;;

本番Mailgunのアドオンをstgに使い回そうとして、SMTP認証エラー&attach不可のW地雷を踏んだ話

やりたかったこと

本番と同じ独自ドメインをstgでも使えるようにしようとしました。

やったこと

ステップ1:stgに本番と同じ環境変数を設定

$ heroku config:set MAILGUN_SMTP_SERVER=smtp.mailgun.org \
  MAILGUN_SMTP_LOGIN=postmaster@yourdomain.com \
  MAILGUN_SMTP_PASSWORD=xxx \
  --app hogehoge-staging

ステップ2:テスト送信 → Net::SMTPAuthenticationError 発生

Net::SMTPAuthenticationError: 535
本番と同じなんですが?

ステップ3:「SMTP Credential mismatch」説が濃厚に

staging側からprod用のCredentialで送ると弾かれる(マルチテナント対策?)らしい、けどドキュメント見つけられず(AIが言ってた)

ステップ4:Herokuアドオンの attach を実施

$ heroku addons:attach mailgun-adjacent-xxxx --app hogehoge-staging
Error: That add-on resource is already attached to an app and may only be attached once.

Attachできないのかよ〜

Mailgunアドオンは1アプリ=1アドオンの原則(attach不可)らしかったです。
めっちゃ頑張ったのにできなかった;;

stg環境でもメール送信が必要なら、Mailgun本体で追加ドメインを作る or 別途テスト用ドメインを使うのがよさそうです。
固定IPがほしいので本体のアカウントを作成してそっちでやることにしました。じゃあもうHeroku使う意味あんまないね。
てかそもそも本番とstgではドメイン分けた方が安全ぽいですね。

Postgresの並行接続数が足りなくてstandardに上げたかったのに、GUIでできずCLI&DB移行が必要だった件

やりたかったこと

並行処理の制限(connection limit)が 20 しかなくて、too many requestsが頻発。
standard-0 だと 120 になるため、Postgresアドオンを essential-0standard-0 にアップグレードしたかった。

やったこと

ダッシュボードからプラン変更を試すと essential-2 までは選べるがstandard-0 は一覧にない、
Dyno Typeが basic だからか?と思い、プランを変更。
でも、Postgresのプラン変更候補は変わらず。

いろいろ調べるとCLIから叩けることがわかりました。

heroku addons:create heroku-postgresql:standard-0 --app your-app-name

これでようやく standard-0 を指定して作成できました。
CLIじゃないとできないことがあるんだね。

essentialstandard 間では物理的に別インスタンスになるらしく、自動で中身が移るわけではないので、DBの再アタッチ・移行作業が必須。

heroku pg:wait -a your-app-name
heroku maintenance:on -a your-app-name
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_NEW_URL -a your-app-name
heroku pg:promote DATABASE_URL --app your-app-name
heroku maintenance:off -a your-app-name

HEROKU_POSTGRESQL_NEW_URL はinfoで確認。

めんどいしDB周りの移行は怖いので最初から standard-0 でもよかったかもしれないです。
ただ、金額は高いので迷いどころかもですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?