2016-11-08 51 views
0

我正在使用具有實例配置文件的ec2實例配置文件啓動服務器。AWS:如何確保在啓動ec2服務器時初始化和傳播實例配置文件

問題是檔案有時是不是「有」創建後,即使我等待如10秒內:

# Create new Instance Profile 
    instanceProfile = self.iam.create_instance_profile(InstanceProfileName=instProfName) 
    instanceProfile.add_role(RoleName="...") 

    time.sleep(10) 

    # Create the Instance 
    instances = self.ec2.create_instances(
    # ... 
    IamInstanceProfile={ 
     "Name":instanceProfile.instance_profile_name 
    } 
) 

有沒有辦法來等待它被傳播?

我第一次嘗試是:

error = 30 
    dryRun = True 

    while error > 0: 
    try: 
     # Create the Instance 
     instances = self.ec2.create_instances(
      DryRun=dryRun 
      # ...    
      IamInstanceProfile={ 
       "Name":instanceProfile.instance_profile_name 
      } 
     ) 
     if not dryRun: 
      break; 

     dryRun = False 

    except botocore.exceptions.ClientError as e: 
     error = error - 1; 

,但我怎麼只得到IAM配置文件錯誤?

回答

0

AWS的大部分工作使用「最終一致性」。這意味着在你做出改變之後,在系統中傳播需要一些時間。

在創建實例簡介:

  1. 延遲5秒或10秒(或你舒服一些其他時間),
  2. 呼叫iam.get_instance_profile與您的實例配置文件名稱。
  3. 重複延遲並檢查,直到get_instance_profile返回您的信息。

您可以做的另一件事是在ec2.create_instances調用期間捕獲「實例配置文件未找到錯誤」,如果出現該錯誤,則延遲並重復。

+0

我該如何捕捉一個只有「ClientError」的錯誤? – Tobi

+0

您需要檢查'e'來查看是否有任何可區分的數據。否則,你只需要重新嘗試任何這樣的錯誤。 –

+0

嗯...問題是我不能檢查'E'沒有真正嘗試啓動一個實例 – Tobi

相關問題