簡體   English   中英

如何使用Fabric訪問AWS的動態EC2庫存?

[英]How to access AWS's dynamic EC2 inventory using Fabric?

Fabric具有主機設置,用於指定要通過SSH連接到的計算機。

Amazon Web Services具有更多動態清單,可以使用諸如boto之類的工具在python中查詢。

有沒有辦法將這兩種服務結合起來? 理想情況下,我想是這樣簡單的事情ansible的與清單文件的方法,並使用像一個外部文件ec2.py

更具體地說,是否有針對該用例的預烘焙解決方案? 理想情況下,我想直接執行以下操作:

from fabric.api import env, task
import ec2
env.roledefs = ec2.Inventory()

@task
def command():
    run("lsb_release -a")

並假設env.roledefs['nginx']存在,以env.roledefs['nginx']運行:

$ fab -R nginx command

您可以同時使用Fabric和Boto。 首先,您需要從控制台導出aws_secret_key,aws_secret_access_key和默認區域。 架構文件名應為fabfile.py,而不應為ec2.py/other。

import boto, urllib2
from   boto.ec2 import connect_to_region
from   fabric.api import env, run, cd, settings, sudo
from   fabric.api import parallel
import os
import sys
REGION       = os.environ.get("AWS_EC2_REGION")
env.user      = "ec2-user"
env.key_filename = ["/home/user/uswest.pem"]
@task
def command():
    run("lsb_release -a")
def _create_connection(region):
    print "Connecting to ", region
    conn = connect_to_region(
        region_name = region, 
        aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID"), 
        aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY")
    )
    print "Connection with AWS established"
    return connection

最后,可以使用以下命令執行該程序。

$ fab command

http://docs.python-guide.org/en/latest/scenarios/admin/

您可以看到,如果設置env.hosts = ['my_server1','my_server2']

然后,您可以定位那些主機。

使用boto,如果您只有一個執行ec2_connection.get_only_instances(filter = {'tag':<what>}}並返回其dns名稱列表的函數,則可以設置env.hosts = [< ec2中的DNS名稱列表>]

小菜一碟!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM