EMRのAMI Verison3系でAWS-CLIを利用する際はBootstrap Actionの指定が必要

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AMI Version3.1.4, 3.2.1以降でこの問題は修正されているようです。

EMR上でAWS-CLIを利用しようとしたら以下のエラーに遭遇しました。

$ aws --region ap-northeast-1 ec2 describe-vpcs

[Errno 185090050] _ssl.c:330: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

調べてみたところAMI 3.0.2 and SSL errorというページが見つかりました。どうもcacert.pemが見つからないようで、現状としてAMI Version3系ではAWS-CLIのアップグレードが必要とのことでした。

実際にフォーラムに書かれている以下のコマンドを実行すればAWS-CLIが動作するようになりました。

sudo pip uninstall -y awscli
sudo rm -rf /usr/lib/python2.6/site-packages/awscli-*.egg /usr/lib/python2.6/site-packages/botocore-*.egg
sudo yum -y reinstall aws-cli python-botocore

ですが、EMRの場合にクラスタの各EC2インスタンスにログインしてコマンドを実行するのは現実的ではありません。フォーラムでもBootstrap Actionを利用する手順が紹介されていました。

ということで、AWSサポート?が用意したエラー回避用のBootstrap Actionを利用する手順について紹介します。マネジメントコンソールでBootstrap Actionを追加するだけです。
Bootstrap Action Fix AWS-CLI SSL Error
手順は以下の通りです。クラスタを作成する際に以下の手順を追加して下さい。

  1. [Add bootstrap action]をクリックして[Custom action]を選択する
  2. [Configure and add]ボタンをクリックする
  3. 入力画面が開くので[S3 location]にs3://support.elasticmapreduce/bootstrap-actions/other/20140821installPipandUpdateAWSCLI.bashと入力する
  4. [Add]ボタンで確定する

実際に前述のBootstrap Actionを追加してクラスタを作成するとAWS-CLIが正常に動作しました。

$ aws --region ap-northeast-1 ec2 describe-vpcs
{
    "Vpcs": [
        {
            "VpcId": "vpc-XXXXXX",
            "InstanceTenancy": "default",
            "State": "available",
            "DhcpOptionsId": "dopt-XXXXXXXX",
            "CidrBlock": "172.31.0.0/16",
            "IsDefault": true
        }
    ]
} 

AWS側で現在対応中とのことですので、3.1.2には対応されているのではないでしょうか。それまではEMRでAWS-CLIを利用する際は前述のBootstrap Actionの指定をする必要がありそうです。