【AWS】Amazon EMR ~ Session Managerを設定する ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/05/11/135632

で、AWS EMR 内の EC2 内を Session Manager で入ることをやったが
今回、初めから自分でインフラ部分も設定したので、
その時のノウハウをまとめておく

目次

【1】EMRでSession Managerで入りたい場合の注意点
【2】EMRにSSM Agentをインストールするには
 1)SSM Agentをインストールするスクリプトを用意
 2)EMRのBootstrap時に1)のスクリプトをコールする
【3】その他の事項
 1)IAM role
【4】Tips
 1)AMI化にする

【1】EMRでSession Managerで入りたい場合の注意点

https://dk521123.hatenablog.com/entry/2020/04/09/215235

でも少し触れているが、
Session Managerを使用するには、入りたいEC2内に
SSM Agentを事前にインストールする必要があるのだが
EMRのデフォルトのEC2には、入っていないので
インストールする必要がある

【2】EMRにSSM Agentをインストールするには

https://aws.amazon.com/blogs/big-data/securing-access-to-emr-clusters-using-aws-systems-manager/

に記載されているが、ざっくりいうと、

1)SSM Agentをインストールするスクリプトを用意
2)EMRのBootstrap時に1)のスクリプトをコールする

1)SSM Agentをインストールするスクリプトを用意

* 以下「例:シェルスクリプト」を自分のS3バケット内に置く
 => 例えば、s3://your-s3-bucket/emr/init.sh
 => Windowsの場合、改行コードをLF(Linux)にすることに注意

例:シェルスクリプト

#!/bin/bash
## Name: SSM Agent Installer Script
## Description: Installs SSM Agent on EMR cluster EC2 instances and update hosts file
##
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
sudo status amazon-ssm-agent >>/tmp/ssm-status.log
## Update hosts file
echo "\n ########### localhost mapping check ########### \n" > /tmp/localhost.log
lhost=`sudo cat /etc/hosts | grep localhost | grep '127.0.0.1' | grep -v '^#'`
v_ipaddr=`hostname --ip-address`
lhostmapping=`sudo cat /etc/hosts | grep $v_ipaddr | grep -v '^#'`
if [ -z "${lhostmapping}" ];
then
echo "\n ########### IP address to localhost mapping NOT defined in hosts files. add now ########### \n " >> /tmp/localhost.log
sudo echo "${v_ipaddr} localhost" >>/etc/hosts
else
echo "\n IP address to localhost mapping already defined in hosts file \n" >> /tmp/localhost.log
fi

echo "SSM Agent install is DONE..."

2)EMRのBootstrap時に1)のスクリプトをコールする

Name:任意の文字列(e.g. demo-emr-init)
Amazon s3 Location: s3://your-s3-bucket/emr/init.sh

補足:エラー「BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY」が表示

EMRを起動し、Bootstrapが実行された際に
エラー「BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY」が表示した。
その際の詳細は、以下の関連記事を参照のこと

EMRのBootstrapでエラー「BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY」が表示
https://dk521123.hatenablog.com/entry/2023/08/17/002559

【3】その他の事項

1)IAM role

https://dk521123.hatenablog.com/entry/2020/04/09/215235

より抜粋
~~~~~~~~~~
EC2に付与されているIAMロールに、
AmazonEC2RoleforSSMポリシーを付与する
~~~~~~~~~~

【4】Tips

1)AMI化にする

ブートストラップで毎回インストールのは、非効率なので
AMI(Amazon Machine Image)化しておくといい

注意点

* AMI作成時は、EBSを1つで作成すること
 => エラー「The AMI mush have only one EBS volume. AMI with multiple EBS volumes are not supported」
  が表示される

関連記事

Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
Amazon EMR ~IAM Role周り ~
https://dk521123.hatenablog.com/entry/2023/07/24/160124
Amazon EMR ~ ネットワーク周り ~
https://dk521123.hatenablog.com/entry/2022/05/13/155755
起動中の EMR に Session Manager を使って入る
https://dk521123.hatenablog.com/entry/2022/05/11/135632
Amazon EMR ~ Flink ~
https://dk521123.hatenablog.com/entry/2023/07/16/000000
AWS Systems Manager ~ Session Manager ~
https://dk521123.hatenablog.com/entry/2020/04/09/215235
EMRのBootstrapでエラー「BOOTSTRAP_FAILURE_BA_DOWNLOAD_FAILED_PRIMARY」が表示
https://dk521123.hatenablog.com/entry/2023/08/17/002559
Amazon EC2 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/02/16/235120