我编写了一个Lambda函数,只有当EBS卷附加到正在运行的实例并且状态已完成时才能触发该函数。如果这个条件为真,那么下面的Lambda函数将触发并在我正在运行的操作系统上安装两个EBS设备。
这是否可以使用Lambda函数?请帮我处理以下代码。我创建了两个EBS卷,并附带了CloudFormation模板。
from __future__ import print_function
import boto3
import os
ec2 = boto3.client('ec2')
def lambda_handler(event, context):
volume =(event['resources'][0].split('/')[1])
if event['detail']['result'] == 'completed':
attach=ec2.describe_volumes(VolumeIds=[volume])['Volumes'][0]['Attachments']
if attach:
instance = attach[0]['InstanceId']
if instance:
os.system('mkfs -t ext4 /dev/xvdg')
os.system('mkfs -t ext4 /dev/xvdf')
os.system('mkdir -p /var/www/production /var/lib/SQL')
os.system('mount /dev/xvdf /var/www/production')
os.system('mount /dev/xvdg /var/lib/SQL')
os.system('echo dev/xvdf /var/www/production ext4 defaults,nofail 0 2 >> /etc/fstab')
os.system('echo /dev/xvdg /var/lib/SQL ext4 defaults,nofail 0 2 >> /etc/fstab')
else:
raise Exception('Volume ' + volume + ' not currently attached to an instance')
答案 0 :(得分:0)
罗汉,
没有一些魔力,Lambda无法在EC2实例上执行命令。
我假设你正在使用CloudFormation创建新的EC2实例并在那时附加EBS卷。
您可以将操作系统级命令放入CloudFormation中的Resources下的UserData。
此链接包含示例:
Deploying Applications on Amazon EC2 with AWS CloudFormation