3.1. ユーザデータの作成 (postfix: handson-cli-lightsail-user_data)¶
作業の目的 [why]¶
ユーザデータ名"handson-cli-lightsail-user_data"を作成します。
注釈
作業者によって作業対象のメールドメイン名や転送先メールアドレスが異なるため、本手順においては、以下のとおりにそれぞれ読み替えてください。
メールドメイン名: "handson-cli-lightsail.example.jp" -> "<事前に用意した独自ドメイン>"
転送先メールアドレス: "test@example.com" -> "<事前に用意した転送先メールアドレス>"
("コマンド"、"変数の設定"、"変数の確認"については読み替えの必要はありません。)
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在する。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
ユーザデータ用ディレクトリ"${HOME}/environment/conf-handson-cli-lightsail"が存在する。
- 事前条件2
ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在しない。
作業対象 [what]¶
ユーザデータ
標準時間(合計)¶
8分
パラメータ設定¶
- パラメータ設定の標準時間
2分
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: ユーザデータ用ディレクトリ
今回は"${HOME}/environment/conf-handson-cli-lightsail"をユーザデータ用ディレクトリとします。
ディレクトリが存在することを確認します。
コマンド:
ls -d ${HOME}/environment/conf-handson-cli-lightsail
結果(例:存在する場合):
${HOME}/environment/conf-handson-cli-lightsail
存在しない場合は作成します。
コマンド:
mkdir -p ${HOME}/environment/conf-handson-cli-lightsail
リソース2: ユーザデータファイル名
作成するユーザデータのファイル名です。
今回は"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"とします。
リソース3: メールドメイン名
作成するメールサーバのドメイン名です。
今回は、事前に用意した独自ドメインを利用します。
リソース4: メールエイリアス名
メールサーバに作成するメールエイリアス名です。
今回は"handson-cli"とします。
リソース5: メール転送先アドレス
メールサーバに作成するメール転送先です。
今回は、事前に用意したメールアドレスを利用します。
パラメータの指定¶
作業に必要なパラメータを変数に格納をします。
0.2. ユーザデータファイル名の指定¶
ユーザデータの名称を指定します。
変数の設定:
USER_DATA_NAME='handson-cli-lightsail-user_data'
変数の設定:
FILE_USER_DATA="${DIR_USER_DATA}/${USER_DATA_NAME}.bash" \ && echo ${FILE_USER_DATA}
結果(例):
${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash
0.3. メールドメイン名の指定¶
メールドメイン名を指定します。
変数の設定:
DIR_TMP="${HOME}/environment/tmp-handson-cli-lightsail"
変数の設定:
FILE_TMP_DOMAIN="${DIR_TMP}/sub_domain.tmp" \ && echo ${FILE_TMP_DOMAIN}
結果(例):
${HOME}/environment/tmp-handson-cli-lightsail/sub_domain.tmp
コマンド:
source ${FILE_TMP_DOMAIN}
変数の設定:
MAIL_DOMAIN_NAME="${DOMAIN_SUB_FULLNAME}" \ && echo ${MAIL_DOMAIN_NAME}
結果(例):
handson-cli-lightsail.example.jp
0.4. MXホストの指定¶
MXホスト名を指定します。
変数の設定:
HOST_NAME='mx01'
変数の設定:
MX_HOST_NAME="${HOST_NAME}.${MAIL_DOMAIN_NAME}" \ && echo ${MX_HOST_NAME}
0.6. メール転送先の指定¶
メール転送先を指定します。
変数の設定:
FILE_TMP_MAIL_ADDRESS="${DIR_TMP}/mail_address.tmp" \ && echo ${FILE_TMP_MAIL_ADDRESS}
結果(例):
${HOME}/environment/tmp-handson-cli-lightsail/mail_address.tmp
コマンド:
source ${FILE_TMP_MAIL_ADDRESS}
変数の設定:
MAIL_ADDRESS_FORWARD="${MAIL_ADDRESS}" \ && echo "${MAIL_ADDRESS_FORWARD}"
結果(例):
パラメータの保存¶
設定されている変数の保存先となるファイル名を指定します。
変数の設定:
DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli-lightsail" FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-user_data-amazonlinux-create-expand-postfix_alias-sshd_port-amazonlinux1.env" \ && echo ${FILE_PARAMETER}
結果(例):
${HOME}/tmp/parameter-handson-cli-lightsail/2020-02-10-user_data-amazonlinux-create-expand-postfix_alias-sshd_port-amazonlinux1.env
各変数に正しいパラメータ値が格納されていることを確認しながら保存します。
変数の確認:
cat << EOF > ${FILE_PARAMETER} # 0.1. DIR_USER_DATA:"${HOME}/environment/conf-handson-cli-lightsail" DIR_USER_DATA="${DIR_USER_DATA}" # 0.2. FILE_USER_DATA:"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash" FILE_USER_DATA="${FILE_USER_DATA}" # 0.3. MAIL_DOMAIN_NAME:"handson-cli-lightsail.example.jp" MAIL_DOMAIN_NAME="${MAIL_DOMAIN_NAME}" # 0.4. MX_HOST_NAME:"mx01.handson-cli-lightsail.example.jp" MX_HOST_NAME="${MX_HOST_NAME}" # 0.5. MAIL_ALIAS_NAME:"handson-cli" MAIL_ALIAS_NAME="${MAIL_ALIAS_NAME}" # 0.6. MAIL_ADDRESS_FORWARD:"test@example.com" MAIL_ADDRESS_FORWARD="${MAIL_ADDRESS_FORWARD}" # 0.7. PORT_SSHD:"22022" PORT_SSHD="${PORT_SSHD}" EOF cat ${FILE_PARAMETER}
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
タスクの実施¶
- タスク標準時間
6分
1. 前処理¶
処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: ユーザデータ用ディレクトリ"${HOME}/environment/conf-handson-cli-lightsail"が存在する。
「ユーザデータ用ディレクトリ"${HOME}/environment/conf-handson-cli-lightsail"が存在する。」ことを確認します。
コマンド:
ls -d ${DIR_USER_DATA}
結果(例):
${HOME}/environment/conf-handson-cli-lightsail
事前条件2: ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在しない。
「ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在しない。」ことを確認します。
コマンド:
! ls ${FILE_USER_DATA}
結果(例):
ls: cannot access ${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash: No such file or directory
2. 主処理¶
ユーザデータファイルの作成¶
変数の確認:
cat << ETX # FILE_USER_DATA:"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash" FILE_USER_DATA="${FILE_USER_DATA}" # PORT_SSHD:"22022" PORT_SSHD="${PORT_SSHD}" # MAIL_DOMAIN_NAME:"handson-cli-lightsail.example.jp" MAIL_DOMAIN_NAME="${MAIL_DOMAIN_NAME}" # MAIL_ALIAS_NAME:"handson-cli" MAIL_ALIAS_NAME="${MAIL_ALIAS_NAME}" # MAIL_ADDRESS_FORWARD:"test@example.com" MAIL_ADDRESS_FORWARD="${MAIL_ADDRESS_FORWARD}" ETX
コマンド:
cat << EOF1 > ${FILE_USER_DATA} #!/bin/bash # configure sshd cat << EOF >> /etc/ssh/sshd_config Port ${PORT_SSHD} EOF service sshd restart # yum yum update -y # sendmail service sendmail stop \\ && chkconfig sendmail off # postfix yum install postfix -y \\ && alternatives --set mta /usr/sbin/sendmail.postfix \\ && chkconfig postfix on sed -i.org /etc/postfix/main.cf \\ -e "/#myhostname = virtual.domain.tld/a myhostname = ${MX_HOST_NAME}" \\ -e "/#mydomain = domain.tld/a mydomain = ${MAIL_DOMAIN_NAME}" \\ -e "/#inet_interfaces = all/ s/^#//" \\ -e "/inet_interfaces = local/ s/^/#/" \\ -e '/^mydestination/ s/^/#/' \\ -e '/#mydestination .* \$mydomain$/ s/^#//' \\ -e "/alias_maps = hash:\/etc\/aliases/ s/alias_maps = hash:\/etc\/aliases/alias_maps = hash:\/etc\/postfix\/aliases/" \\ -e "/alias_database = hash:\/etc\/aliases/ s/alias_database = hash:\/etc\/aliases/alias_database = hash:\/etc\/postfix\/aliases/" \\ && postfix check # create private aliases mkdir -p /etc/postfix/config-aliases echo "${MAIL_ALIAS_NAME}: ${MAIL_ADDRESS_FORWARD}" > /etc/postfix/config-aliases/aliases mv /etc/postfix/aliases /etc/postfix/aliases.origin cd /etc/postfix/ && ln -s ./config-aliases/aliases # aliases newaliases # start postfix service postfix start EOF1 cat ${FILE_USER_DATA}
結果(例):
#!/bin/bash # configure sshd cat << EOF >> /etc/ssh/sshd_config Port 22022 EOF service restart sshd # yum yum update -y # sendmail service sendmail stop && chkconfig sendmail off # postfix yum install postfix -y && alternatives --set mta /usr/sbin/sendmail.postfix && chkconfig postfix on sed -i.org /etc/postfix/main.cf -e "/#myhostname = virtual.domain.tld/a myhostname = mx01.handson-cli-lightsail.example.jp" -e "/#mydomain = domain.tld/a mydomain = handson-cli-lightsail.example.jp" -e "/#inet_interfaces = all/ s/^#//" -e "/inet_interfaces = local/ s/^/#/" -e '/^mydestination/ s/^/#/' -e '/#mydestination .* $mydomain$/ s/^#//' -e "/alias_maps = hash:/etc/aliases/ s/alias_maps = hash:/etc/aliases/alias_maps = hash:/etc/postfix/aliases/" -e "/alias_database = hash:/etc/aliases/ s/alias_database = hash:/etc/aliases/alias_database = hash:/etc/postfix/aliases/" && postfix check # create private aliases mkdir -p /etc/postfix/config-aliases echo "handson-cli: test@example.com" > /etc/postfix/config-aliases/aliases mv /etc/postfix/aliases /etc/postfix/aliases.origin cd /etc/postfix/ && ln -s ./config-aliases/aliases # aliases newaliases # start postfix service postfix start
3. 後処理¶
完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在する。
「ユーザデータファイル名"${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash"が存在する。」ことを確認します。
コマンド:
ls ${FILE_USER_DATA}
結果(例):
${HOME}/environment/conf-handson-cli-lightsail/handson-cli-lightsail-user_data.bash