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