6.2. S3バケットへの通知設定のテスト (SNS)¶
作業の目的 [why]¶
S3バケット"sesincoming-<ドメイン名>"に通知設定をテストする。
作業対象 [what]¶
- S3バケット
標準時間¶
8分
前提条件¶
作業環境条件 [where]¶
本作業は、以下の作業環境で行います。
作業環境条件1: OSとバージョン
Amazon Linuxの以下のバージョンで動作確認済
コマンド:
cat /etc/issue | head -1
結果(例):
Amazon Linux AMI release 2016.09
作業環境条件2: シェルとバージョン
bashの以下のバージョンで動作確認済
コマンド:
bash --version -v | head -1
結果(例):
GNU bash, バージョン 4.2.46(1)-release (x86_64-redhat-linux-gnu)
作業環境条件3: AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.11.117
コマンド:
aws --version
結果(例):
aws-cli/1.11.166 Python/2.7.12 Linux/4.4.11-23.53.amzn1.x86_64 botocore/1.7.24
バージョンが古い場合は最新版に更新しましょう。
コマンド:
sudo -H pip install -U awscli
開始条件¶
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: PUT用ファイル
- 通知テストでS3バケットに転送するファイルの名称です。
リソース2: S3バケット名
- 通知テストするS3バケットの名称です。
- 今回は"sesincoming-<ドメイン名>"とします。
タスクの実施¶
0. パラメータの指定¶
まず変数の確認をします。
変数の確認:
cat << ETX 0.a. AWS_DEFAULT_PROFILE: actual: ${AWS_DEFAULT_PROFILE} expect: <S3のフル権限を許可されているプロファイル> 0.b. AWS_DEFAULT_REGION: actual: ${AWS_DEFAULT_REGION} expect: ap-northeast-1 0.1. FILE_INPUT: actual: ${FILE_INPUT} expect: z.txt 0.2. S3_BUCKET_NAME: actual: ${S3_BUCKET_NAME} expect: sesincoming-<ドメイン名> ETX
変数が入っていない、適切でない場合は、それぞれの手順番号について作業を行います。
0.a. プロファイルの指定¶
プロファイルの一覧を確認します。
コマンド:
cat ~/.aws/credentials \ | grep '\[' \ | sed 's/\[//g' | sed 's/\]//g'
結果(例):
iamFull-prjz-mbpr13 <S3のフル権限を許可されているプロファイル>
変数の設定:
export AWS_DEFAULT_PROFILE='<S3のフル権限を許可されているプロファイル>'
再確認¶
設定されている変数の内容を再確認します。
変数の確認:
cat << ETX 0.a. AWS_DEFAULT_PROFILE: actual: ${AWS_DEFAULT_PROFILE} expect: <S3のフル権限を許可されているプロファイル> 0.b. AWS_DEFAULT_REGION: actual: ${AWS_DEFAULT_REGION} expect: ap-northeast-1 0.1. FILE_INPUT: actual: ${FILE_INPUT} expect: z.txt 0.2. S3_BUCKET_NAME: actual: ${S3_BUCKET_NAME} expect: sesincoming-<ドメイン名> ETX
1. 前処理¶
1.2. 処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: PUTするファイルが存在する。
「PUTするファイルが存在する。」ことを確認します。
コマンド:
ls ${FILE_INPUT}
事前条件2: S3バケット"sesincoming-<ドメイン名>"が存在する。
「S3バケット"sesincoming-<ドメイン名>"が存在する。」ことを確認します。
コマンド:
aws s3api list-buckets \ --query "Buckets[?Name == \`${S3_BUCKET_NAME}\`].Name"
結果(例):
[ "sesincoming-<ドメイン名>" ]
2. 主処理¶
S3バケットへのファイル転送¶
コマンド:
aws s3 cp ${FILE_INPUT} s3://${S3_BUCKET_NAME}/
結果(例):
upload: z.txt to s3://sesincoming-<ドメイン名>/z.txt
3. 後処理¶
3.1. 状態確認に必要な情報の取得¶
転送ファイルの確認
コマンド:
aws s3 ls s3://${S3_BUCKET_NAME}/
結果(例):
2017-10-09 01:23:45 0 z.txt
3.2. 完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: S3バケットからの通知がされる。
「S3バケットからの通知がされる。」ことを確認します。
From: | no-reply@sns.amazonaws.com |
---|---|
Subject: | Amazon S3 Notification |
本文(例):
{"Records":[{"eventVersion":"2.0","eventSource":"aws:s3","awsRegion":"ap-northeast-1","eventTime":"2017-10-09T01:23:45.678Z","eventName":"ObjectCreated:Put","userIdentity":{"principalId":"AWS:AIDAXXXXXXXXXXXXXXXXX"},"requestParameters":{"sourceIPAddress":"xxx.xxx.xxx.xxx"},"responseElements":{"x-amz-request-id":"xxxxxxxxxxxxxxxx","x-amz-id-2":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="},"s3":{"s3SchemaVersion":"1.0","configurationId":"s3:ObjectCreated-All-sesincoming-2017-10-09","bucket":{"name":"sesincoming-<ドメイン名>","ownerIdentity":{"principalId":"xxxxxxxxxxxxx"},"arn":"arn:aws:s3:::sesincoming-<ドメイン名>"},"object":{"key":"z.txt","size":0,"eTag":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","sequencer":"xxxxxxxxxxxxxxxxxx"}}}]} -- If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe: https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:sesincoming-2017-10-09:03d2716c-xxxx-xxxx-xxxx-xxxxxxxxxxxx&Endpoint=<SNS通知エンドポイント名> Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support
3.3. 後処理に必要な作業¶
転送ファイルの削除
コマンド:
aws s3 rm s3://${S3_BUCKET_NAME}/${FILE_INPUT}
結果(例):
delete: s3://sesincoming-<ドメイン名>/z.txt
ファイルの削除
コマンド:
rm ${FILE_INPUT}
結果(例):
(出力なし)