ハンズオン(簡易版): S3基礎 通知

5.1. S3バケット通知ドキュメントの作成: (Lambda: handson-cli-s3-notification-XXXXXXXXXXXX)

目的

S3バケット"handson-cli-s3-notification-XXXXXXXXXXXX"にLAMBDA関数"handson-cli-s3-function"への通知設定を作成します。

パラメータの指定

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

0. リージョンの指定

リージョンを指定します。

環境変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

1. S3バケット名

S3バケット名を指定します。

変数の設定:

S3_BUCKET_PREFIX='handson-cli-s3-notification'

コマンド:

AWS_ID=$( \
  aws sts get-caller-identity \
    --query 'Account' \
    --output text \
) \
  && echo ${AWS_ID}

結果(例):

XXXXXXXXXXXX

変数の設定:

S3_BUCKET_NAME="${S3_BUCKET_PREFIX}-${AWS_ID}" \
  && echo ${S3_BUCKET_NAME}

結果(例):

handson-cli-s3-notification-XXXXXXXXXXXX

2. LAMBDA関数名

LAMBDA関数名の指定します。

変数の設定:

LAMBDA_FUNCTION_NAME='handson-cli-s3-function'

3. S3バケット通知設定ドキュメント用ディレクトリ

S3バケット通知設定ドキュメント用ディレクトリを指定します。

変数の設定:

DIR_S3_BUCKET_NOTIFICATION_DOC="${HOME}/environment/conf-handson-cli-s3"

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

コマンド:

ls -d ${HOME}/environment/conf-handson-cli-s3

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

${HOME}/environment/conf-handson-cli-s3

存在しない場合は作成します。

コマンド:

mkdir -p ${HOME}/environment/conf-handson-cli-s3

4. S3バケット通知設定ドキュメントファイル

S3バケット通知設定ドキュメントファイルを指定します。

変数の設定:

FILE_S3_BUCKET_NOTIFICATION_DOC="${DIR_S3_BUCKET_NOTIFICATION_DOC}/${S3_BUCKET_NAME}-s3-bucket-notification.json" \
  && echo ${FILE_S3_BUCKET_NOTIFICATION_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-s3/handson-cli-s3-notification-XXXXXXXXXXXX-s3-bucket-notification.json

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

変数の確認:

cat << END

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

  # 1. S3_BUCKET_NAME:"handson-cli-s3-notification-XXXXXXXXXXXX"
       S3_BUCKET_NAME="${S3_BUCKET_NAME}"
  # 2. LAMBDA_FUNCTION_NAME:"handson-cli-s3-function"
       LAMBDA_FUNCTION_NAME="${LAMBDA_FUNCTION_NAME}"
  # 3. DIR_S3_BUCKET_NOTIFICATION_DOC:"${HOME}/environment/conf-handson-cli-s3"
       DIR_S3_BUCKET_NOTIFICATION_DOC="${DIR_S3_BUCKET_NOTIFICATION_DOC}"
  # 4. FILE_S3_BUCKET_NOTIFICATION_DOC:"${HOME}/environment/conf-handson-cli-s3/handson-cli-s3-notification-XXXXXXXXXXXX-s3-bucket-notification.json"
       FILE_S3_BUCKET_NOTIFICATION_DOC="${FILE_S3_BUCKET_NOTIFICATION_DOC}"

END

手順

LAMBDA関数のARNを取得します。

コマンド:

LAMBDA_FUNCTION_ARN=$( \
  aws lambda get-function \
    --function-name ${LAMBDA_FUNCTION_NAME} \
    --query 'Configuration.FunctionArn' \
    --output text \
) \
  && echo ${LAMBDA_FUNCTION_ARN}

結果(例):

arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:handson-cli-s3-function

通知設定ドキュメントファイルを作成します。

変数の確認:

cat << ETX

  # FILE_S3_BUCKET_NOTIFICATION_DOC:"${HOME}/environment/conf-handson-cli-s3/handson-cli-s3-notification-XXXXXXXXXXXX-s3-bucket-notification.json"
    FILE_S3_BUCKET_NOTIFICATION_DOC="${FILE_S3_BUCKET_NOTIFICATION_DOC}"
  # LAMBDA_FUNCTION_ARN:"arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:handson-cli-s3-function"
    LAMBDA_FUNCTION_ARN="${LAMBDA_FUNCTION_ARN}"

ETX

コマンド:

cat << EOF > ${FILE_S3_BUCKET_NOTIFICATION_DOC}
{
  "LambdaFunctionConfigurations": [
    {
      "Id": "s3:ObjectCreated-lambda",
      "LambdaFunctionArn": "${LAMBDA_FUNCTION_ARN}",
      "Events": [
        "s3:ObjectCreated:*"
      ]
    }
  ]
}
EOF

cat ${FILE_S3_BUCKET_NOTIFICATION_DOC}

結果(例):

{
  "LambdaFunctionConfigurations": [
    {
      "Id": "s3:ObjectCreated-lambda",
      "LambdaFunctionArn": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:handson-cli-s3-function",
      "Events": [
        "s3:ObjectCreated:*"
      ]
    }
  ]
}

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド:

cat ${FILE_S3_BUCKET_NOTIFICATION_DOC} \
  |  python3 -m json.tool \
  > /dev/null

結果(例):

(出力なし)

注釈

エラーが出力されなければOKです。

完了確認

「S3バケット通知設定ドキュメントファイル"${HOME}/environment/conf-handson-cli-s3/handson-cli-s3-notification-XXXXXXXXXXXX-s3-bucket-notification.json"が存在する。」ことを確認します。

コマンド:

ls ${FILE_S3_BUCKET_NOTIFICATION_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-s3/handson-cli-s3-notification-XXXXXXXXXXXX-s3-bucket-notification.json