3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Glue ジョブで paramiko を使って ssh 接続する 

Last updated at Posted at 2023-10-28

こんにちは!インサイトテクノロジーの松尾です。

本投稿では、AWS Glue ジョブで Python を使って ssh 接続する方法を紹介します。ssh 接続には paramiko を使用します。

はじめに

Glue ジョブから外部のサービスなどに処理を投げるときに REST API を呼ぶこともあると思いますが、今回、他の EC2 で処理をさせたいケースがあり、ssh 接続でコマンドをキックする必要性が生じました。
そこで、本投稿では、paramiko を使って AWS Glue の Python シェルから ssh 接続してコマンドを実行する方法を紹介します。

Glue での paramiko の利用の設定

Glue の実行環境には paramiko が既定でセットアップされているわけではないため、独自に追加してあげる必要があります。AWS ドキュメントによると簡単に指定できそうです。

--additional-python-modules パラメータでコンマ区切りの Python モジュールのリストを指定することで、新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりできます

そこで以下のように指定することで、paramiko が使用できるようになります。

image.png

サンプルコード

では、さっそく適当な EC2 に接続できることを確認してみましょう。
例えば以下のようなコードを実行します。

# ----------------------------------------------------------
IP_ADDRESS = 'xx.xx.xx.xx'
USERNAME = 'xxxxxxx'
PASSWORD = 'xxxxxxx'

CMD = 'uname -a'
# ----------------------------------------------------------

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.WarningPolicy())

client.connect(IP_ADDRESS, username=USERNAME, password=PASSWORD)

stdin, stdout, stderr = client.exec_command(CMD)

for line in stdout:
    print(line)

client.close()
del client, stdin, stdout, stderr

例えば Cloudwatch logs に出力できるようにしておくと uname -a の結果が Cloudwatch logs へ出力されることが確認できます(キャプチャの一番下の行)。

Linux ip-172-31-35-80.ap-northeast-1.compute.internal 6.1.56-82.125.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Oct 10 17:03:53 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

image.png

※CloudWatch Logs には paramiko のインストールの情報も出力されてました。

なお本来は、上記のように接続先、ユーザー名、パスワードなどの情報をハードコードするのは適切ではありません。ここでは ssh 接続できることを確認することが目的のため、そのあたりは気にしないことにします。
また、EC2 に接続する際にはおそらく同じ VPC で稼働させるのが一般的だと思います。今回はそこもいったん無視し、グローバル IP で接続して実験しています。

※いずれ VPC 内で処理するのも試してみたいところではあります

おわりに

AWS Glue ジョブの Python シェルで paramiko を使って ssh 接続する手順を紹介しました。REST API を利用できない場合でも、サーバーに ssh 接続は可能、というケースはゼロではないと思います。同様に scp も行えますので、scp で送って、ssh で処理して、scp で取得する、みたいな使い方もできるのではないでしょうか。

ぜひご活用ください!

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?