当AWS EMR终止并显示“因验证错误而终止 - 安全组错误”时,这表示EMR集群无法通过安全组进行网络通信。解决此问题的方法如下:
确认安全组设置是否正确:登录到AWS控制台,导航到EC2服务,然后选择“安全组”选项卡。查找与EMR集群关联的安全组,并确保它的入站和出站规则允许所需的网络流量。例如,如果EMR集群需要访问S3存储桶,则需要添加允许出站流量到S3的规则。
确认VPC网络连接是否正确:如果EMR集群与VPC网络连接,确保VPC的路由表和网络ACL允许来自EMR集群的流量传出和传入。检查VPC的子网和路由表设置,确保与EMR集群关联的子网和路由表配置正确。
检查IAM角色权限:如果EMR集群需要访问其他AWS服务,确保与EMR集群关联的IAM角色具有适当的权限。例如,如果EMR集群需要访问S3存储桶,则IAM角色应具有适当的S3访问权限。
下面是一个使用Boto3 Python库创建EMR集群时设置安全组的示例代码:
import boto3
emr = boto3.client('emr', region_name='us-west-2')
response = emr.run_job_flow(
Name='MyEMRCluster',
ReleaseLabel='emr-6.3.0',
Applications=[
{
'Name': 'Spark'
},
],
Instances={
'InstanceGroups': [
{
'Name': 'MasterNode',
'Market': 'ON_DEMAND',
'InstanceRole': 'MASTER',
'InstanceType': 'm5.xlarge',
'InstanceCount': 1,
},
{
'Name': 'WorkerNode',
'Market': 'ON_DEMAND',
'InstanceRole': 'CORE',
'InstanceType': 'm5.xlarge',
'InstanceCount': 3,
},
],
'Ec2KeyName': 'my-key-pair',
'KeepJobFlowAliveWhenNoSteps': True,
'TerminationProtected': False,
'EmrManagedMasterSecurityGroup': 'sg-0123456789abcdef0',
'EmrManagedSlaveSecurityGroup': 'sg-0123456789abcdef1',
'ServiceAccessSecurityGroup': 'sg-0123456789abcdef2',
},
JobFlowRole='EMR_EC2_DefaultRole',
ServiceRole='EMR_DefaultRole',
VisibleToAllUsers=True,
)
print(response)
在上述示例代码中,EmrManagedMasterSecurityGroup
和EmrManagedSlaveSecurityGroup
参数设置了EMR集群的安全组。确保将这些参数替换为实际的安全组ID。
通过检查安全组设置、VPC网络连接和IAM角色权限,您应该能够解决“因验证错误而终止 - 安全组错误”的AWS EMR终止问题。