シナリオは、運用サーバーがプライベート サブネットにあり、その前に NAT インスタンスがあり、SSH を介してメンテナンスできるようになっています。現在、SSH 経由で NAT インスタンスに接続し、そこから SSH 経由でそれぞれのサーバーに接続しています。
私がやりたいことは、コードベースを NAT インスタンスにアップロードせずに、NAT をプロキシとして使用して自分のマシンから展開タスクを実行することです。これは Fabric で可能ですか?それとも、苦痛の世界に行き着くだけでしょうか?
EDIT @Morganが示唆したように、これをフォローアップするために、ゲートウェイオプションは実際にこの問題を修正します。
少し完全を期すために、私のfabfile.pyで:
def setup_connections():
"""
This should be called as the first task in all calls in order to setup the correct connections
e.g. fab setup_connections task1 task2...
"""
env.roledefs = {}
env.gateway = 'ec2-user@X.X.X.X' # where all the magic happens
tag_mgr = EC2TagManager(...)
for role in ['web', 'worker']:
env.roledefs[role] = ['ubuntu@%s' % ins for ins in
tag_mgr.get_instances(instance_attr='private_ip_address', role=role)]
env.key_filename = '/path/to/server.pem'
@roles('web')
def test_uname_web():
run('uname -a')
実行fab setup_connections test_uname_web
できるようになり、Web サーバーの uname を取得できるようになりました