用于在 S3 事件上触发 Lambda 的 Cloudformation 模板

2023-12-23

我想使用 Cloudformation 创建一个 S3 存储桶,每当发生 S3 事件(例如文件创建、文件删除等)时,该存储桶就会触发 Lambda 函数。

根据我的研究,我有我的AWS::Lambda::函数 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#w2ab2c21c10d740c13 and AWS::S3::桶 https://stackoverflow.com/questions/46838980/cloudformation-bucket-policy-statement-is-missing-required-element/46840088#46840088 setup,

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  HandleFileCreation: 
    Type: "AWS::Lambda::Function"
    Properties: 
      ...

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AmazonS3FullAccess
      - arn:aws:iam::aws:policy/AWSLambdaFullAccess
      AssumeRolePolicyDocument:
        ...

  ReportsBucket:
    Type: AWS::S3::Bucket

  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref ReportsBucket
      PolicyDocument:
        ...

我正在看AWS::事件::规则 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#w2ab2c21c10d621c13b4,但该示例仅适用于 EC2,我找不到 S3 的示例

  EventRule: 
    Type: "AWS::Events::Rule"
    Properties: 
      Description: "EventRule"
      EventPattern: 
        source: 
          - "aws.ec2"
        detail-type: 
          - "EC2 Instance State-change Notification"
        detail: 
          state: 
            - "stopping"
      State: "ENABLED"
      Targets: 
        - 
          Arn: 
            Fn::GetAtt: 
              - HandleFileCreation
              - Arn
          Id: TargetFunctionV1
  PermissionForEventsToInvokeLambda: 
    Type: AWS::Lambda::Permission
    Properties: 
      FunctionName: 
        Ref: HandleFileCreation
      Action: "lambda:InvokeFunction"
      Principal: "events.amazonaws.com"
      SourceArn: 
        Fn::GetAtt: 
          - "EventRule"
          - "Arn"

如何编写模板来触发 S3 事件?


这是一个示例,

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html

EncryptionServiceBucket:
  Type: "AWS::S3::Bucket"
  Properties:
    BucketName: !Sub ${User}-encryption-service
    NotificationConfiguration:
      LambdaConfigurations:
        -
          Function: !Ref LambdaDeploymentArn
          Event: "s3:ObjectCreated:*"
          Filter:
            S3Key:
              Rules:
                -
                  Name: suffix
                  Value: zip

我注意到的一个问题是,您需要先创建该函数,然后再为其分配触发器。如果您使用 CF,请确保在为其创建触发器之前创建 lambda 函数。

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于在 S3 事件上触发 Lambda 的 Cloudformation 模板 的相关文章

随机推荐

  • 是否可以在同一页面上运行两个不同版本的ReactJS?

    大家好 我想知道是否可以在同一页面上运行两个版本的 ReactJS 类似于jQuery noConflict 经过一些研究 我发现了两件有趣的事情 两种反应不会成为朋友 虽然我很高兴大家似乎在 2015 年都开始关注 NPM 并且 NPM
  • 调整目录中图像的大小

    我有一个充满图像的目录 我想将其大小调整到原始大小的 60 左右 我该怎么做呢 可以是 Python 或 Perl Cheers Eef 如果您想以编程方式执行此操作 我认为是这种情况 请使用 PIL 来调整大小 例如 newIm im r
  • 使用 Python 填充 CSV 中的空位

    我正在解析 csv 文件来创建图表 我能够毫无问题地执行此操作 除非在单个情况下 每当 csv 文件中存在空槽时 例如 科尔1 科尔2 科尔3 科尔4 科尔545 34 23 98 1866 25 018 52 56 100 文件中的第 2
  • 如何在MinGW中使用Windows API?

    如何使用视窗应用程序接口 http en wikipedia org wiki Windows API in MinGW http en wikipedia org wiki MinGW 每当我这样做的时候 我只是 include
  • 日语和中文中 unicode 代码点的不同表示

    我正在尝试显示与 unicode 0x95E8 对应的字形 该代码点基本上是 CJK 块 中文 日语 韩语 我很难知道这个特定代码点的字形表示对于日语和中文是否可能不同 当我在 JTextArea 中显示 U 95E8 时 我能够在 lin
  • 调整横向内容 UITableviewcell 的大小

    我正在 iPhone SDK 中开发一个应用程序 我想在设备处于横向模式时调整 tableviewcell 的内容大小 在我的 tableviewcell 中 我有一个同步图像和两个标签 在纵向模式下 它看起来非常漂亮 但是当我将设备转向横
  • 如何创建工作区

    我们如何在 Visual Studio Code 中创建工作区 I see File菜单命令用于打开 添加文件夹和保存工作区 但没有用于创建工作区的命令 问题如何在 Visual Studio Code 中创建工作区 https stack
  • GCP 负载均衡器后端状态未知

    我惊呆了 我有一个暂存和生产环境 两种环境具有相同的部署 服务 入口 防火墙规则 并且都服务于200 on 但是 在打开登台环境并配置相同的入口后 登台服务失败并显示Some backend services are in UNKNOWN
  • 无法使用 pg_dump 将表复制到另一个数据库

    我正在尝试将表从一个数据库复制到另一个数据库 不是架构 我在终端中使用的代码如下 pg dump U postgres t OldSchema TableToCopy OldDatabase psql U postgres d NewDat
  • mac 找不到捆绑命令

    我正在使用 ruby 我得到了一个包含一些 ruby 程序的 zip 文件 它说 在文件夹内 运行bundle install安装所需的软件包 当我在终端中运行命令时 它说bundle command not found 有人可以给我详细说
  • 如何将字符串拆分为单词列表?

    如何拆分句子并将每个单词存储在列表中 例如 these are words these are words To split on other delimiters see Split a string by a delimiter in
  • Django - 连续发送输出

    我想开始从 django 视图处理一些文件 并且希望能够在处理文件时将文件名发送到浏览器 有没有办法 简单地 做到这一点 我可能可以使用线程和 ajax 调用来做到这一点 但我现在想要最简单的解决方案 我在一个中找到了我需要的东西answe
  • 在 SceneKit 中,bake 做了什么

    What is the purpose of bake option in SceneKit editor Does it have an impact on performance Type 提供 2 个选项 Ambient Occlus
  • Firebase实时数据库(根据UID获取其他用户信息)与REST

    我有一个使用 Firebase 实时数据库创建的应用程序 并且创建了一些用户 所有用户都使用此处找到的 REST 方法 https firebase google com docs reference rest auth https fir
  • Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思?

    我读过有关node js 和其他服务器 例如Apache 的信息 它们的线程是不同的 我根本不明白线程是什么意思 如果我有一个运行 SQL 来访问数据库的网页 例如一个服务器端页面中的三个不同数据库 这对于 Node js 中的线程意味着什
  • 如何使 DateTimePicker 显示空字符串?

    我希望能够显示一个DateTimePicker它的默认值是空的 即没有日期 例如 我有一个开始日期dtTaskStart和结束日期dtTaskEnd对于任务 但结束日期未知 并且最初未填充 我已经指定了自定义格式yyyy MM dd对于两个
  • 有没有任何工具或技术可以识别打开的结果集

    在 java 应用程序的上下文中使用SQLIte http www sqlite org 为了保存数据 我正在使用Zentus http www zentus com sqlitejdbc JDBC 驱动程序 因此我正在使用java sql
  • 在另一个项目中使用 GKE 中的 Google 容器注册表

    GKE 集群如何从另一个项目托管的容器注册表中提取容器映像 我的项目中有一个 GKE 集群
  • 在 UITableView 中加载图像 url swift 2 的最佳方法

    我想使用 swift 2 创建一个带有图像链接列表的 Ui TableView 例如 var images link1 link2 linkN 我创建一个自定义单元格来显示图像 let cell tableView dequeueReusa
  • 用于在 S3 事件上触发 Lambda 的 Cloudformation 模板

    我想使用 Cloudformation 创建一个 S3 存储桶 每当发生 S3 事件 例如文件创建 文件删除等 时 该存储桶就会触发 Lambda 函数 根据我的研究 我有我的AWS Lambda 函数 http docs aws amaz