【问题标题】:How do I run a AWS Lambda function to let me know that CloudFormation has completed the entire stack creation如何运行 AWS Lambda 函数让我知道 CloudFormation 已完成整个堆栈创建
【发布时间】:2016-07-17 00:32:11
【问题描述】:

我想在 CloudFormation 完成整个堆栈创建(实例部署、VPC 设置、Puppet 脚本等)后立即自动调用自定义程序 API。

解决这个问题的正确方法是什么?

经过一些研究,似乎一个不错的选择是启动由堆栈创建已成功完成的事件触发的 AWS Lambda 函数,但我不知道如何处理。

任何想法或建议将不胜感激。

【问题讨论】:

  • 您使用的是 SDK 还是 CLI?

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


【解决方案1】:

您可以使用 CloudFormation、DependsOn 属性和嵌套的 CloudFormation 堆栈来配置和协调您正在谈论的很多内容(VPC 的设置等)。通过这种方式,您可以订购 CloudFormation 堆栈的执行,例如,首先创建您的 VPC,然后启动您的 EC2 实例,然后在实例上部署软件。

您还可以使用 AWS::CloudFormation::Init 协调您提到的其他行为(部署 [on] 实例、[calling] Puppet 脚本等)的执行。这样,您可以从 CloudFormation 模板中的 EC2 实例调用您的 Puppet 脚本。 Puppet 脚本的实际执行发生在 EC2 实例上。

如果您想查看从 CloudFormation 调用配置管理工具的示例(在本例中,我们使用的是 Chef Solo),请参阅 app-instance.json。 如果您想查看使用嵌套堆栈的示例,请参阅dromedary-master.json

在我们的博客上也有一些使用 Lambda 的示例(Stelligent),但根据您要解决的问题,在这种情况下您似乎不需要使用 Lambda。

附:您也必须使用嵌套堆栈,但它可以让事情变得更简洁。但是,您确实想要控制资源的创建顺序,因此 DependsOn 属性将帮助您做到这一点。

【讨论】:

  • 非常感谢。但是,如何确保脚本仅在所有内容都已完全成功设置后才运行?我之前遇到过一个问题,当我尝试使用 AWS::CloudFormation::Init 中的脚本将分区挂载到 /dev/xvdf 时,该位置不存在,但我会尽快登录,位置存在,命令完美执行。
  • 所以,我找到了安装问题的解决方案,在这里:link。但是,有没有办法知道 CloudFormation 已经完整且成功地完成了所有任务?我正在考虑使用 Amazon SNS,然后订阅 CREATE_COMPLETE 事件,这似乎是一个可行的选择吗?
  • @cameronliam 很高兴您得到了具体安装问题的答案。为了将来考虑,您可能还想查看Use a CreationPolicy to Wait for On-Instance Configurations 以确保在执行其他操作之前在实例上创建资源。注意"/opt/aws/bin/cfn-init ","/opt/aws/bin/cfn-signal -e $? ",的使用
  • @cameronliam 是的,您可以使用 Amazon SNS 主题并订阅电子邮件或其他终端节点。不过,我不确定您是否可以订阅像 CREATE_COMPLETE 这样的特定事件。可以的话我也会用!我确实使用 SNS 来获取 CloudFormation 事件的通知,但它会发送一切。在任何情况下,在执行 CloudFormation 堆栈时,您都会输入类似:aws cloudformation create-stack --stack-name MyStackName --template-url YOURTEMPLATEURL --region REGION --disable-rollback --capabilities="CAPABILITY_IAM" --notification-arns "arn:aws:sns:REGION:YOURACCOUNTID:YOURSNSTOPIC"
  • 再次感谢!非常接近解决我的问题。最后一件事,我想做 POST 的原因是通知 API 端点该实例已成功创建,然后向它提供该实例的公共 IP(可能还有更多信息),有什么方法可以促进这一点使用社交网络?还是我需要不同的方法?
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2019-07-14
  • 2020-11-09
  • 2017-05-07
  • 2019-06-27
相关资源
最近更新 更多