プログラミング学習 9日目
1,AWSを学ぶ
昨日AWSのアカウントを作成し、色々触れてみた。
とりあえず、バカな私の読解力だと公式サイトの説明がわかりづらかった。
当たり前だがそこそこ知識がある前提での作りな感じがしてすごい門前払いを受けた感じがする。
ただ、これがやるとすごくわくわくする。Amazonさんパネぇっす。
とりあえず本日は、12ヶ月の無料枠を使い「EC2」、「RDS」を構築してみた。
昨日も書いたがアカウント作成に、メールアドレスを1回だけ入力させて、初回ログインにアドレスを必須にする仕組みはまずくないかと思うのだが私だけなのか?
私でも想像がつくので誰もが考えると思うのだが…。しかも認証もせずに。
存在しないアドレスや無効なアドレスでもアカウントが作れてしまうし、クレジットカードの登録もあるのに少しずさんな気がする…。ユーザー名とパスワードでログインできればそれでいいのでは。
2,EC2
インスタンスと呼ばれる仮想サーバーを構築できるサービス。
PCの仮想環境と同じようか感じで、ターミナルからSSH接続でアクセスが可能だった。
なので、ネット上にある仮想環境という認識。
それがサーバーを役割になっているだけだと思う。
3,RDS
クラウド型のデータベースサービス。
Rails でさわったDBの巨大版でクラウドで動くよって感じの認識。
カラムとかテーブル、SQLで通信するとか仕組みは似たような感じなのでそこまで難しくないようで難しい。
クラウドにある分、どうしてもセキュリティ問題があるので、そこの設定がどうもめんどくさい。(EC2を連携させるのにIPを登録したり、データを日本語対応に変更したりなど)
4,アプリケーションの動作環境、Railsアプリ公開
それぞれ開発環境、本番環境、テスト環境などがあり、ケースバイケースで変更できる。
私が作ったRailsのアプリをAWS(EC2とRDS)を使い公開しようとしているのだが、開発環境と本番環境でデータベースを切り替えれるように、.envファイルを使って接続情報の変更をできるようにする。
アプリケーションディレクトリの直下に、.envファイルを作成し、
# .env
DB_USERNAME="#RDSの接続ユーザ名を記述する"
DB_PASSWORD="#RDSのパスワードを記述する"
DB_HOST="#RDSのエンドポイント名を記述する"
DB_DATABASE="#アプリケーション名を記述する"
のような記述を行う。さらに本番環境(production)でデータベースがRDS切り替わるように、database.yml ファイルへ
#config/database.yml
production:
<<: *default
database: <%= ENV['DB_DATABASE'] %>
adapter: mysql2
encoding: 〜〜〜〜〜
charset: 〜〜〜〜
collation: 〜〜〜〜〜〜
host: <%= ENV['DB_HOST'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
を記述する。(元々あったものを上記のものに変更する。)
ちなにみこのファイルに、
development:
<<: *default
〜〜〜〜〜
test:
<<: *default
〜〜〜〜〜
という記述がそれぞれあるが、それが開発環境(development)、テスト環境はどこのデータベースを参照し、どの言語なのかというような内容が記述されている。
そして、本番環境に変更を行う時に、database.yml ファイルのENV['DB_DATABASE']の部分を、 .envファイル から参照して値を代入するというような流れだと思う。今回は、開発、テスト環境はSQLiteで、本番環境は、MySQLを利用している。
Git管理をしていて、.envファイルをGitHubにプッシュするとやばいので、.gitignoreファイルに
# .gitignor
/.env
と記述することで、.envファイルのデータベースの情報がGitで管理されなくなり、GitHubにプッシュされることがなくなる。