【问题标题】:SQS: Publish a message when an EC2 instance starts?SQS:在 EC2 实例启动时发布消息?
【发布时间】:2015-08-19 18:50:22
【问题描述】:

有没有办法在 EC2 实例启动时自动在 SQS 上发布消息?

例如,您能否使用 Cloudwatch 设置一个在实例启动时触发的 alarm? Cloudwatch 上的所有警报似乎都与特定的 EC2 实例相关,而不是一般的 EC2 服务。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-sqs


    【解决方案1】:

    为了更好地理解这个问题并提供更准确的答案,需要更多信息。

    我们在谈论:

    任何 AMI 创建和启动新实例?
    特定 AMI 创建和启动新实例?
    正在启动一个现有刚刚处于停止状态的 AMI?

    或者在规模组内创建一个新实例?

    这些都会影响您创建 cloudwatch 闹钟的方式。
    例如,如果它是现有的 ec2,您将按照以下方式使用状态检查:
    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html

    虽然如果它是一个全新的 Ec2 实例创建,您将需要使用更高级的 cloudtrail 日志警报,如下所示: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cw_create_alarms.html

    但是在那之后,它会遵循相同的基本逻辑,那就是:

    按照以下方式创建触发 SNS 的警报: https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/ConsoleAlarms.html

    让 SNS 通知程序按以下方式发布到 SQS 主题:

    https://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html

    一如既往,虽然有很多方法可以给猫剥皮。 如果这是一个关键事件,并且我希望每个启动事件都具有相同的典型响应,我个人会考虑从 puppet 或 chef 推出引导脚本,这样所有事件的快速更改都集中在一个脚本中。

    【讨论】:

      【解决方案2】:

      Step1:创建 Cloud watch Rule 以通知创建。根据按下 lauch 按钮时 EC2 实例的生命周期。实例从挂起状态变为运行状态,如果实例从停止状态移动到运行状态。所以创建待处理状态的规则

      Create a Cloud watch Rule as specified in the image screenshot

      Step2:创建一个 Step 函数。因为 cloud Trail 以至少 20 分钟的延迟记录帐户中的所有事件。如果您想要创建实例的用户的名称,此步骤功能很有用。

      {
        "StartAt": "Wait",
        "States": {
          "Wait": {
            "Type": "Wait",
            "Seconds": 1800,
            "Next": "Ec2-Alert"
          },
         "Ec2-Alert":{
           "Type": "Task",
           "Resource":"arn:aws:lambda:ap-south-1:321039853697:function:EC2-Creation-Alert",
           "End": true  
      
        }
        }
      }
      

      Step3 : 创建通知的 SNS 主题

      Step4 : 编写一个 lambda 函数从云端获取日志并获取创建实例的用户名。

      import json
      import os
      import subprocess
      import boto3
      
      
      def lambda_handler(event, context):
      
          client = boto3.client('cloudtrail')
          client1 = boto3.client('sns')
          Instance=event["detail"]["instance-id"]     
          response = client.lookup_events(
          LookupAttributes=[
              {
                  'AttributeKey': 'ResourceName',
                  'AttributeValue': Instance
              },
          ],
          MaxResults=1)
      
          test=response['Events']
      
          st="".join(str(x) for x in test)
          print(st)
          user=st.split("Username")[1]
          finalname=user.split(",")
          Creator=finalname[0]
          #print(st[st.find("Username")])
      
          Email= "Hi All ,\n\n\n The User%s has created new EC2-Instance in QA account and the Instance id is %s \n\n\n Thank you \n\n\n Regard's lamda"%(Creator,Instance)
      
      
      
          response = client1.publish(
          TopicArn='arn:aws:sns:ap-south-1:321039853697:Ec2-Creation-Alert',
          Message=Email
      
      )
      
          # TODO implement
          return {
      
              'statusCode': 200,
          }
      

      注意:如果实例从停止状态更改为运行状态或启动新实例,此代码会触发通知。

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 2013-01-02
        • 1970-01-01
        • 2019-08-16
        • 2013-12-18
        • 1970-01-01
        • 2021-01-05
        • 2019-05-31
        • 1970-01-01
        相关资源
        最近更新 更多