AWS:使用EC2实例创建来触发lambda

时间:2018-12-03 16:11:11

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

我正在编译一个相当复杂的CloudFormation模板,并在某个时候创建​​一个ec2实例;

我想创建一个lambda函数,

  • 将在此CF堆栈中创建的实例的公共IP用作输入参数
  • 为该特定IP打开一个安全组端口(该安全组不是特定CF模板的部分,并且属于不同区域)。

这可能吗?

我要问是因为ec2(未在控制台中被列为潜在的lambda触发器),并且想了解解决此问题的方法是否比在{{1 }}或sns,然后依次触发lambda。

3 个答案:

答案 0 :(得分:2)

我可以想到两种选择:

  1. 按照@ krishna_mee2004用户的说法,您可以使用CloudWatch监听您的EC2实例,这又会触发您的lambda。

  2. 在您的EC2实例上,“实例详细信息”下有一个名为User data的字段。在User data中,您可以添加在部署EC2实例时应运行的命令。从这里您可以调用您的lambda。

Here是有关EC2用户数据的文档。 Here是有关从CLI调用lambda的文档。

就个人而言,我建议使用选项1,因为我会在有机会的情况下更喜欢使用AWS工具,而CloudWatch就是一个很好的例子。但是,选项2可能会给您更多控制,以将什么有效负载发送到lambda。

答案 1 :(得分:0)

不建议您使用安全组。

如果希望允许EC2实例具有对安全组的入站访问权限,则应执行以下操作:

  • 为正在启动的EC2实例创建一个安全组。我们称之为Instance-SG
  • 为您希望EC2能够访问的资源(例如负载均衡器,数据库或其他EC2实例)创建一个安全组。我们称之为Resource-SG
  • Resource-SG中添加一个条目,以允许来自Instance-SG的入站访问

就是这样!现在,将授予与Instance-SG关联的任何EC2实例入站访问Resource-SG的权限。无需在安全组中放入特定的IP地址。

答案 2 :(得分:0)

最简单的方法是让EC2实例将自身添加到安全组中。

只需将其放入EC2实例的用户数据中,并确保为其分配了具有足够权限的IAM角色:

IP=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4/`

aws ec2 authorize-security-group-ingress --group-name "Resource-SG" --protocol tcp --port 80  --cidr $IP/32 --region OTHER-REGION