使用 lambda 函数删除关联的 cloudformation 堆栈时 EMR 集群未终止

Posted

技术标签:

【中文标题】使用 lambda 函数删除关联的 cloudformation 堆栈时 EMR 集群未终止【英文标题】:EMR cluster is not terminating while deleting the associated cloudformation stack using lambda function 【发布时间】:2020-05-26 18:48:25 【问题描述】:
Resources:
  LFTULJ:
    Type: 'AWS::Lambda::Function'
    Properties:
      Runtime: python3.6
      Code:
        ZipFile: |
          import boto3
          import os
          import json

          stack_name = os.environ['stackName']

          def delete_cfn(stack_name):
              try:
                  cfn = boto3.resource('cloudformation')
                  stack = cfn.Stack(stack_name)
                  stack.delete()
                  return "SUCCESS"
              except:
                  return "ERROR"

          def handler(event,context):
              print("Received event:")
              print(json.dumps(event))
              return delete_cfn(stack_name)

      Handler: index.handler
      Environment: 
        Variables: 
          stackName: shubham
      Role: 'arn:aws:iam::261598744157:role/terminate'
      Timeout: '60'
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 20d06512-220b-4ef6-b56a-f65d2a0c49d4

我正在使用 lambda 函数删除堆栈。一切都被删除,但 EMR 集群没有终止。显示的错误是Cluster id 'j-AQ1M94XKWDDJP' is not valid. (Service: AmazonElasticMapReduce; Status Code: 400; Error Code: InvalidRequestException; Request ID: 0283892f-c5aa-440d-968a-8cfb4585fe23) 而具有该 ID 的集群存在。

【问题讨论】:

是否与 EMR 集群在同一个账户和同一个地域运行? 是的,它在同一个帐户和同一个地区运行 【参考方案1】:

我得到了问题的答案。 有一个与 EMR 集群 VisibleToAllUsers 关联的属性。当我们使用 CLoudformation 脚本旋转 EMR 集群时,它的默认值设置为 false。这就是 EMR id 无效的原因。所以解决方法是让 VisibleToAllUsers 属性为 true,这样其他 IAM 也可以查看 EMR 集群,并且脚本和 lambda 函数可以正常工作。

【讨论】:

【参考方案2】:

我将 VisibleToAllUsers 属性值设置为 True,但仍然面临问题。

抛出错误消息:集群 id 'j-2NTFNCJLFN87I' 无效。 (服务:AmazonElasticMapReduce;状态代码:400;错误代码:InvalidRequestException;请求 ID:6b7e5c5b-fffa-457f-8897-9417846452e0;代理:null)

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。 可能您正在访问不存在的 EMR 集群。而不是通过名称访问 EMR 集群 id 尝试通过 cloudformation 资源 id 访问。

以上是关于使用 lambda 函数删除关联的 cloudformation 堆栈时 EMR 集群未终止的主要内容,如果未能解决你的问题,请参考以下文章