1
0

More than 3 years have passed since last update.

AmplifyとEC2の通信でハマったところ

Last updated at Posted at 2021-08-08

構成

フロント
React→Amplify
サーバー
Rails→EC2 + RDS

以下のように通信が流れるようなインフラを作った。その時詰まったところをまとめ。
ちょっと雑なので後で見返して修正する。正直ハマりすぎて疲れた。。。
Amplify→Route53→ELB→EC2→RDS

EC2のSSL化

当然っちゃ当然だけどAmplify側がHTTPSなのでEC2もHTTPS化する必要あり。

設定時につまずいたところ

unicornでポート指定してなかった→listenの設定
unicornだと80番使えない。80番はルート権限でしか使えない→nginx経由でソケット通信させる仕様に変更
ルートパスにルーティングが組まれていない場合ELBのヘルスチェックでこけるのでヘルスチェックのURLをカスタムする

CORS設定

React側から通信するときにCORSの設定ができていなくてエラーになった。
そのときにやった設定

axios側

export const api = axiosBase.create({
  baseURL:
    process.env.NODE_ENV === 'production'
      ? `本番URL`
      : 'ローカルURL',
  responseType: 'json',
  withCredentials: true,
  headers: {
    ContentType: 'application/json',
    Accept: 'application/json',
  },
})

withCredential: true というのがどうも重要みたい

rails側

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins "http://localhost:3000", "フロント側の本番URL"

    resource "*",
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head],
      credentials: true
  end
end

Rails側でもcredentials: trueを入れる必要がありそう?

どうもoriginが
"https://hogehoge.com/"みたく最後にスラッシュがついてるとエラーになるっぽい?
これのせいで30分以上ハマった

RDSの文字コード設定

RDSのデフォルト設定では日本語を受け付けないようで、以下のようなエラーに。

ActiveRecord::StatementInvalid (Mysql2::E
rror: Incorrect string value: '\xE3\x83\x9B\xE3\x82\xB2' for column 'name' at ro
w 1):

解決策

パラメータグループでutf-8で保存するようにする
すでにrailsでマイグレーション済みの場合にはmigrate:resetして文字コードを適用させる

1
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
1
0