2017-09-26 53 views
1

有參與我的任務如何以編程方式將數據下載到AWS EC2實例?

  • A 3臺機器:我的桌面
  • B:EC2實例由A
  • C紡起來:遠程Linux服務器裏的數據坐在我只讀過特權

任務已基本3個步驟

  1. 自旋向上BCA
  2. 數據下載到B到特定的位置
  3. 改變一些下載的數據對B

我知道如何使用awscli或boto3做1。步驟2和3很容易,如果我手動ssh到EC2實例。問題是,如果這項任務需要自動執行,我該如何處理登錄憑證。

具體來說,我在考慮使用user_data在EC2實例出生後運行shell腳本,但數據下載使用需要密碼的scp。然後,我可以上傳一個ssh證書文件到EC2實例,但我不能利用user_data運行腳本步驟2和3

所以我目前的解決方案是所有的shell腳本

  1. 自旋向上BA
  2. 上傳SSH憑證從AB
  3. SSH從AB與附接外殼命令,其中該任務步驟2和3進行

這個解決方案對我來說顯得非常難看。在這種情況下是否有更好的做法?

+0

您是否嘗試過B上的ec2角色? –

+0

如果'C'不是aws實例,ec2-roles會起作用嗎? – nos

回答

0

給一個嘗試ansible它可以幫助你通過創建playbook

對於創建一個實例,你可以使用ec2 module這個任務自動化,從文檔的例子:

# Basic provisioning example 
- ec2: 
    key_name: mykey 
    instance_type: t2.micro 
    image: ami-123456 
    wait: yes 
    group: webserver 
    count: 3 
    vpc_subnet_id: subnet-29e63245 
    assign_public_ip: yes 

要下載數據,get_url模塊,例如:

- name: Download file with check (md5) 
    get_url: 
    url: http://example.com/path/file.conf 
    dest: /etc/foo.conf 
    checksum: md5:66dffb5228a211e61d6d7ef4a86f5758 

對於modifying files有多個模塊可以在http://docs.ansible.com/中找到。

整體來說,這是一個可以幫助自動化許多事情的工具,但需要一些時間來獲得基礎,請檢查Getting started guide,希望它能提供幫助。

+0

如果我需要使用scp從服務器'C'下載數據,該怎麼辦?如何處理密碼或密鑰? – nos

+0

可以使用堡壘主機的相同原理,查看本文https://blog.scottlowe.org/2015/12/24/running-ansible-through-ssh-bastion-host/,同時檢查這個答案https: //stackoverflow.com/a/28258709/1135424 – nbari

0

有很多方法可以解決您的任務。我不會說任務1(從A旋轉B),因爲你已經完成了它。

選項1:使用EC2 Run command將命令推送到服務器B。流程:A -> EC2 Run Command service -> B -> C無需將證書(SSH密鑰/密碼)推送到服務器B
選項2:定義bash shell文件中的所有命令,將此shell文件推送到S3。使用服務器BUser Data從S3下載該文件。流程:A -> S3. B get file from S3. B -> C

有了上述2個選項,您不需要將任何憑據推送到服務器B。服務器C可以是任何您需要連接BC以進行下載任務的地方。

+0

我不明白爲什麼選項1和選項2可以免除我推推倒「B」的麻煩。 'B'從'C'獲取數據時需要憑證。假設shell腳本'B'運行了ssh,選項1和2如何提供證書? – nos

+0

非常抱歉,我想了解您的憑證對於訪問'C'是必要的。如果是這樣,爲什麼你不使用'A'訪問'C'並下載到'A',因爲'A'已經有了憑證?然後,'A'複製到'B'並執行其他任務 –

+0

我需要下載一些非常大的東西,這樣做會浪費兩次。 – nos

1

3個選項

  1. 傳遞所述加密/編碼的密碼作爲用戶數據的一部分。用戶數據腳本將首先對密碼進行解密/解碼並將其用於來自C的文件scp。然後刪除用戶數據或刪除加密/編碼的密碼
  2. 使用ssh密鑰而不是ssh密碼。但風險是你必須通過用戶數據中的私鑰。不是一個安全的方式。
  3. 使用Ansible和ssh密鑰。但是對於一個簡單的任務來說工作太多
相關問題