Lambda函数使用 示例 详细说明
示例解析
参考
https://aws.amazon.com/cn/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/ 用Lambda定时关机,开机(AWS)
使用 Lambda 按固定间隔停止和启动 Amazon EC2 实例
目的
节省费用
简要说明
注意:此示例设置是简单的解决方案。有关更可靠的解决方案,请使用 AWS 实例计划程序(https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-instance-scheduler/)。
本示例的主要步骤:
为Lambda 函数创建自定义 (IAM) 策略和执行角色。创建 停止/启动 EC2 实例的 Lambda 函数。创建 按计划触发您的函数的 CloudWatch Events 规则。
注意:您也可以创建当您 AWS 账户中发生某事件时触发的规则。
IAM 策略 和 角色
创建 IAM 策略
将此 JSON 策略文档粘贴到策略编辑器中,比如命名为 iam-policy-for-lambda-of-ec2startstop :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:::"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start",
"ec2:Stop"
],
"Resource": ""
}
]
}
创建IAM角色
为Lambda 创建一个 IAM 角色,比如命名为 role-for-lambda-of-ec2-manage。附加权限策略时,搜索并选择刚创建的 IAM 策略。
创建 停止/启动 EC2 实例的 Lambda 函数 以及 测试函数执行结果
创建stop实例的Lambda函数
在Lambda 控制台中,选择创建函数。
选择 Author from scratch (从头开始创作)。
在基本信息中下,添加以下内容:
函数名,例如“StopEC2Instances”。
运行时,请选择 Python 2.7。
在权限下,展开"选择或创建执行角色"。在执行角色下,选择使用现有角色。在现有角色下,选择您创建的 IAM 角色。
选择创建函数。
复制以下代码,将其粘贴到代码编辑器的编辑器窗格 (lambda_function) 中。此代码作用为停止指定的 EC2 实例。
import boto3
region = 'us-west-1' # 需要更换
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] #需要更换为实际的.可以是1个或更多个
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)
在基本设置下,将超时设置为 10 秒。例如,如果您想停止/启动多个实例,那可能需要更大的超时值,及不同的内存。
选择保存。
创建start实例的Lambda函数
8. 重复第 1-7 步来创建另一个函数。
在第 3 步中,为“StartEC2Instances”。
在第 5 步中,为以下:
import boto3
region = 'us-west-1' # 需更换
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] # 需更换
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
测试 Lambda 函数
在Lambda 控制台中,选中对应函数-> 选择操作,然后选择测试->在配置测试事件对话框中,选择创建新测试事件-> 输入事件名称,然后选择创建。注意:您不需要更改测试事件的 JSON 代码 — 该函数不使用此信息。->选择测试以执行此函数。
确认执行效果(比如是否完成关机).
为其他函数重复以上步骤。
创建触发 Lambda 函数的规则 (这里用cloudwatch的事件驱动)
打开 CloudWatch。
在左侧,选择规则。
创建规则。
在事件源下,选择计划(可以是计划,也可以是按照固定频率2种方式)。
执行以下任意一项操作:
对于固定频率为,输入间隔时间(分钟数、小时数或天数)。
对于 Cron 表达式,输入指示 Lambda 何时停止实例的表达式(格式正确的话,会自动跳出未来执行的列表)。有关规则语法的详细信息,请参阅规则的计划表达式(cloudwatch的事件里https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/events/ScheduledEvents.html )。
注意:Cron 表达式使用 UTC 进行计算.
在目标下,选择 Add target(添加目标)。
选择 Lambda 函数。
对于函数,选择将停止 EC2 实例的函数。
选择配置详细信息。
在规则定义下,执行以下操作:
对于名称,输入识别规则的名称,例如“StopEC2Instances”。
(可选)对于描述,输入对规则的描述。例如“每天晚上 10 点停止 EC2 实例”。
对于状态,选中已启用复选框。
选择创建规则。
重复第 1-11 步来创建规则以启动您的 EC2 实例。以不同的方式执行以下操作:
在第 5 步中,对于 Cron 表达式,输入指示 Lambda 何时启动实例的表达式。
在第 8 步中,对于函数,选择将启动您的 EC2 实例的函数。
在第 10 步中,在规则定义下,输入一个名称(如“StartEC2Instances”).
原理与使用详解
问题
问题:
通过lambda 和OSS 构造一个响应式的网页。 做到serverless的运行。
只是我现在还没想明白 如何进行响应。
从oss的html 静态页面激活lambda的计算动作,还有怎么做动态的调整 就没想通了。
回答:
html里面包含js代码,跟lambda或api gateway交互
随后:
我大概懂了。 也是靠触发,点击页面的时候 js 发起请求 到api gateway, 然后api gateway 直接触发lambda。
不过反过来 动态调整网页这个就不是很清楚了。
案例: