附加在运行实例lambda逻辑上的EBS卷需要

时间:2017-10-06 14:35:10

标签: amazon-web-services amazon-ec2 lambda aws-lambda amazon-cloudformation

我编写了一个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')

1 个答案:

答案 0 :(得分:0)

罗汉,

没有一些魔力,Lambda无法在EC2实例上执行命令。

我假设你正在使用CloudFormation创建新的EC2实例并在那时附加EBS卷。

您可以将操作系统级命令放入CloudFormation中的Resources下的UserData。

此链接包含示例:

Deploying Applications on Amazon EC2 with AWS CloudFormation