2017-01-03 3 views
2

다음은 Lambda 함수입니다. Autoscaling 그룹 목록을 가져 와서 인쇄합니다.AWS Lambda : 'lambda_function'모듈을 가져올 수 없습니다. boto.ec2.autoscale이라는 모듈이 없습니다.

import json 
import boto3 
import boto.ec2.autoscale 

role = "arn:aws:iam::XXXXXXXXXX:role/lambda-autoshutdown-role" 
regions = ["eu-central-1"] 
autoscaling = boto3.client('autoscaling') 


class App(object): 
    def __init__(self,RoleArn): 
    self.RoleArn = RoleArn 

    if self.RoleArn != "local": 
     sts_client = boto3.client('sts') 
     self.sts = sts_client.assume_role(
     RoleArn=self.RoleArn, 
     RoleSessionName="lambda_poweroff")["Credentials"] 

    def get_resource(self,region="eu-central-1"): 
     if self.RoleArn == "local": 
     return boto3.resource(region_name=region) 
     else: 
     return boto.ec2.autoscale.connect_to_region(
      region_name=region, 
      aws_access_key_id=self.sts['AccessKeyId'], 
      aws_secret_access_key=self.sts['SecretAccessKey'],) 



def lambda_handler(event, context): 

    a = App(role) 

    for region in regions: 
    asgs = a.get_resource(region) 
    # locate all running instances 
    #autoscaling_groups_to_suspend = [] 
    #for i in asgs: 
    # print asgs[i] 
    print '[%s]' % ', '.join(map(str, asgs)) 

이 함수는 연결하여 개체를 반환합니다.

Unable to import module 'lambda_function': No module named boto.ec2.autoscale 

그것은 클래스 boto.ec2.autoscale처럼 보인다는 AWS에 의해로드되지 않는 : 나는 AWS에 배포 할 때

는하지만, 나는 다음과 같은 오류가 발생합니다.

무엇이 잘못 되었습니까?

답변

0

는 람다 다음 코드 조각은 모든 ASG의의 목록을 가져오고합니다 (regrex 일치하는 것을 제외)

import json 
import boto3 


regions = ["eu-central-1"] 
autoscaling = boto3.client('autoscaling') 

def lambda_handler(event, context): 

    response = autoscaling.describe_auto_scaling_groups(MaxRecords=100) 
    #print response 
    #print(response['AutoScalingGroups'][0]['AutoScalingGroupName']) 
    autoscaling_group_to_suspend = [] 
    for doc in response['AutoScalingGroups']: 
    response_parsed = doc['AutoScalingGroupName'] 
    autoscaling_group_to_suspend.append(response_parsed) 

    #print autoscaling_group_to_suspend 
    import re 
    regex = re.compile(r'es-data-asg|consul|influxdb|vault|es-master') 
    filtered = filter(lambda i: not regex.search(i), autoscaling_group_to_suspend) 
    filtered = [i for i in autoscaling_group_to_suspend if not regex.search(i)] 
    print filtered 

    if len(filtered) > 0: 
    for x in filtered: 
     autoscaling.suspend_processes(AutoScalingGroupName=x) 
0

에만 사용해야합니다

import boto3 
client = boto3.client('autoscaling') 

참조 : 내가 S3와 같은 일을하려고 http://boto3.readthedocs.io/en/latest/reference/services/autoscaling.html

+0

내가 boto3 사용하지 않으려는 그들을 일시 중단합니다. describe_auto_scaling_groups() 메소드가 JSON dict를 리턴하는 방식으로 클라이언트 ('autoscaling')를 사용하고 있습니다. 배열이나리스트 인 리턴 타입에 관심이 있습니다.'get_resource'가리스트를 리턴합니다. – Spaniard89

0

. boto.s3.connect_to_region() 필요하지만 같은 오류가 발생합니다. 아마 lambda 의존성에서 boto 모듈을 임포트하면이 문제가 해결 될 수 있습니다. 그렇지 않으면 boto3.client를 사용하고 json 응답을 파싱하여 적절한 값을 얻어야 할 수도 있습니다. 대답을 찾고 사람을