AWS」カテゴリーアーカイブ

AWS+Route53+お名前.com+LBでHTTP→HTTPSにするには?

1から続きます

目標:AWS+Route53+お名前.com+LBでHTTPSにする

ACMにて発行済みになったのを確認したところからスタート

1:お名前.comにてネームサーバーを変更

①お名前.com上のタブのドメインを選択

②ネームサーバーのリンクをクリック

2:ネームサーバーの選択のその他を選択

3:別タブでRoute53のタイプNSの4つをそれぞれコピーする

4:コピーしたものを貼り付けて確認をクリック

 

5:ターミナルにてdigコマンドで確かめる

dig 自分のドメイン名 NS +short
       ↑お名前.comで取得したドメイン名

dnsv.jv(お名前.comのネームサーバー)から先程自分で設定したネームサーバー(awsdns)に変わっているのを確認します。

反映まで時間がかかりますのでご注意を・・・

6:ロードバランサーの設定

EC2を検索してEC2へ

7:ナビゲーションペイン(左のサイドバー)からロードバランサーをクリックしてロードバランサーの作成をクリック

8:Application Load Balancerの作成をクリック

9:名前は任意で自分がわかりやすい名前をつけます

 

10:”リスナーを追加”を押してHTTPSを追加します

11:VPCは自分で作成したVPCを、アベイラビリティーゾーンには、EC2のインスタンスが所属しているアベイラビリティーゾーンを含む2つを選択します。(今回はap-northeast-1aと1cを選択。2つない場合は作成します)

12:セキュリティ設定の構成をクリック

13:ACMから証明書を選択するにチェックを入れてセキュリティーグループの設定をクリック

AWS Certificate Manager証明書が作成されていないとできないので注意です。

14:新しいセキュリティーグループを作成するを選んでHTTPとHTTPSを加えてルーティングの設定をクリック

15:名前を入力してターゲットの登録をクリック

16:インスタンスを選んで登録済みに追加して確認をクリック

17:作成をクリック

18:ロードバランサーが作成されたらOK

19:Route53 へ行きホストゾーンをクリック

20:ドメインを選択して詳細を表示をクリック

21:レコードAにチェックしてレコードを編集をクリック

(右側のナビゲーションペインが見つかりづらいので注意)

 

22:レコードを編集します

①トラフィックのルーティング先のエイリアスのスイッチを右側にします

②エンドポイントを選択の部分をApplication Load BalancerとCrassic Load Balancerへのエイリアス

③リージョンを選択の部分をアジアパシフィック東京

④先程登録したロードバランサーを選択

⑤保存をクリック

https://ドメイン名でアクセスしてサイトが表示されたらOKです!

http://ドメイン名からhttps://ドメイン名に自動でリダイレクトさせる設定を次回行います。

503Bad Gatewayが出た場合

15:で作ったターゲットグループ↓を使用する

自分で作成したロードバランサーを選択してHTTPS443の編集をクリック

ターゲットグループの部分に15:で作ったターゲットグループを設定する。

変更内容を保存してhttps://ドメイン名でアクセスしてサイトが表示されたらOKです!

続く

AWS(S3)

0:S3とは?(S3の概要)

以下のようなメリットが有る

①Webサービスのストレージが画像でいっぱいになるのを防ぐ

②HTMLへのアクセスと画像へのアクセスを分けることで負荷分散できる。

サーバーの台数を増やしやすくするため

③ウェブサーバー上に画像が保存されていると、ウェブサーバーの台数を増やしたときに、画像を同期する必要がありスケールアウトが難しい。

④画像の保存場所は分離されていた方がウェブサーバーの台数を簡単に増やすことができる。

⑤コンテンツ配信サービスから配信することで画像配信を高速化できる。

⑥安価で耐久性が高い1GB約3円/月 +容量無制限1ファイル5TBまで

⑦バケットやオブジェクトに対してアクセス制限を設定できる

バケット:オブジェクトの保存場所のこと名前はグローバルでユニークな必要がある。

オブジェクト:データ本体の事URLが付与される。

キー:オブジェクトの格納URLパス。

よくある利用シーン

静的コンテンツの配信:Image画像はS3から配信します。

ログなどの出力先:定期的にS3にログを送ります。

静的ウェブホスティング:静的なウェブサイト(ランディングページなど)をS3から公開します。

バッチ連携用のファイル置き場:S3にファイルをおいて、バッチでそのファイルを参照して処理を行います。

1:S3のバケット作成

S3で検索してS3をクリックします。

2:バケットを作成をクリックします。

続きを読む

NginxでHTTP→HTTPSに自動でリダイレクトさせるよ!

目標:http://ドメイン名でリクエストが来た時https://ドメイン名に自動でリダイレクトさせるように設定する

前提:AWS+Rails+Unicorn+Nginx

※ご注意2022年現在下記のやり方はパフォーマンス的に非推奨となっています。学習用ならありかもですが・・・

非推奨でないAWSのALBを使う場合はこちらをどうぞ

1:まずはEC2にSSH接続する(各自SSH接続の方法は異なります)

ssh my-portfolio-key-rsa

2:nginxの設定を変更するためにまずは移動

cd /etc/nginx/conf.d

3:設定ファイルを書き込む(各自異なります)

sudo vim アプリ名.conf

if ($http_x_forwarded_proto = http) {
return 301 https://$server_name$request_uri;
}

上記を追加

4:Nginxを再起動するために移動

cd /var/www/rails/Tools/
                        ↑自分のアプリ名

5:nginxを再起動

sudo nginx -s reload

nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

上記のエラーが発生したので次のコマンドをします。

sudo touch /run/nginx.pid && service nginx restart

またエラー発生

Failed to restart nginx.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files
sudo service nginx restart

こちらもsudoが必要だったようでNginxがやっと再起動できた。

http://ドメイン名で試したところ

https://ドメイン名に自動でリダイレクトしてくれるのを確認できた!

http://ドメイン名でアクセスしてhttps://IPアドレスになりエラーになる場合

前提:他のブラウザでhttp://ドメイン名でアクセスしてhttps://ドメイン名に自動でリダイレクトされるが、あるブラウザではhttps://IPアドレスになりエラーになる場合

GoogleChromeでなったときの対処法

①Googlechromeを開きショートカットキー⌘,で設定を開きます。

②セキュリティーとプライバシーをクリックして閲覧履歴データの削除をクリックします

③Cookieと他のサイトデータとキャッシュされた画像とファイルを選択してデータを削除をクリックします

自分の場合http://ドメイン名でアクセスしてhttps://ドメイン名に自動でリダイレクトしてくれるのを確認できました。

ポートフォリオをデプロイしたときのEC2の設定2(EC2+RDS+NGINX+Puma)

その1から続いています

16:GithubとSSHを接続するために鍵を作成

※EC2内で行います。(sshコマンドで接続してからだよ)

cd ~/.ssh

ssh-keygen -t rsa

例としてrsa_portfolioで作成

17:設定ファイルを作成

vim config

#以下を記述してセーブ

ここから==========================
Host github

  Hostname github.com

  User git

  IdentityFile ~/.ssh/rsa_portfolio

ここまで==========================

18:公開鍵を登録する

#公開鍵をコピーして控えておく一番うしろの部分はコピーしなくて良い
cat rsa_portfolio.pub

#Githubで公開鍵を登録
①GitHubにアクセスして自分のアイコンからSettingsをクリック
②SSH and GPG keysをクリック
③SSHkeyを登録する(rsa_portfolio.pub)

19:GitHubとSSH接続する

chmod 600 /home/newuser/.ssh

ssh -T github

#エラーで接続できなかった時に試します(接続できたらやらなくていいいです)
chmod 744 config

20:GitHubからクローンしてbundlerをインストールします

GitHubにてデプロイしたい自分のリポジトリのCode→SSHからコピーして

git clone git@github.com:newuser/アプリ名.git

gem install bundler -v '2.0.2'

21:gemをインストールします

cd アプリ名/

bundle install --path vendor/bundle

#エラーが出た場合バージョンを合わせる

Gemfile.lockの最下段bの BUNDLED WITH のバージョンと合わせる(例:1.16.6)

#ディレクトリは〜で行う

cd ~
gem install bundler -v '1.16.6'
bundle install --path vendor/bundle

#エラーでrmagikがインストール出来ないときのコマンド 

sudo yum -y install ImageMagick 
sudo yum -y install ImageMagick-devel
bundle install --path vendor/bundle
yarn install

22:nginxをインストールする

sudo amazon-linux-extras install nginx1

#インストールできたか確認
nginx -v

23:アプリ名.confの設定(Nginx)

sudo vim /etc/nginx/nginx.conf
#以下をコピーして貼り付けます

user nginx;
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /run/nginx.pid; 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 
events { 
worker_connections 1024; 
} 

http { 
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
                '$status $body_bytes_sent "$http_referer" ' 
                '"$http_user_agent" "$http_x_forwarded_for"'; 

access_log /var/log/nginx/access.log main; 

sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 65; 
types_hash_max_size 4096; 

include /etc/nginx/mime.types; 
default_type application/octet-stream; 

# Load modular configuration files from the /etc/nginx/conf.d directory. 
# See http://nginx.org/en/docs/ngx_core_module.html#include 
# for more information. 

include /etc/nginx/conf.d/*.conf; 
gzip on; 
gzip_http_version 1.0;
gzip_proxied any; 
gzip_min_length 500; 
gzip_disable "MSIE [1-6]\."; 
gzip_types text/plain text/xml text/css 
           text/comma-separated-values 
           text/javascript application/x-javascript 
           application/atom+xml; }

24:nginxの設定をする

cd /etc/nginx/conf.d/ 
sudo vim アプリ名.conf

#以下をすべてコピーして貼り付けます
# log directory
error_log /var/www/LifeHack-Tools/log/nginx.error.log; #自分のアプリケーション名に変更
access_log /var/www/LifeHack-Tools/log/nginx.access.log; #自分のアプリケーション名に変更
# max body size
client_max_body_size 4G;

upstream app_server {
# for UNIX domain socket setups
server unix://var/www/LifeHack-Tools/tmp/sockets/puma.sock fail_timeout=0; #自分のアプリケーション名に変更
}

server {
listen 80;
server_name suzutuki-portfolio.com; #自分のElasticIP
# nginx so increasing this is generally safe...
keepalive_timeout 5;
# path for static files
root /var/www/LifeHack-Tools/public; #自分のアプリケーション名に変更
# page cache loading
try_files $uri/index.html $uri.html $uri @app;
location @app {
# HTTP headers
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/LifeHack-Tools/public; #自分のアプリケーション名に変更
}
}

25:Nginxの再起動

#Nginxの再起動
sudo nginx -s reload

cd /var/www/アプリ名/
git pull origin master

26:pumaの設定をする

#pumaディレクトリがないときはmkdir /var/www/アプリ名/config/pumaで作成する
cd /var/www/アプリ名/config/puma/
sudo vim production.rb
#ここからコピーだよ↓

# bind "unix://#{Rails.root.join('tmp/sockets/puma.sock')}"だとpumactlコマンドで読み込まないため絶対パスで指定

root_dir = '/var/www/アプリ名'

max_threads_count = ENV.fetch('RAILS_MAX_THREADS', 5)

min_threads_count = ENV.fetch('RAILS_MIN_THREADS', max_threads_count)

threads min_threads_count, max_threads_count

worker_timeout 60

bind "unix://#{root_dir}/tmp/sockets/puma.sock"

environment 'production'

pidfile File.expand_path('tmp/pids/server.pid')

stdout_redirect File.expand_path('log/puma_access.log'), File.expand_path('log/puma_error.log'), true

# workerの数は適宜変更する。指定しない場合はsingle modeとなるが、指定した場合はcluster modeとなる。

plugin :tmp_restart

27:pumaの起動

cd /var/www/アプリ名

git pull origin master

bundle exec rails s -e production

28:エンドポイントの確認

まずはAWSを開き、RDSのメニューからデータベースを選択して

エンドポイントをコピーします。

29:Credentialの設定

cd /var/www/アプリ名/config

touch master.key

chmod 600 master.key

vim master.key

#ローカルにあるmaster.keyの中身をコピーして貼り付け
# 自分で作成したアプリのconfigにmaster.keyがある
# GitHubにはないので注意

30:Credentialに書き込み

cd /var/www/アプリ名

EDITOR="vi" bin/rails credentials:edit
# エラーでできない場合はこちらを試す
EDITOR='vi' bundle exec rails credentials:edit

usernameは設定からわかる。passwordはわからなくなったら変更できる。

db: 

  endpoint: ******************** #先程コピーしたエンドポイントをコピー

  user_name: ***** # マスターユーザー名

  password: ****** # RDS作成した時に作ったパスワード

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.

secret_key_base: *********** #ここは特に手を加えずにそのままで

31.database.ymlの編集

ローカルでdatabase.ymlの設定
先ほどのcredentialsに記載された情報にアクセスするには Rails.application.credentials.db[:endpoint]という書き方をする必要があり、これを利用してproduction環境用のDBに関して定義。

config/database.yml

default: &default

  adapter: mysql2
 
  encoding: utf8mb4

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  username: root

  password: password

  socket: /tmp/mysql.sock

  host: db

development:

  <<: *default

  database: アプリ名_development

production:

  <<: *default

  database: アプリ名_production

  adapter: mysql2

  charset: utf8mb4

  host: <%= Rails.application.credentials.db[:endpoint] %>

  username: <%= Rails.application.credentials.db[:user_name] %>

  password: <%= Rails.application.credentials.db[:password] %>

32:変更した差分を反映

cd /var/www/アプリ名/
git pull origin master

33:DBの作成とmigrate

bundle exec rake db:create RAILS_ENV=production

bundle exec rake db:migrate RAILS_ENV=production

#環境の設定
export RAILS_ENV=production

34:アセットプリコンパイル

bundle exec rake assets:precompile RAILS_ENV=production

35:ブラウザで確認する

http://ElasticIPアドレス

期待していた通りになっていたらOKです。

36:本番環境でもちゃんと動いているか確認します。

レイアウトが崩れていないか

エラーが発生しないか確認します。

ALBでHTTP→HTTPSに自動でリダイレクトさせるよ!

ALBでHTTP→HTTPSに自動でリダイレクトさせるよ!

EC2のALBを使ってリダイレクトさせます。

1:「EC2」で検索→「EC2」をクリックします。

2:ロードバランサーをクリックしてリスナータブからHTTPのルールの表示/編集をクリックします。

3: +ボタンをクリック

4:+ボタンをクリックしてパス…を選択(左)+ボタンをクリックしてリダイレクト先を選択します。

5:パスに*(アスタリスク)を入力して、リダイレクト先に443を入力します。

6:チェックマークをクリックして保存をクリックします。

http://ドメイン名でアクセスしてhttps://ドメイン名に自動でリダイレクトしてくれるのを確認できたらOKです。

 

ポートフォリオの修正の仕方(AWS+Rails)

ポートフォリオで修正や追加する時に見る(自分用)

Nginxがおかしい時にするコマンド

curl -IXGET http://IPアドレス

正常の場合このように表示されます。

HTTP/1.1 200 OK
Server: nginx/1.20.0
Date: Sat, 19 Mar 2022 06:41:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
ETag: W/"919d450b157b488f0"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _todo_session=b2********R5Sy9mhX1RV1dWR01Hek1aR2JWcDNRPT0tLVdrNnp5dlhtaEFKRzBjUlhpMHhXbUE9PQ%3D%3D--cf3f8a4eaa2c6c53fc7b2f73f97a5cc2e9b7edcf; path=/; HttpOnly
X-Request-Id: 0de84a21-****-****-****-c4e2d
X-Runtime: 0.004671

nginxのエラーログを見るときは

sudo less /var/log/nginx/error.log

nginxの設定変更するには

sudo vi /etc/nginx/nginx.conf

cd /etc/nginx/conf.d/

sudo vim アプリ名.conf

sudo vi etc/nginx/conf.d/アプリ名.conf

#再起動して設定を反映するコマンド

sudo nginx -s reload

nginxのプロセスidを見るには

sudo lsof -i | grep nginx

アプリのエラーログを見るには

sudo less /var/www/アプリ名/log/nginx.error.log

EC2に接続したらアプリ直下に移動

cd /var/www/アプリ名/

nginxを再起動するには

sudo service nginx restart

pumaを停止するには

bundle exec pumactl stop

pumaを起動するには

bundle exec pumactl start

Pumaの設定変更するには

vim /var/www/アプリ名/config/puma.rb

②デプロイしてからJSやSCSSを直した後にすること

プリコンパイルするには

bundle exec rake assets:precompile RAILS_ENV=production

Pumaを再起動する

bundle exec pumactl stop

bundle exec pumactl start

Pumaを起動するコマンド/var/www/アプリ名/config/puma/productionに設定ファイルを書き込んでいる場合

bundle exec rails s -e production

AWS+Route53+お名前.com+LBでHTTP→HTTPSにするには?2021年4月版(1)

AWS×お名前.com×Route53で独自ドメインのサイトを作ったがHTTPSにしたい

まず、そもそもなぜSSL化をする必要があるのか?

・SSL化するとそのサイトのデータの通信が暗号化される

・Googleや国がSSL化を推奨している(SEO対策にもなる)

1:サービスからACMで検索してCertificate Managerを選びます。

2:証明書のリクエストをクリックします。

3:証明書のリクエストをクリックします

続きを読む

ポートフォリオをデプロイしたときのEC2の設定1(EC2+RDS+NGINX+Puma)

ポートフォリオをAWSのEC2にデプロイした時にやったこと

EC2を作成

無料利用枠で作成する詳しくは

0:EC2に接続する

EC2の接続から例:の部分をコピーしてターミナルで行う。

ssh -i "EC2の秘密鍵.pem" ec2-user@自分のElasticIPアドレス

1:ユーザーとパスワードを作成する

sudo adduser newuser

sudo passwd newuser

2:root権限を付加(rootの↓に追加します)

sudo visudo

root   ALL=(ALL)    ALL
newuser   ALL=(ALL)    ALL

3:今作ったユーザーを変更

続きを読む

Can’t connect to MySQL server on “”(AWS+MySQLエラー対処録)

AWSでEC2にログインしてMySQLに接続するために以下のコマンドをしたところ

mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin -p

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘my-portfolio-web.c*******l.ap-northeast-1.rds.amazonaws.com’ (110)

確認すること

RDSのダッシュボードのデータベースを選択して、データベースが動作しているか(停止中でないか)確認します。

セキュリティーグループを確認する。

EC2ダッシュボードの「セキュリティーグループ」を選択して、「インバウンドルールを編集」をクリックします。

インバウンドルールのタイプがMySQL/Auroraでソースのセキュリティーグループが設定されているか確認します。

ソースのセキュリティーグループのインバウンドルールが↓のようであればOK です。

mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin p

ERROR 1045 (28000): Access denied for user ‘admin’@’10.10.0.10’ (using password: NO)

とエラーが出てしまいました・・・
これは-u admin -pの部分が-u admin pになっていたためでした。

正しいコマンドをします。(****の部分は環境で変わる部分です)

mysql -h my-portfolio-web.c*********l.ap-northeast-1.rds.amazonaws.com -u admin -p

MySQLに接続できました!

WARNING: UNPROTECTED PRIVATE KEY FILE!(エラー対処録)

経緯:EC2にsshキーでログインしようとしたところ

WARNING: UNPROTECTED PRIVATE KEY FILE!と怒られた

原因

秘密鍵のPermissionが0644だったので許可されなかった。

対処法

sudo chmod 600 ~/Desktop/〇〇.pem
                ↑秘密鍵の場所(各自置いているところで異なります)

chmod 600でパーミッションを変えてあげたところログインできました。

※秘密鍵の場所と秘密鍵の名前は各自で異なりますのでご注意を

自分は秘密鍵をデスクトップに仮置していたのでDesktopとなっています。