Amazon AWS PHP SDK-群集无法启动-给定的SSH密钥名称无效


Amazon AWS PHP SDK - Cluster fails to launch -The given SSH key name was invalid

我正在尝试创建一个PHP页面来启动集群并将作业添加到作业流中。

$response = $emr->run_job_flow($nameOfRun, array(
        'Ec2KeyName' => 'hadoop',
        'HadoopVersion' => '0.20',
        'KeepJobFlowAliveWhenNoSteps' => $clusterAlive,
        'InstanceGroups' => array(
                array( // Group #1
                        'InstanceCount' => $numOfMaster,
                        'InstanceRole' => 'MASTER',
                        'InstanceType' => $masterInstanceType,
                        'Market' => 'ON_DEMAND',
                        'Name' => 'Master',
                ),
                array( // Group #2
                        'InstanceCount' => $numOfSlaves,
                        'InstanceRole' => 'CORE',
                        'InstanceType' => $slaveInstanceType,
                        'Market' => 'ON_DEMAND',
                        'Name' => 'Slaves',
                )
        ),
        'Placement' => array(
                'AvailabilityZone' => 'us-east-1d'
        )
));

集群启动了,我可以看到作业流ID。但它在启动后立即开始关闭。当我执行elastic-mapreduce --list时,该集群的状态为Failed。

有任何已知的问题或我做错了什么?AvailabilityZone是否可能导致该问题?

我从AWS控制台检查过,它给出了这个错误-The given SSH key name was invalid我检查了一下,我在config.inc.php中提供的访问密钥和密钥是正确的,并且可以工作。

谨致问候,Kartikeya Sinha

看起来有四个不同的gotcha可能会导致错误,如本AWS线程中所述:

  1. 从控制台指定确切的密钥对名称
  2. 指定与端点所在区域不同的区域中存在的关键点对
  3. 为不同的AWS服务使用密钥对,而不是为EC2使用密钥对
  4. 使用重命名的keypair-pem文件,当它应该与控制台中的keypair匹配时(实际上是1的特殊情况)

如果所有这些看起来都是正确的,请尝试删除关键点对并创建一个新的关键点对。


根据对PHP SDK文档的阅读,我认为问题在于您根本没有指定EC2KeyName(您的评论表明您不想将特定的pem文件绑定到EC2实例;您只想使用密钥和访问密钥进行访问)。

Ec2KeyName-string-可选-指定AmazonEC2密钥对的名称,该密钥对可用于以用户"hadoop"的身份ssh到主节点。[限制:该值必须介于0和256个字符之间,并且必须与以下正则表达式模式匹配:

[''u0020-''uD7FF''uE000-''uFFFD''uD800''uDC00-''uDBFF''uDFFF''r''n''t]*]

此参数指的是可以与EC2实例关联的pem密钥对文件。你的评论表明你是在专门谈论AccessKeys和SecretAccessKeys,这是不同的概念。pem文件为您提供了对EC2实例的ssh访问权限。后者针对AWS API授权您。

您应该能够终止该可选参数并让作业工作,尽管如果没有pem文件,您将无法将D_5 ssh放入其附属的EC2实例中。

我错在哪里:(这解决了我的问题)访问密钥和密钥在AWS SDK的config.ini.php文件中指定的密钥对的名称与启动集群时提供的EC2KeyName应相同。