LoginSignup
0
0

custom-resource-existing-s3 という Lambda 関数と対応例

Last updated at Posted at 2023-12-24

はじめに

  • 謎の Lambda 関数 *-custom-resource-existing-s3 というのが作られていた
  • 調査した内容を備忘の為記載します
  • 「S3 イベント通知による Lambda 実行」の設定手順も含みます
    • PowerShell による AWS CLI 操作を想定

調査

  • 先述のとおり、作った覚えのない Lambda が存在していました

image.png

  • 画面上の「こちらをクリックしてください」のリンクを辿ると、Serverless Framework で作成したアプリケーションに含まれていました

原因

原因に至る背景

  • Serverles Framework を使用して環境デプロイしていました
  • S3 イベントトリガーで Lambda を起動する必要あり
    • Serverles Framework 内で S3 作成することもできるが、環境の更改などでコマンド「sls remove」実行した際等、S3 上のデータも消えてしまうことを懸念
    • S3 バケットは Serverless Framework 外で管理とした
    • この S3 イベント通知を設定する為、「existing: true」オプションを指定
      → 今回の事象に至った

https://www.serverless.com/framework/docs/providers/aws/events/s3/#using-existing-buckets
image.png

対応

検討案

  • 自動で Lambda が作成されることを許容する ←お奨め
  • 許容できない場合
    • S3 を Serverles Framework 管理対象とする ←嫌
    • 管理対象としない場合
      • 環境デプロイ後に手動で S3 イベントトリガーを追加する

結果

  • なんやかんやで「環境デプロイ後に手動で S3 イベントトリガーを追加する」ことに
  • Serverless Framework の対象 yaml 上からは、関連する events 設定をすべて削除
  • イベント通知したい各 S3、Lambda にて、以下の作業手順で設定
    • Windows PowerShell からの AWS CLI 操作例です

作業手順

1.S3イベント通知の詳細を記載した JSON ファイルを作成

  • 以下の例では、S3上に拡張子「.txt」のファイルが作成された任意のケースを想定
  • ファイル名 s3.json としてローカルに保存
{
    "LambdaFunctionConfigurations": [
        {
            "Id": "任意のイベント名",
            "LambdaFunctionArn": "実行したいLambda関数ARN",
            "Events": [
                "s3:ObjectCreated:*"
            ],
            "Filter": {
                "Key": {
                    "FilterRules": [
                        {
                            "Name": "suffix",
                            "Value": ".txt"
                        }
                    ]
                }
            }
        }
    ]
}

2.Lambda側:S3トリガーを許可

aws lambda add-permission `
    --profile "AWS CLI で操作可能なプロファイルを指定" `
    --function-name "実行したいLambda関数名" `
    --statement-id "s3-put-event" `
    --action "lambda:InvokeFunction" `
    --principal "s3.amazonaws.com" `
    --source-arn "S3バケットARN"

3.S3側:イベント通知設定

aws s3api put-bucket-notification-configuration `
    --profile "AWS CLI で操作可能なプロファイルを指定" `
    --bucket "S3バケット名" `
    --notification-configuration file://ローカル端末上のファイルs3.jsonへのパス

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0