LoginSignup
14
26

More than 5 years have passed since last update.

Pythonista3でインフラエンジニアリング5選

Last updated at Posted at 2019-02-11

最近になってiOSのショートカットがなんとも直感的で気持ちよくないという理由でiOSアプリのPythonista3に課金した。で、普段のルーチンの自動化というより、インフラの現場でのテストツールとして便利じゃん?と思ったので幾つかメモ。

スクレイピング

先行してPythonista3でブラウザで開いているURLのタイトルを取得するを書いたが、Beautiful SoapがExtrasとしてPythonistaに入ってるので、楽にWebコンテンツの確認ができる。

今、見たらRequestsもPythonistaに入ってるので、接続確認ぐらいだったら、こっちが簡単だろう。

import requests
url = 'http://barcelona.sakura.ne.jp/'
r = requests.get(url)
print(r.text)

paramikoでサーバにSSHで接続

ParamikoもPythonistaで標準で入っている。さくらインターネットの500円プランで試したが、問題なく使える。余談だが、getpass()は入力値が見えなくなる関数のはずだが、Pythonista環境ではWarning: Password input may be echoed.と表示され、丸見えになっててしまう。

import paramiko
from getpass import getpass
import sys, time
password = getpass('password:')

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
    'example.com',22,'username',password
)
_, stdout, stderr = client.exec_command('pwd')
print(stdout.read())
client.close()

paramikoはパスワードではなく公開鍵認証にも対応しているが、こちらはうまくいかなかった。もしPythonista環境で成功した人がいたらコメント欄で教えていただけたら嬉しい。

AWSのインスタンスを操作

PythonistaはStaShという3rd partyを使ってpip installできて、これを使うと色々なライブラリもPythonistaで動かせる。(もちろん動いてくれないライブラリもある)

で、AWSを操作できるboto3も使える。とりあえずインスタンスのstartとstopは動いた。これ以外にもCloudWatch、S3、SES、SQSが操作できるらしいが、主に管理系でPythonista3から触るようなものじゃないかもしれない。

import boto3
instances = ['i-0000']
ec2 = boto3.client('ec2',
    aws_access_key_id='xxxx',
    aws_secret_access_key='xxxx' ,
    region_name='ap-northeast-1'
)
ec2.start_instances(InstanceIds=instances)

shodan

インフラエンジニアといえばPingとか飛ばせれば便利だが、Pythonでもroot権限がないと使えないものはPythonistaでは使えない。そんな場合に、リアルタイムな情報ではないがShodanのAPIを使ってみるという手がある。これもStaShでshodanをインストールすればPythonistaから利用できる。

import shodan
import pprint

print('''
example:
  net:1.1.1.1/32
  raspberry pi
''')
query = input()
api = shodan.Shodan('{API KEY}')
result = api.search(query)
for service in result['matches']:
  pprint.pprint(service)

メール送信

最後に地味に便利だったのがメール送信。AWSのSESを使ってアラートを外部にメールする設定をしようとしたのだが、確認のためだけにファイアウォールに穴を開けるのも面倒だったのでPythonistaから試したら、さっと動作確認できた。

import smtplib
from email.mime.text import MIMEText

fromaddr = 'test@example.com'
toaddr = 'test@example.com'
msg = MIMEText('Hello')
msg['Subject'] = 'test'
msg['From'] = fromaddr
msg['To'] = toaddr

s = smtplib.SMTP('example.com',587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('user','password')
s.sendmail(fromaddr,toaddr,msg.as_string())
s.quit()
14
26
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
14
26