使用 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 集群未终止的主要内容,如果未能解决你的问题,请参考以下文章

CloudFormation 正在等待清理与 Lambda 函数关联的 NetworkInterfaces

Back4App 删除关联对象脚本。类似于 AWS lambda

删除 Lambda 支持的自定义资源的支持 Lambda 函数

EF 使用lambda表达式 更新一对多数据时报错

旧的AWS Lambda图层是否会自动删除?如果没有,如何删除它们?

aws cdk:无法删除 lambda 边缘