0

我是無服務器框架的新手,我想獲取實例的狀態,所以我用boto3 describe-instance-status()但我不斷收到錯誤,我沒有被授權執行這種操作,雖然我有管理員訪問權限對所有aws服務;請大家幫忙,我需要改變,或添加什麼東西被識別使用無服務器來獲取實例的狀態

這裏是我的代碼:

import json 
import boto3 
import logging 
import sys 

#setup simple logging for INFO 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 

from botocore.exceptions import ClientError 


def instance_status(event, context): 
"""Take an instance Id and return its status""" 
#print "ttot" 
body = {} 
status_code = 200 
client = boto3.client('ec2') 
response = client.describe_instance_status(InstanceIds=['i-070ad071']) 

return response 

,這裏是我的serverless.yml文件

service: ec2 
provider: 
    name: aws 
    runtime: python2.7 
    timeout: 30 
    memorySize: 128 
    stage: dev 
    region: us-east-1 
    iamRoleStatements: 
    - Effect: "Allow" 
     Action: 
      - "ec2:DescribeInstanceStatus" 
     Resource: "*" 


functions: 
    instance_status: 
    handler: handler.instance_status 
    description: Status ec2 instances 

events: 
    - http: 
     path: '' 
     method: get 

這裏是我得到的錯誤消息:

「errorType」:「ClientError」,「errorMessage」:「發生錯誤 (Unautho rizedOperation)調用DescribeInstanceStatus 操作時:您無權執行此操作。「

+2

您正在使用拉姆達?什麼是您的lambda的IAM角色使用? IAM角色是否有權執行EC2的資源?仔細檢查此角色的權限。 –

+0

我沒有指定角色,我可以在serverless.yml中執行此操作嗎?女巫的角色是最方便與boto3圖書館合作 – ner

+0

請分享您的IAM策略附加的角色。 –

回答

0

您無權執行此操作

這意味着你沒有執行此操作client.describe_instance_status權限。

有一些方法可以讓你的函數可以得到正確的權限:

  1. 使用IAM角色:創建權限accroding您的要求IAM角色。然後在設置頁面中爲該lambda函數分配這個IAM角色。所以你的lambda會自動獲得旋轉鍵來執行動作。
  2. 根據您的要求創建AccessKey/SecretKey。在yaml文件中設置,在你的lambda函數中,設置boto3來獲得這些訪問/ secretKey,然後執行操作。

更多從這個http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html

+0

我確實改變了aws控制檯中的角色以訪問boto3,它在aws控制檯中工作正常,但是當我用http端點測試它時,它給了我{「message」:「Internal server error」}我認爲我需要添加一些東西給我的無服務器。yml文件,但不知道如何使用無服務器做到這一點 – ner

1

...我有所有AWS服務的管理員訪問權限......

,請注意該lambda函數是不是你的用戶帳戶下運行。你應該在你的YAML中定義它的角色和權限。

provider部分在serverless.yaml,添加以下內容:

iamRoleStatements: 
    - Effect: Allow 
    Action: 
     - ec2:DescribeInstanceStatus 
    Resource: <insert your resource here> 

參考:https://serverless.com/framework/docs/providers/aws/guide/iam/

+0

我做了同樣的事情,但不知道爲什麼我一直得到相同的錯誤 – ner

+0

然後更新你的原始問題'serverless.yml'。也許'資源'是不正確的?還是縮進? – dashmug

+0

我剛剛做了,請不要問太多,你能否檢查一下是否正確 – ner