0
0

AWS Systems ManagerからEC2インスタンスのコマンドを呼ぶときの注意点について

Posted at

はじめに

AW EC2上に配置したpythonスクリプトをAWS lambdaからSystem Manager(SSM)のRunShellScriptを利用して呼び出した際に、ログインユーザーに関する問題で躓いたので、問題の概要と解決策をまとめます。

参考にさせていただいたサイト

問題点

SSMからRunShellScriptを実行した場合、実行ユーザーはrootとなる。
一方、EC2インスタンスに通常ログインした場合のユーザーはec2-userとなる。

ec2-userで構築した環境で動くスクリプトをSMS RunShellScriptから呼ぶと、実行時ユーザーがrootとなるため実行環境が異なり、import module errorなどが発生する。

SSMからRunShellScriptで実行した場合
$ pwd
/usr/bin

$ whoami
root

$ which python3
/usr/bin/python3
EC2にSSH接続した場合
$ pwd
/home/ec2-user

$ whoami
ec2-user

$ which python3
~/.pyenv/shims/python3

解決策

以下のサイトでは、AWS Systems Managerドキュメントを使用していますが、RunShellScriptでも同じこと。
実行時ユーザーをec2-userに変更することで実現できます。

$ su - ec2-user -c "実行したいコマンド"

image.png

結果
/home/ec2-user
ec2-user
/home/ec2-user/.pyenv/shims/python3

したがって、lambdaからEC2インスタンス上のスクリプトを呼ぶ場合も、このように実行時ユーザーを変更することで可能となりました。

lambdaスクリプト(抜粋)
import boto3

ssm = boto3.client('ssm')

# Run   Command実行
response = ssm.send_command(
    InstanceIds = [instance_id],
    DocumentName = "AWS-RunShellScript",
    Parameters = {
        "commands": [
            "su - ec2-user -c 呼び出したいコマンド",
        ]    
    },
)

うまくいかなかった解決策

以下のように、実行時ユーザーを変更した上でスクリプトを呼び出した場合はうまくいきませんでした。

うまくいかなかった例
$ sudo su - ec2-user
$ 呼び出したいコマンド
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0