通过由Cloudwatch事件规则触发的AWS Lambda标记EMR集群

时间:2018-03-02 09:32:19

标签: amazon-web-services aws-lambda emr amazon-emr amazon-cloudwatch

我需要在我的Cloudwatch EventRule中捕获事件RunflowJob,以便标记AWS EMR起始集群。

我正在寻找此活动,因为我需要用户名和帐户信息

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

调用ListClusters,DescribeCluster和RunJobFlow操作会在CloudTrail日志文件中生成条目。

每个日志条目都包含有关生成请求的人员的信息。例如,如果发出创建和运行新作业流(RunJobFlow)的请求,CloudTrail会记录发出请求的人员或服务的用户身份

https://docs.aws.amazon.com/emr/latest/ManagementGuide/logging_emr_api_calls.html#understanding_emr_log_file_entries

以下是使用Python Boto3获取用户名的示例代码段。

import boto3
cloudtrail = boto3.client("cloudtrail")
response = cloudtrail.lookup_events (
    LookupAttributes=[
        {
            'AttributeKey': 'EventName',
            'AttributeValue': 'RunJobFlow'
        }
    ],
)
for event in response.get ("Events"):
    print(event.get ("Username"))

答案 1 :(得分:0)

可以从RunJobFlow事件本身检索

用户名和群集详细信息。更简单的解决方案是将Cloudwatch事件规则与Lambda函数一起用作获取这些信息的目标,然后可以根据需要采取进一步的措施。下面的示例:

用于Cloudwatch事件规则的事件模式

{
"source": ["aws.elasticmapreduce"],
"detail": {
    "eventName": ["RunJobFlow"]
}
}

Lambda代码段

def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    user = event['detail']['userIdentity']['userName']
    cluster_id = event['detail']['responseElements']['jobFlowId']
    region = event['region']