コンテンツにスキップ

運用

踏み台サーバのセットアップ

backend/operationディレクトリに移動して、以下の設定ファイルを作成してください。

[!NOTE] <>を適切な値に置き換えてください。

MYSQL_HOST=<DB_HOST>
MYSQL_PORT=<DB_PORT>
DB_NAME=<DB_NAME>
PROFILE=<YOUR_PROFILE>
BASTION_HOST=<BASTION_HOST_ID>
SECRET_ID=<SECRET_NAME>

同階層にはいかのMakefileを定義しており、.envを読み込むように設定しています。

SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := help

.PHONY: help port-forward session db-init

include .env

bastion:
  @aws ec2-instance-connect ssh --instance-id $(BASTION_HOST) --connection-type eice --profile $(PROFILE)

port-forward:
  @aws ec2-instance-connect ssh --instance-id $(BASTION_HOST) --connection-type eice --local-forwarding $(MYSQL_PORT):$(MYSQL_HOST):$(MYSQL_PORT) --profile $(PROFILE)

db-session:
  @export MYSQL_USER=$$(aws secretsmanager get-secret-value --secret-id $(SECRET_ID) --profile $(PROFILE) | jq -r .SecretString | jq -r .username) && \
  export MYSQL_PASSWORD=$$(aws secretsmanager get-secret-value --secret-id $(SECRET_ID) --profile $(PROFILE) | jq -r .SecretString | jq -r .password) && \
  mysql --protocol TCP -h localhost -P $(MYSQL_PORT) -u $$MYSQL_USER --password=$$MYSQL_PASSWORD $(DB_NAME)

db-init:
  @export MYSQL_USER=$$(aws secretsmanager get-secret-value --secret-id $(SECRET_ID) --profile $(PROFILE) | jq -r .SecretString | jq -r .username) && \
  export MYSQL_PASSWORD=$$(aws secretsmanager get-secret-value --secret-id $(SECRET_ID) --profile $(PROFILE) | jq -r .SecretString | jq -r .password) && \
  mysql --protocol TCP -h localhost -P $(MYSQL_PORT) -u $$MYSQL_USER --password=$$MYSQL_PASSWORD < ./db/init.sql

それでは、make bastionを実行して踏み台サーバーに接続してみましょう。

make bastion

[!NOTE] make bastionは裏で以下のコマンドを実行しています。

bash aws ec2-instance-connect ssh --instance-id <踏み台サーバーのID> --profile <実行環境のprofile>

踏み台サーバーへ接続が完了したら、以下のコマンドを実行して、踏み台サーバにmysqlクライアントをインストールします。

sudo yum install -y mysql

これで踏み台サーバーへのセットアップは完了です。

ポートフォワードでRDSに接続

以下のコマンドを実行して、リモートのRDSをポートフォワードすることができます。

make port-forward

[!NOTE] make port-forwardは裏で以下のコマンドを実行しています。

aws ec2-instance-connect ssh --instance-id <踏み台サーバーのID> --connection-type eice --local-forwarding <ポート>:<RDSのエンドポイント>:<ポート> --profile <実行環境のprofile>

DBに接続

make port-fowardでリモートのRDSをポートフォワードした状態で別のセッションで以下のコマンドを実行して、DBに接続します。

make db-session

[!NOTE] make db-sessionは裏で以下のコマンドを実行しています。

export MYSQL_USER=$$(aws secretsmanager get-secret-value --secret-id <SECRET_NAME> --profile <PROFILE> | jq -r .SecretString | jq -r .username) && \
export MYSQL_PASSWORD=$$(aws secretsmanager get-secret-value --secret-id <SECRET_NAME> --profile <PROFILE> | jq -r .SecretString | jq -r .password) && \
mysql --protocol TCP -h localhost -P <MYSQL_PORT> -u $$MYSQL_USER --password=$$MYSQL_PASSWORD <DB_NAME>

以上で、RDSへの接続が完了しました。

DBの初期化

以下のコマンドを実行して、DBの初期化を行います。

make db-init

[!NOTE] make db-initは裏で以下のコマンドを実行しています。

export MYSQL_USER=$$(aws secretsmanager get-secret-value --secret-id <SECRET_NAME> --profile <PROFILE> | jq -r .SecretString | jq -r .username) && \
export MYSQL_PASSWORD=$$(aws secretsmanager get-secret-value --secret-id <SECRET_NAME> --profile <PROFILE> | jq -r .SecretString | jq -r .password) && \
mysql --protocol TCP -h localhost -P <MYSQL_PORT> -u $$MYSQL_USER --password=$$MYSQL_PASSWORD <DB_NAME> < ./db/init.sql

make db-sessionを実行して、DBに接続して、初期化が完了しているか確認してください。以下のコマンドを実行してテーブルが作成されていれば初期化完了です。

mysql> show tables;
+---------------------+
| Tables_in_main      |
+---------------------+
| devices             |
| results             |
| tasks               |
+---------------------+
4 rows in set (0.05 sec)