2.2. DB接続情報ファイルの作成 (handson-rds-dbinstance)

作業の目的 [why]

DBインスタンス"handson-rds-dbinstance"への接続情報ファイルを作成します。

完了条件/事前条件 [設計者用情報]

完了条件 [after]

主処理は、以下を満たしたときに成功したものとします。

完了条件1
DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在する。

事前条件 [before]

主処理の実施は、以下の状態であることを前提とします。

事前条件1
一時ファイル用ディレクトリ"${HOME}/tmp"が存在する。
事前条件2
DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在しない。
事前条件3
DBインスタンス"handson-rds-dbinstance"が存在する。

作業対象 [what]

  • RDS DBインスタンス

標準時間(合計)

8分

パラメータ設定

パラメータ設定の標準時間:2分

作業に必要なモノ・情報 [resource]

作業開始には、以下が全て揃っていることが必要です。

リソース1: 一時ファイル用ディレクトリ

  • 今回は"${HOME}/tmp"を一時ファイル用ディレクトリとします。

ディレクトリが存在することを確認します。

コマンド:

ls -d ${HOME}/tmp

結果(例:存在する場合):

${HOME}/tmp

ディレクトリが存在しない場合は作成します。

コマンド:

mkdir -p ${HOME}/tmp

リソース2: DBインスタンス名

  • 接続するDBインスタンスの名称です。
  • 今回は"handson-rds-dbinstance"とします。

リソース3: DBインスタンスの接続ポート番号

  • 接続するDBインスタンスの接続ポート番号です。
  • 今回は"5432"とします。

リソース4: データベース名

  • 接続するデータベースの名称です。
  • 今回は"handsonCLI"とします。
  • データベース名には、英数字のみが利用できます。

リソース5: マスタユーザ名

  • 接続するデータベースで利用するユーザ名です。
  • 今回は"pgadmin"とします。

リソース6: マスタパスワード

  • 接続するデータベースで利用するユーザのパスワードです。
  • 今回は"#dbPass123"とします。

リソース7: DB接続情報ファイル名

  • 接続するデータベースへの接続情報を保存するファイルの名前です。
  • 今回は"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"とします。

パラメータの指定

作業に必要なパラメータを変数に格納をします。

0.0. リージョンの指定

変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

0.1. 一時ファイル用ディレクトリの指定

変数の設定:

DIR_TMP="${HOME}/tmp"

0.2. DBインスタンス名の指定

DBインスタンス名を指定します。

変数の設定:

RDS_INSTANCE_IDENT='handson-rds-dbinstance'

0.3. DBインスタンスの接続ポート番号

接続するDBインスタンスの接続ポート番号を指定します。

変数の設定:

VPC_SG_PORT="5432"

0.4. データベース名

接続するデータベース名を指定します。

変数の設定:

RDS_DB_NAME="handsonCLI"

データベース名には、英数字以外の文字は利用できません。

0.5. マスタユーザ名

データベースのマスタユーザ名を指定します。

変数の設定:

RDS_USER_NAME='pgadmin'

0.6. マスタパスワード

データベースのマスタユーザのパスワードを指定します。

変数の設定:

RDS_USER_PASS='#dbPass123'

0.7. DB接続情報ファイル名

DB接続情報ファイル名を指定します。

変数の設定:

FILE_DB_CONNECT="${DIR_TMP}/${RDS_INSTANCE_IDENT}-${RDS_USER_NAME}.txt" \
  && echo ${FILE_DB_CONNECT}

結果(例):

${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt

パラメータの保存

設定されている変数の保存先となるファイル名を指定します。

変数の設定:

DIR_PARAMETER="${HOME}/tmp/parameter-handson-rds"
FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-rds-connect-postgresql-create.env" \
  && echo ${FILE_PARAMETER}

結果(例):

${HOME}/tmp/parameter-handson-rds/2019-06-10-rds-connect-postgresql-create.env

各変数に正しいパラメータ値が格納されていることを確認しながら保存します。

変数の確認:

cat << EOF > ${FILE_PARAMETER}

  # 0.0. AWS_DEFAULT_REGION:"ap-northeast-1"
         AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 0.1. DIR_TMP:"${HOME}/tmp"
         DIR_TMP="${DIR_TMP}"
  # 0.2. RDS_INSTANCE_IDENT:"handson-rds-dbinstance"
         RDS_INSTANCE_IDENT="${RDS_INSTANCE_IDENT}"
  # 0.3. VPC_SG_PORT:"5432"
         VPC_SG_PORT="${VPC_SG_PORT}"
  # 0.4. RDS_DB_NAME:"handsonCLI"
         RDS_DB_NAME="${RDS_DB_NAME}"
  # 0.5. RDS_USER_NAME:"pgadmin"
         RDS_USER_NAME="${RDS_USER_NAME}"
  # 0.6. RDS_USER_PASS:"#dbPass123"
         RDS_USER_PASS="${RDS_USER_PASS}"
  # 0.7. FILE_DB_CONNECT:"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"
         FILE_DB_CONNECT="${FILE_DB_CONNECT}"

EOF

cat ${FILE_PARAMETER}

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

タスクの実施

タスク標準時間:6分

1. 前処理

1.1. 処理対象の状態確認

主処理の実施は、以下の状態であることを前提とします。

前提と異なることが判明した場合、直ちに処理を中止します。

事前条件1: 一時ファイル用ディレクトリ"${HOME}/tmp"が存在する。

「一時ファイル用ディレクトリ"${HOME}/tmp"が存在する。」ことを確認します。

コマンド:

ls -d ${DIR_TMP}

結果(例):

${HOME}/tmp

事前条件2: DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在しない。

「DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在しない。」ことを確認します。

コマンド:

! ls ${FILE_DB_CONNECT}

結果(例):

ls: ${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt No such file or directory

事前条件3: DBインスタンス"handson-rds-dbinstance"が存在する。

「DBインスタンス"handson-rds-dbinstance"が存在する。」ことを確認します。

コマンド:

aws rds describe-db-instances \
  --query "DBInstances[?DBInstanceIdentifier == \`${RDS_INSTANCE_IDENT}\`].DBInstanceIdentifier" \
  --output text

結果(例):

handson-rds-dbinstance

1.2. 主処理に必要な情報の取得

エンドポイントの取得

コマンド:

RDS_INSTANCE_ENDPOINT=$( \
  aws rds describe-db-instances \
    --db-instance-identifier ${RDS_INSTANCE_IDENT} \
    --query 'DBInstances[].Endpoint.Address' \
    --output text \
) \
  && echo ${RDS_INSTANCE_ENDPOINT}

結果(例):

handson-rds-dbinstance.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

2. 主処理

DB接続情報ファイルの作成

変数の確認:

cat << ETX

  # RDS_INSTANCE_ENDPOINT:"handson-rds-dbinstance.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com"
    RDS_INSTANCE_ENDPOINT="${RDS_INSTANCE_ENDPOINT}"
  # VPC_SG_PORT:"5432"
    VPC_SG_PORT="${VPC_SG_PORT}"
  # RDS_DB_NAME:"handsonCLI"
    RDS_DB_NAME="${RDS_DB_NAME}"
  # RDS_USER_NAME:"pgadmin"
    RDS_USER_NAME="${RDS_USER_NAME}"
  # RDS_USER_PASS:"#dbPass123"
    RDS_USER_PASS="${RDS_USER_PASS}"
  # FILE_DB_CONNECT:"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"
    FILE_DB_CONNECT="${FILE_DB_CONNECT}"

ETX

コマンド:

echo "${RDS_INSTANCE_ENDPOINT}:${VPC_SG_PORT}:${RDS_DB_NAME}:${RDS_USER_NAME}:${RDS_USER_PASS}" > ${FILE_DB_CONNECT} \
  && chmod 600 ${FILE_DB_CONNECT} \
  && cat ${FILE_DB_CONNECT}

結果(例):

handson-rds-dbinstance-ap-northeast-1.xxxxxxxxxxxx.ap-northeast-1rds.amazonaws.com:5432:handsonCLI:pgadmin:#dbPass123

3. 後処理

3.1. 完了条件の確認

主処理は、以下を満たしたときに成功したものとします。

完了条件1: DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在する。

「DB接続情報"${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt"が存在する。」ことを確認します。

コマンド:

ls ${FILE_DB_CONNECT}

結果(例):

${HOME}/tmp/handson-rds-dbinstance-pgadmin.txt

完了