1.1. スクリプトの作成 (cloudwatch-sample-app.sh)¶
作業の目的 [why]¶
スクリプト名"cloudwatch-sample-app.sh"を作成します。
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在する。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
スクリプト用ディレクトリ"${HOME}/environment/conf-handson-cli-cloudwatch-custom"が存在する。
- 事前条件2
スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在しない。
作業対象 [what]¶
スクリプト
標準時間(合計)¶
8分
パラメータ設定¶
- パラメータ設定の標準時間
2分
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: スクリプト用ディレクトリ
今回は"${HOME}/environment/conf-handson-cli-cloudwatch-custom"をスクリプト用ディレクトリとします。
ディレクトリが存在することを確認します。
コマンド:
ls -d ${HOME}/environment/conf-handson-cli-cloudwatch-custom
結果(例:存在する場合):
${HOME}/environment/conf-handson-cli-cloudwatch-custom
存在しない場合は作成します。
コマンド:
mkdir -p ${HOME}/environment/conf-handson-cli-cloudwatch-custom
リソース2: スクリプトファイル名
作成するスクリプトのファイル名です。
今回は"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"とします。
リソース3: CloudWatch名前空間
確認するCloudWatchメトリックの名前空間です。
今回は"HandsonCliApplication"とします。
リソース4: CloudWatchメトリック名 (実行数)
CloudWatchメトリック名です。
今回は"Invocations"とします。
リソース5: CloudWatchメトリック名 (エラー数)
CloudWatchメトリック名です。
今回は"Errors"とします。
リソース6: CloudWatchディメンション名
CloudWatchメトリックの対象となるディメンション名です。
今回は"HandsonCliFunction"とします。
リソース7: CloudWatchメトリック単位
CloudWatchメトリックの単位です。
今回は"Count"とします。
パラメータの指定¶
作業に必要なパラメータを変数に格納をします。
0.1. スクリプト用ディレクトリの指定¶
変数の設定:
DIR_CODE_SCRIPT="${HOME}/environment/conf-handson-cli-cloudwatch-custom"
0.2. スクリプトファイル名の指定¶
スクリプトの名称を指定します。
変数の設定:
CODE_SCRIPT_NAME='cloudwatch-sample-app.sh'
変数の設定:
FILE_CODE_SCRIPT="${DIR_CODE_SCRIPT}/${CODE_SCRIPT_NAME}" \ && echo ${FILE_CODE_SCRIPT}
結果(例):
${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh
0.4. CloudWatchメトリック名の指定 (実行数)¶
CloudWatchディメンション名を指定します。
変数の設定:
CLOUDWATCH_METRIC_NAME_INVOCATIONS="Invocations"
0.5. CloudWatchメトリック名の指定 (エラー数)¶
CloudWatchディメンション名を指定します。
変数の設定:
CLOUDWATCH_METRIC_NAME_ERRORS="Errors"
0.6. CloudWatchディメンション名の指定¶
CloudWatchディメンション名を指定します。
変数の設定:
CLOUDWATCH_DIMENSION_NAME="HandsonCliFunction"
パラメータの保存¶
設定されている変数の保存先となるファイル名を指定します。
変数の設定:
DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli-cloudwatch-custom" FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-code_script-cloudwatch_custom_metrics-create.env" \ && echo ${FILE_PARAMETER}
結果(例):
${HOME}/tmp/parameter-handson-cli-cloudwatch-custom/2020-03-02-code_script-cloudwatch_custom_metrics-create.env
各変数に正しいパラメータ値が格納されていることを確認しながら保存します。
変数の確認:
cat << EOF > ${FILE_PARAMETER} # 0.1. DIR_CODE_SCRIPT:"${HOME}/environment/conf-handson-cli-cloudwatch-custom" DIR_CODE_SCRIPT="${DIR_CODE_SCRIPT}" # 0.2. FILE_CODE_SCRIPT:"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh" FILE_CODE_SCRIPT="${FILE_CODE_SCRIPT}" # 0.3. CLOUDWATCH_NAMESPACE:"HandsonCliApplication' CLOUDWATCH_NAMESPACE='${CLOUDWATCH_NAMESPACE}' # 0.4. CLOUDWATCH_METRIC_NAME_INVOCATIONS:"Invocations' CLOUDWATCH_METRIC_NAME_INVOCATIONS='${CLOUDWATCH_METRIC_NAME_INVOCATIONS}' # 0.5. CLOUDWATCH_METRIC_NAME_ERRORS:"Errors' CLOUDWATCH_METRIC_NAME_ERRORS='${CLOUDWATCH_METRIC_NAME_ERRORS}' # 0.6. CLOUDWATCH_DIMENSION_NAME:"HandsonCliFunction' CLOUDWATCH_DIMENSION_NAME='${CLOUDWATCH_DIMENSION_NAME}' # 0.7. CLOUDWATCH_METRIC_UNIT:"Count' CLOUDWATCH_METRIC_UNIT='${CLOUDWATCH_METRIC_UNIT}' EOF cat ${FILE_PARAMETER}
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
タスクの実施¶
課題
(未検証)
- タスク標準時間
6分
1. 前処理¶
処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: スクリプト用ディレクトリ"${HOME}/environment/conf-handson-cli-cloudwatch-custom"が存在する。
「スクリプト用ディレクトリ"${HOME}/environment/conf-handson-cli-cloudwatch-custom"が存在する。」ことを確認します。
コマンド:
ls -d ${DIR_CODE_SCRIPT}
結果(例):
${HOME}/environment/conf-handson-cli-cloudwatch-custom
事前条件2: スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在しない。
「スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在しない。」ことを確認します。
コマンド:
! ls ${FILE_CODE_SCRIPT}
結果(例):
ls: cannot access ${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh: No such file or directory
2. 主処理¶
スクリプトファイルの作成¶
変数の確認:
cat << ETX # FILE_CODE_SCRIPT="${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh" FILE_CODE_SCRIPT="${FILE_CODE_SCRIPT}" # CLOUDWATCH_NAMESPACE:"HandsonCliApplication" CLOUDWATCH_NAMESPACE="${CLOUDWATCH_NAMESPACE}" # CLOUDWATCH_METRIC_NAME_INVOCATIONS:"Invocations" CLOUDWATCH_METRIC_NAME_INVOCATIONS="${CLOUDWATCH_METRIC_NAME_INVOCATIONS}" # CLOUDWATCH_METRIC_NAME_ERRORS:"Errors" CLOUDWATCH_METRIC_NAME_ERRORS="${CLOUDWATCH_METRIC_NAME_ERRORS}" # CLOUDWATCH_DIMENSION_NAME:"HandsonCliFunction" CLOUDWATCH_DIMENSION_NAME="${CLOUDWATCH_DIMENSION_NAME}" # CLOUDWATCH_METRIC_UNIT:"Count" CLOUDWATCH_METRIC_UNIT="${CLOUDWATCH_METRIC_UNIT}" ETX
コマンド:
cat << EOF > ${FILE_CODE_SCRIPT} #!/bin/sh # 実行の前提: CloudWatch:PutMetricDataアクション権限のある # インスタンスプロファイルが付与されているEC2インスタンス if [ ! "\$1" ]; then echo "Usage: \$0 csv_file" exit fi set -u readonly FILE_DATA="\$1" readonly export AWS_DEFAULT_REGION='ap-northeast-1' readonly CLOUDWATCH_NAMESPACE='${CLOUDWATCH_NAMESPACE}' readonly CLOUDWATCH_METRIC_NAME_INVOCATIONS='${CLOUDWATCH_METRIC_NAME_INVOCATIONS}' readonly CLOUDWATCH_METRIC_NAME_ERRORS='${CLOUDWATCH_METRIC_NAME_ERRORS}' readonly CLOUDWATCH_DIMENSION_NAME='${CLOUDWATCH_DIMENSION_NAME}' readonly CLOUDWATCH_METRIC_UNIT='${CLOUDWATCH_METRIC_UNIT}' while read line; do timestamp=\$(echo \$line | cut -d "," -f 1) invocations=\$(echo \$line | cut -d "," -f 2) errors=\$(echo \$line | cut -d "," -f 3) aws cloudwatch put-metric-data \\ --namespace \${CLOUDWATCH_NAMESPACE} \\ --metric-name \${CLOUDWATCH_METRIC_NAME_INVOCATIONS} \\ --dimensions FunctionName=\${CLOUDWATCH_DIMENSION_NAME} \\ --value \${invocations} \\ --unit \${CLOUDWATCH_METRIC_UNIT} \\ --timestamp \${timestamp} aws cloudwatch put-metric-data \\ --namespace \${CLOUDWATCH_NAMESPACE} \\ --metric-name \${CLOUDWATCH_METRIC_NAME_ERRORS} \\ --dimensions FunctionName=\${CLOUDWATCH_DIMENSION_NAME} \\ --value \${errors} \\ --unit \${CLOUDWATCH_METRIC_UNIT} \\ --timestamp \${timestamp} done < \${FILE_DATA} EOF cat ${FILE_CODE_SCRIPT}
結果(例):
#!/bin/sh # 実行の前提: CloudWatch:PutMetricDataアクション権限のある # インスタンスプロファイルが付与されているEC2インスタンス if [ ! "$1" ]; then echo "Usage: $0 csv_file" exit fi set -u readonly FILE_DATA="$1" readonly export AWS_DEFAULT_REGION='ap-northeast-1' readonly CLOUDWATCH_NAMESPACE='HandsonCliApplication' readonly CLOUDWATCH_METRIC_NAME_INVOCATIONS='Invocations' readonly CLOUDWATCH_METRIC_NAME_ERRORS='Errors' readonly CLOUDWATCH_DIMENSION_NAME='HandsonCliFunction' readonly CLOUDWATCH_METRIC_UNIT='Count' while read line; do timestamp=$(echo $line | cut -d "," -f 1) invocations=$(echo $line | cut -d "," -f 2) errors=$(echo $line | cut -d "," -f 3) echo "aws cloudwatch put-metric-data \ --namespace ${CLOUDWATCH_NAMESPACE} \ --metric-name ${CLOUDWATCH_METRIC_NAME_INVOCATIONS} \ --dimensions FunctionName=${CLOUDWATCH_DIMENSION_NAME} \ --value ${invocations} \ --unit ${CLOUDWATCH_METRIC_UNIT} \ --timestamp ${timestamp}" echo "aws cloudwatch put-metric-data \ --namespace ${CLOUDWATCH_NAMESPACE} \ --metric-name ${CLOUDWATCH_METRIC_NAME_ERRORS} \ --dimensions FunctionName=${CLOUDWATCH_DIMENSION_NAME} \ --value ${errors} \ --unit ${CLOUDWATCH_METRIC_UNIT} \ --timestamp ${timestamp}" done < ${FILE_DATA}
3. 後処理¶
完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在する。
「スクリプトファイル名"${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh"が存在する。」ことを確認します。
コマンド:
ls ${FILE_CODE_SCRIPT}
結果(例):
${HOME}/environment/conf-handson-cli-cloudwatch-custom/cloudwatch-sample-app.sh