- SESのルール作成
前提条件
SESへの権限
SESに対してフル権限があること。
Lambdaへの権限
get-functionする権限があること。
AWS CLI
以下のバージョンで動作確認済
- AWS CLI 1.10.63
コマンド
aws --version
結果(例)
aws-cli/1.10.63 Python/2.7.11 Darwin/15.6.0 botocore/1.4.53
バージョンが古い場合は最新版に更新しましょう。
コマンド
sudo -H pip install -U awscli
- 準備
=======
0.1. リージョンの決定
変数の設定
export AWS_DEFAULT_REGION='us-west-2'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
変数の確認
aws configure list
結果(例)
Name Value Type Location
---- ----- ---- --------
profile lambdaFull-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region us-west-2 env AWS_DEFAULT_REGION
0.3. ルールセット名の指定
変数の設定
SES_RULE_SET_NAME='default-rule-set'
0.4. ドメインの決定
変数の設定
SES_IDENTITY='<SESで利用するドメイン名>'
- 事前作業
===========
1.1. LAMBDA関数のARNの取得
変数の設定
LAMBDA_FUNC_ARN=$( \
aws lambda get-function \
--function-name ${LAMBDA_FUNC_NAME} \
--query 'Configuration.FunctionArn' \
--output text \
) \
&& echo ${LAMBDA_FUNC_ARN}
結果(例)
arn:aws:lambda:us-west-2:XXXXXXXXXXXX:function:rule-inbound-ses-spam-filter-python-20160912
1.2. 受信アドレスの決定
変数の設定
SES_RECIPIENT="spa@${SES_IDENTITY}" \
&& echo ${SES_RECIPIENT}
1.3. ルール名の決定
変数の設定
SES_RULE_NAME="rule-inbound-spam-filter-$( date +%Y%m%d )"
同名のルールが存在しないことを確認します。
コマンド
aws ses describe-receipt-rule \
--rule-set-name ${SES_RULE_SET_NAME} \
--rule-name ${SES_RULE_NAME}
結果(例)
An error occurred (RuleDoesNotExist) when calling the DescribeReceiptRule operation: Rule does not exist: rule-inbound-spam-filter-20160912
1.4. ルールドキュメントの作成
変数の設定
FILE_INPUT="${SES_RULE_NAME}-rule.json"
LAMBDA_INVOCATION_TYPE='RequestResponse'
変数の確認
cat << ETX
FILE_INPUT: ${FILE_INPUT}
SES_RULE_NAME: ${SES_RULE_NAME}
SES_RECIPIENT: ${SES_RECIPIENT}
LAMBDA_FUNC_ARN: ${LAMBDA_FUNC_ARN}
LAMBDA_INVOCATION_TYPE: ${LAMBDA_INVOCATION_TYPE}
ETX
ルールの作成
cat << EOF > ${FILE_INPUT}
{
"Name": "${SES_RULE_NAME}",
"Enabled": true,
"TlsPolicy": "Optional",
"Recipients": [
"${SES_RECIPIENT}"
],
"Actions": [
{
"LambdaAction": {
"FunctionArn": "${LAMBDA_FUNC_ARN}",
"InvocationType": "${LAMBDA_INVOCATION_TYPE}"
}
}
],
"ScanEnabled": true
}
EOF
cat ${FILE_INPUT}
JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。
コマンド
jsonlint -q ${FILE_INPUT}
エラーが出力されなければOKです。
- ルールの作成
===============
変数の確認
cat << ETX
SES_RULE_SET_NAME: ${SES_RULE_SET_NAME}
SES_RULE_NAME: ${SES_RULE_NAME}
FILE_INPUT: ${FILE_INPUT}
ETX
コマンド
aws ses create-receipt-rule \
--rule-set-name ${SES_RULE_SET_NAME} \
--rule ${SES_RULE_NAME} \
--rule file://${FILE_INPUT}
結果(例)
(戻り値なし)
- 事後作業
===========
コマンド
aws ses describe-receipt-rule \
--rule-set-name ${SES_RULE_SET_NAME} \
--rule-name ${SES_RULE_NAME}
結果(例)
{
"Rule": {
"Name": "rule-inbound-spam-filter-20160912",
"Recipients": [
"spa@example.org"
],
"Enabled": true,
"ScanEnabled": true,
"Actions": [
{
"LambdaAction": {
"InvocationType": "RequestResponse",
"FunctionArn": "arn:aws:lambda:us-west-2:XXXXXXXXXXXX:function:rule-inbound-ses-spam-filter-python-20160912"
}
}
],
"TlsPolicy": "Optional"
}
}