2017-09-09 9 views
-1

Dies ist ein sehr seltsames Problem, in das ich stecken geblieben bin, wird wirklich schätzen, wenn jemand eine Richtung geben könnte. Ich versuche, auf den Wert für request_url vom Modul web_token.py zuzugreifen.Aws Lambda-Funktion fehlgeschlagen - Python

Wenn ich versuche, web_token.py separat über pycharm auszuführen und request_url zu drucken, funktioniert es einwandfrei und generiert die URL. Ich zip diese beiden Dateien und lade sie in die Lambda-Funktion hoch, aber beim Testen bekomme ich einen Fehler "Kann Modul 'retrieve_accounts' nicht importieren: Kein Modul namens boto.sts". Ich habe sogar versucht, den Code von web_token.py in retrieve_accounts.py zu setzen, aber den gleichen Fehler zu bekommen. Ich bin sicher, dass ich etwas sehr grundlegendes verpasse es sieht boto.sts wird nicht erkannt, während das Python-Skript ausgeführt wird. Kann jemand bitte eine Anleitung geben. Danke!

retrieve_accounts.py

import boto3 
import web_token 

def get_account(event, context): 

client = boto3.client('dynamodb') 
NameID = "[email protected]" 
ManagerEmail = "[email protected]" 
response = client.scan(
    TableName='Sandbox-Users', 
    ScanFilter={ 
     'NameID': { 
      'AttributeValueList': [ 
       { 
        'S': NameID, 
       }, 
      ], 
      'ComparisonOperator': 'EQ' 
     } 
    } 
) 
if response["Count"] > 0: 
    client = boto3.client('dynamodb') 
    response = client.get_item(
     Key={ 
      'NameID': { 
       'S': NameID, 
      }, 
      'ManagerEmail': { 
       'S': ManagerEmail, 
      }, 
     }, 
     TableName='Sandbox-Users', 
    ) 
    return web_token.request_url ----------->here 

else: 
    response = client.put_item(
     Item={ 
      'NameID': { 
       'S': NameID, 
      }, 
      'ManagerEmail': { 
       'S': ManagerEmail, 
      } 
     }, 
     TableName='Sandbox-Users' 
    ) 
    return "Create Account" 

web_token.py

import httplib 
import urllib, json 
from boto.sts import STSConnection -------->Error here 

sts_connection = STSConnection() 
assumed_role_object = sts_connection.assume_role(
role_arn="arn:aws:iam::454084028794:role/AMPSandboxRole", 
role_session_name="AssumeRoleSession" 
) 

# Step 3: Format resulting temporary credentials into JSON 

json_string_with_temp_credentials = '{' 
json_string_with_temp_credentials += '"sessionId":"' + 
assumed_role_object.credentials.access_key + '",' 
json_string_with_temp_credentials += '"sessionKey":"' + 
assumed_role_object.credentials.secret_key + '",' 
json_string_with_temp_credentials += '"sessionToken":"' + 
assumed_role_object.credentials.session_token + '"' 
json_string_with_temp_credentials += '}' 

# Step 4. Make request to AWS federation endpoint to get sign-in token. 
Construct the parameter string with the sign-in action request, a 12-hour session duration, and the JSON 
    document with temporary credentials as parameters. 

request_parameters = "?Action=getSigninToken" 
    request_parameters += "&SessionDuration=43200" 
    request_parameters += "&Session=" + 
    urllib.quote_plus(json_string_with_temp_credentials) 
    request_url = "/federation" + request_parameters 
    conn = httplib.HTTPSConnection("signin.aws.amazon.com") 
    conn.request("GET", request_url) 
    r = conn.getresponse() 
    # Returns a JSON document with a single element named SigninToken. 
    signin_token = json.loads(r.read()) 
    request_parameters = "?Action=login" 
    request_parameters += "&Issuer=sandbox.com" 
    request_parameters += "&Destination=" + 
    urllib.quote_plus("https://console.aws.amazon.com/") 
    request_parameters += "&SigninToken=" + signin_token["SigninToken"] 
    request_url = "https://signin.aws.amazon.com/federation" + 
    request_parameters 
+3

Warum mischen Sie boto und boto3 da? Bleibe bei Boto3 mit etwas wie 'import boto3; client = boto3.client ('sts') ' – ydaetskcoR

Antwort

1

AWS Lambda Python-Umgebungen umfassen boto3 (und botocore). Sie enthalten nicht das ältere Boto (ein Vorläufer von Boto3), daher der Importfehler.

Sie könnten möglicherweise Boto in Ihrem Upload enthalten, aber es ist nicht ratsam, boto und boto3 zu mischen, wenn Sie es vermeiden können. Verwenden Sie das eine oder das andere, vorzugsweise boto3.

+0

Vielen Dank für Ihre Unterstützung, ich schätze es. –

Verwandte Themen