Ubuntu 20.04 on EC2 で runuser や sudo -i 実行時に .bashrc が読み込まれないんだけど

Ubuntu 20.04 on EC2 で runuser や sudo -i 実行時に .bashrc が読み込まれない

Lambda 関数より AWS Systems Manager の SendCommand を使用して、Ubuntu 20.04 on EC2 で任意のコマンドを実行させようとしてました。

因みに、AWS Systems Manager の SendCommand についてドキュメントでは以下のように記載しています。

AWS Systems Manager - SSM エージェント を介してルートレベルコマンドへのアクセスを制限する

SSM エージェント は、root アクセス権 (Linux) または SYSTEM アクセス権 (Windows Server) を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行します。最高レベルのシステムアクセス権限が存在するため、SSM エージェント にコマンドを送信する権限が付与されている信頼されたエンティティには root または SYSTEM アクセス権限があります。(AWS では、AWS のアクションを実行してリソースにアクセスできる信頼されたエンティティは、プリンシパルと呼ばれます。AWS アカウントのルートユーザー、IAM ユーザー、またはロールをプリンシパルにすることができます。

上記の記述のように、AWS Systems Manager の SendCommand は root アカウントで実行されます。
一方で、AWS の Ubuntu 20.04 の AMI のデフォルトユーザーは ubuntu です。
各種モジュールのインストールやパスが通っているのも ubuntu ユーザー なので、ubuntu ユーザーに切り替えてコマンドを実行するため、以下のようなコマンドを SendCommand で実行しようとしました。

実行したいコマンド
Copied!
runuser -l ubuntu -c "python ~/analyze.py"

しかし、実行結果はコマンドが存在しないといったエラーでした。
sudo -i コマンドも使ってみましたが、結果は同じでした。
どうやら path など環境変数を設定したりしている .bashrc が読み込まれていないのが原因のようでした。( .profile は読み込まれていました)

Ubuntu 20.04 on EC2 で runuser や sudo -i 実行時に .bashrc が読み込まれない原因

どうやらデフォルトで .bashrc ファイルの先頭にシェルの実行オプションに対話型シェルを示す i オプションが含まれていない場合、.bashrc の読み込みをキャンセルする処理がありました。

.bashrc
Copied!
# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

runusersudo -i も対話型シェルとなるため、.bashrc が読み込まれていませんでした。

Ubuntu 20.04 on EC2 で runuser や sudo -i 実行時に .bashrc が読み込まれない回避策

試しに、該当の処理を消すとコマンドは実行できました。
しかし、元々あった該当の処置を削除していいのか判断がつかなかったため、自分は .profile に実行に必要な諸々の定義を移して対応しました。