我想使用 AWS Lambda 自动化执行我 AWS 账户中的任务。该如何进行设置?
简短描述
许多 AWS 服务都可以与 Lambda 集成以调用函数,从而执行计划或响应某些事件。有关可以与 Lambda 集成的 AWS 服务的信息,请参阅将 AWS Lambda 与其他服务一起使用。
本文演示了使用 Lambda 自动化执行任务的两种最常用 AWS 服务的示例:
有关更多示例,请参阅将 Lambda 用于计划的事件和将 Lambda 与 Amazon S3 结合使用。
解决方法
注意:EventBridge 和 Amazon S3 可能会自动更新 Lambda 函数的执行角色并使用基于资源的策略添加需要的访问权限。但并非所有 AWS 服务都会这样做。如果需要将 Lambda 与其他 AWS 服务集成,请务必手动添加所需的权限。
创建一个 Lambda 函数以将输入记录到 Amazon CloudWatch Logs
注意:您创建的函数将是您配置的事件的目标。请根据您的使用案例,将示例函数代码替换为您要自动化执行的任务的代码。
1. 在 Lambda 控制台中,选择 Create function(创建函数)。这时将打开 Create function(创建函数)页面,显示 Author from scratch(从头开始创建)选项。
2. 在 Basic information(基本信息)下,添加以下配置:
对于 Name(名称),输入函数的名称。
对于 Runtime(运行时),选择 Node.js 14.x。
3. 在 Permissions(权限)下,选择 Change default execution role(更改默认执行角色)。 然后执行下面的任意一项操作:
如果您是初次使用 Lambda,则选择 Create a new role with basic Lambda permissions(创建具有基本 Lambda 权限的新角色)。
如果您已创建了要使用的 Lambda 执行角色,则选择 Use an existing role(使用现有角色)。
如果要使用 AWS 托管策略模板创建新的执行角色,请选择Create a new role from AWS policy templates(从 AWS 策略模板创建新角色)。然后输入名称并选择策略模板。
4. 选择创建函数。
5. 在 Configuration(配置)窗格的 Function code(函数代码)下,打开 index.js 文件。然后将下面的示例函数代码复制并粘贴到编辑器窗格:
'use strict';
exports.handler = (event, context, callback) => {
console.log('LogScheduledEvent');
console.log('Received event:', JSON.stringify(event, null, 2));
callback(null, 'Finished');
};
6. 选择 Deploy(部署)。
有关更多信息,请参阅使用控制台创建 Lambda 函数。您还可以通过构建和上传自己的部署软件包或者创建和上传容器镜像来创建 Lambda 函数。
(对于 EventBridge)创建 EventBridge 规则以按计划触发或响应事件
对于计划事件
要按特定时间表自动化执行任务但不进行任何输入,请遵循创建按计划触发的 EventBridge 规则中的说明。务必指定计划以明确您希望自动化执行任务的时间。将您创建的 Lambda 函数添加为将会响应事件触发的目标。
注意:在创建规则后,您的 Lambda 函数将会按您定义的时间表自动调用。如果您使用示例函数代码,则会按计划将来自 Lambda 的日志流填充到 CloudWatch。
有关示例,请参阅使用 EventBridge 计划 Lambda 函数。
对于服务事件
要自动化执行任务以响应某个 AWS 服务生成的事件,请遵循为 AWS 服务创建规则中的说明。
对于此示例设置,请在创建规则时使用以下配置:
对于 Service Name(服务名称),选择 EC2。
对于 Event Type(事件类型),选择 EC2 Instance State-change Notification(EC2 实例状态更改通知)。
将您创建的 Lambda 函数添加为目标。
注意:创建规则后,每次出现您定义的事件模式时都会调用您的 Lambda 函数。
有关更多信息,请参阅EventBridge 中的事件模式和来自受支持的 AWS 服务的 EventBridge 事件示例。
测试 EventBridge 规则
要测试 EventBridge 规则,请通过停止或启动实例以导致某个 Amazon Elastic Compute Cloud (Amazon EC2) 实例发生状态更改。Lambda 将向 CloudWatch 发送日志流。
有关如何启动 EC2 实例的信息,请参阅启动实例。
注意:您的 AWS 账户可能会产生 EC2 实例费用。如果您仅为此示例创建了一个实例,请务必在完成后终止实例。
有关更多信息,请参阅 Amazon EventBridge 入门。
(对于 Amazon S3)配置 S3 事件通知以触发 Lambda 函数
要使用 Amazon S3 事件通知触发您的 Lambda 函数,请遵循启用和配置事件通知中的说明。
对于此示例设置,请在创建 S3 事件通知时使用以下配置:
对于 Event types(事件类型),选择 All object create events(所有对象都创建事件)复选框。
对于 Destination(目的地),选择 Lambda function(Lambda 函数)。
在 Lambda function(Lambda 函数)下拉列表中,选择您之前创建的 Lambda 函数。
有关如何创建 S3 存储桶的信息,请参阅创建您的第一个 S3 存储桶。
测试 Amazon S3 事件通知
要测试设置,请将一个对象上传到 S3 存储桶。如果您配置了前缀或后缀筛选条件,请确保该对象具有正确的前缀或后缀。
上传完成后,将会调用您的 Lambda 函数。如果您使用示例函数代码,则来自 Lambda 的日志流将会填充到 CloudWatch。这些 CloudWatch 日志包含事件对象中的元数据,如 S3 存储桶名称和对象名称。
有关示例,请参阅将 Lambda 与 Amazon S3 结合使用。
相关信息
如何在我的 EC2 实例状态更改时收到自定义电子邮件通知?