2020年5月19日火曜日

検証環境(Beanstalk)

以下、検証環境のアーキテクチャになります。(設計期間:約1ヶ月程度)


1)route53(DNS)
①サブドメイン作成
  - 管理画面
     - CNAMEにELBに割り当てる
     - ドメイン名:serv3.xxxxx-test.com
  - API
     - CNAMEにELBに割り当てる     
   - ドメイン名:api2.xxxxx-test.com
  -  websocket                
     - CNAMEにELBに割り当てる             
   - ドメイン名:socket.xxxxx-test.com

2)API-gateway(API名:test-api2)
以下の構成にしている。
①API
②管理画面
③Websocket(予備)


以下、リソース内部の詳細設定になります。

■API
管理画面

3)ELB(ロードバランサー)
①作成済みの証明書を追加させる
 - 管理画面
 - API

補足:
websocketについては、現行環境でもSSL証明書は適応されてないので同様にしている。


4)Beanstalk
①管理画面     : dockerベース [centos6/php5.3]
②api             : dockerベース [centos6/php5.3]
③websocket:dockerベース [node.js(0.10.46) & forever(0.15.3)]



5)RDS for MySQL(DBサーバー)
①導入済み
②チューニングについては、負荷テストの結果をみて行う。


6)S3(ネットワークストレージ)
goopysのマウントを行う。

補足:
Goopysを利用して、S3のマウントポイントとして利用


7)ACM(無料SSL証明書:導入)
①作成したテストドメイン(test-okage.com)をベースに証明書作成


8)Cloudwatch アラート通知

①管理画面
②API
③websocket
④RDS
⑤ELB

捕捉:
通知先は、テスト用のアドレスに向けている


9)Cloudwatch logs
.ebextensionsに記載を行う


10)サブネット
2つのサブネットに分ける
①プライベート(RDS用)
②パブリック(Beanstalk用)


11)セキュリティグループ
①Beasntalk用
②RDS用

12)AWS WAF
①API Gatewayに割り当てを行う
 - 適応したルールについて
   - PHPRuleSet(PHPの脆弱性対策用)
   - SQLiRukeSet(MySQLインジェクション対策用)


13)CI/CD
①Circle/CIでデプロイを行う。




Flowログの作成方法

参照先:


1)ロググループから新規作成する

2)VPCダッシュボードに移動して、対象のVPCを選択

3)権限設定を選ぶ

4)許可を選択

5)作成ボタンを押す


設定後、VPCからのログがCloudwatch logに入ってくるのでCloudwatch log(インサイト)で
アクセス先が確認しやすくなる
(今回、サンプルイメージを使ってみました。様々な集計が出来そう)

JMeterの使い方

負荷テストを行う場合に利用するツールになる。

ダウンロード先:

1)アプリケーションは、以下になります。

2)HTTPリクエストの作成を行う。
->スレッドグループ > 追加 > サンプラー > HTTPリクエストを選択する。

3)以下の設定値に入力を行う
①プロトコル:http (又は https)
②サーバ又はIPアドレス:該当のサーバ対象を指定する。
③パス:対象のパスを指定する。
ポート番号:80 (又は、443)

4)追加を押す > 用途応じて記入する。

5)スレッドグループを追加する。
①スレッド数(同時接続数):
②Ramp-Up 期間(秒):
ループ数:

スレッド数について:


6)Apache
/etc/httpd/conf/httpd.conf
->変更を加えた場合は、サービスの再起動を行うこと。

service httpd restart

7)スレッド > 追加 > リスナー > 結果を表示を選択する。









Apache(httpd.conf)の設定値について

復元方法(特定時点への復元)

1)対象のRDSを選択する。
2)アクションメニューから"特定時点への復元"を選択する。

3)復元元の特定時点から"復元可能な最新版時刻"を選択する。

備考:
復元が失敗に終わった場合は、"カスタム"を選択して日時を指定する

4)DBインスタンス識別子に、DB名を記載する。

5)DBインスタンスの起動を押す。

6)以下の画像のように、RDSが復元されていることが把握できる。


スナップショットからの復元方法

1)RDSの管理画面に移動する。
①スナップショットを選択する
②システムタブを選択(または、手動タブ)
③復元対象のイメージを選択する
スナップショット の復元を選択する。

2)以下の必要な条件に応じて設定を行うこと
①DBインスタンスのクラス:
マルチAZ配置:

3)以下が復元したDB名になるので、記載すること

4)ネットワーク&セキュリティ
①VPC : 既存のVPCを選択すること。
②サブネットグループ : 既存のサブネットを選択すること
③既存のVPCセキュリティグループの選択
上記、分からなかったら、管理画面から他のRDSを確認すること。

5)データベースの設定
①データベースポート:3306
②DBパラメータ:既存の設定に合わせること
オプショングループ:デフォルト(基本触らない)


6)ログのエクスポート
以下、全てチェックをすること。
①監査ログ
②エラーログ
③全般ログ
スロークエリログ

7)メンテナンス
①マイナーバージョン自動アップグレード : いいえ
②DBインスタンスの復元を押す


■DB名の差し替え
1)次に問題が発生した"運用中のDB"と"復元したDB"の差し替えを行う。
作業イメージ:
作業前
作業後
soedb20-prd [運用中のDB]
soedb20-prd-before [削除対象]
soedb20-prd-backup [復元したDB]
soedb20-prd [運用中のDB]

2)運用中のDBの名前の変更を行う。

3)変更を選択する

4)変更したい名前(運用中のDB名と重複しない名前にすること!)の入力を行う
5)パスワードの設定を行う。(他のDBと同じパスワードにする)
6)次へを選択する。

7)すぐに適応を選択する
8)DBインスタンスの変更を押す

9)復元したDBについては、差し替え予定のDB名(例:soedb20-prd)に差し替えをすることで
API側のsoedefine.phpに修正が不要になる。





スナップショット 取得方法 (RDS)

スナップショット 取得方法 (RDS)

①該当のDBの選択する。
②アクションメニューを選択
スナップショット の取得を選択する

スナップショット名を入力して、スナップショットの取得を選択する。


以下が、取得できた様子
(t2.mictroの場合、5分程度で完成した。)


SequelPro初期設定(for AWS RDS)

1)SSHでtest1サーバーに接続する
2)EC2のダッシュボードからssh keyをダウンロードを行う        

3).sshディレクトリを用意して、パーミッション設定
mkdir ~/.ssh
chmod 700 .ssh

4)xxxxxxx.pemを~/.ssh/において、パーミッション設定
cp ~/Downloads/xxxxxxx.pem ~/.ssh/
chmod 600 ~/.ssh/xxxxxxxxx.pem

5)~/.ssh/configを作る
touch ~/.ssh/config

以下の内容を~/.ssh/configに書き込む
=====~/.ssh/config==============-
Host test1
HostName 52.xx.xx.xx
User root
Port 22
IdentityFile ~/.ssh/soe-pri-key-nopass
IdentitiesOnly yes
Host test2
HostName 52.xx.xx.xx
User root
Port 22
IdentityFile ~/.ssh/soe-pri-key-nopass
IdentitiesOnly yes
================================

6)接続テスト
ssh test1
ログインできたら成功



■MySQLのGUIツールを利用する

1)ダウンロードしてインストール

2)Sequel Proを開いて設定
①SSHタブを選択
②名前: 任意
③MySQLホスト: xxxxxxxxxxxxxxxxx.rds.amazonaws.com
④ユーザー名: [割り当てられたユーザ名]
⑤パスワード: [割り当てられたパス名]
⑥SSHホスト: 踏み台の用のServerを選択



DBのDump & Import

■エクスポート方法
1)該当する出力対象のDBに接続する。

2)ファイルメニューからエクスポートを選択

3)以下の設定を行う
①SQLを選択
②出力先を指定
エクスポートボタンを押す


■DBの作成及びインポート
1)複製先のDBにログインする。

2)データベースメニューからデータベースの追加を行う。

3)データベースメニューからデータベースの追加を行う。
追加ボタンを押す。

4)ファイルメニューからインポートを選択する

5)先ほどのファイルを選択する
6)開くを選択
①コピー先のDBであること!!
②先ほど出力したファイル(xxxxxx.sql)であること!!
開くを押す。


WorkBenchの設定方法

1)WorkBenchを起動させます

2)プラスボタンを押します。

3)設定項目を入力していきます。
①Connection Name:任意
②Connection Method: Standard TCP/IP over SSHを選択する
③Parametersを選択する
④SSH Hostname : xx.xx.xx.xx:22
⑤SSH Username:root
⑥SSH Key Files: 添付ファイルからダウンロードした、xxxxxxxx.pemを指定する。
⑦MySQL Hostname: (接続先のDBを指定する)以下のどれかを指定する: 
xxxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com
⑧MySQL server Port:3306
⑨Username: 割り当てられたユーザー名を指定してください。

4)OKを押す
5)OKを押すとパスワードを聞かれるので” xxxxxxxxxx “DBのパスワードを入力する。

再度、立ち上げたい場合は、Workbenchの起動後に、以下の選択すること。


■追加設定
RDSSSL経由で、接続を行わないので、以下の設定も行うこと!


ローカルLLMでコーディングさせるポイント

 簡単な指示で、依頼するとコンテキストオーバーで記憶喪失になって コードの内容が一致しないことが起こるので、work.mdみたいな作業メモを取らせたるのがよい 途中から、別スレッドに再実施する場合でも、work.mdが引き継ぎとして 参照して実施してくれるのがポイント