1

Ich verwende eine AWS Lambda-Funktion, um einen API-Schlüssel mit Boto3 zu erstellen.API-Schlüssel in AWS API Gateway von AWS Lambda mit boto3 erstellen

Prüfung vor Ort mit der folgenden ist erfolgreich:

import boto3 

client = boto3.client('apigateway') 

response = client.create_api_key(
    name='test_user_from_boto', 
    description='This is the description', 
    enabled=True, 
    generateDistinctId=True, 
    value='', 
    stageKeys=[{ 
     'restApiId':'aaa', 
     'stageName':'beta' 
    }] 
) 

Dies funktioniert kein Problem ein Wörterbuch als expected zurück. Das Rückgabewörterbuch enthält einen Schlüssel value, der den generierten API-Schlüsselwert hat, was ich möchte.

Wenn Sie etwas ähnliches in AWS Lambda tun, enthält das Rückkehrwörterbuch den Schlüssel value nicht.

Dies ist meine Lambda-Handler-Funktion.

import boto3 


api_id = 'zzz' 
plan_id_map = { 
    'trial': 'aaa', 
    'basic': 'bbb', 
    'professional': 'ccc' 
} 

def handler(event, context): 
    user_name = event['user_name'] 
    stage = event['stage'] 
    plan = event['plan'] 

    client = boto3.client('apigateway') 
    api_key_response = client.create_api_key(
     name=user_name, 
     description='', 
     enabled=True, 
     # generateDistinctId=True, # including this argument throws an error 
     # value='', # including this argument throws an error 
     stageKeys=[{ 
      'restApiId': api_id, 
      'stageName': stage 
     }] 
    ) 

    user_key_id = api_key_response['id'] 
    user_api_key = api_key_response['value'] # throws a key error here 

    plan_response = client.create_usage_plan_key(
     usagePlanId=plan_id_map[plan], 
     keyId=user_key_id, 
     keyType='API_KEY')  

    return { 
     'user_name': user_name, 
     'user_key_id': user_key_id, 
     'user_api_key': user_api_key 
    } 

Die Ergebnisse aus api_key_response Druck ist die folgende:

{ 
    u'name': u'test_user_from_lambda', 
    'ResponseMetadata': { 
     'HTTPStatusCode': 201, 
     'RequestId': 'b8298d38-7aec-11e6-8322-5bc341fc4b73', 
     'HTTPHeaders': { 
      'x-amzn-requestid': 'b8298d38-7aec-11e6-8322-5bc341fc4b73', 
      'date': 'Thu, 15 Sep 2016 02:33:00 GMT', 
      'content-length': '203', 
      'content-type': 'application/json' 
     } 
    }, 
    u'createdDate': datetime.datetime(2016, 9, 15, 2, 33, tzinfo=tzlocal()), 
    u'lastUpdatedDate': datetime.datetime(2016, 9, 15, 2, 33, tzinfo=tzlocal()), 
    u'enabled': True, 
    u'id': u'xyzxyz', 
    u'stageKeys': [u'abcabc/beta'] 
} 

Bei dem Versuch, get_api_key zu verwenden, habe ich eine Parametervalidierung Fehler:

get_api_key_response = client.get_api_key(
    apiKey='585yw0f1tk', 
    includeValue=True 
) 

Unknown parameter in input: "includeValue", must be one of: apiKey: ParamValidationError 

die AWS boto3 Modul modifiziert zu den Schlüssel value ausschließen? Wie gebe ich den generierten API-Schlüssel zurück?

+0

Welchen Fehler wirft es? – ydaetskcoR

+0

Es ist kein Fehler, der Schlüssel 'value' wird nur in das Wörterbuch in der AWS Lambda-Implementierung zurückgegeben, wo es sonst geschieht. –

+1

Also wie sieht 'api_key_response' an diesem Punkt aus? Versuchen Sie, es zu drucken – ydaetskcoR

Antwort

2

Der Unterschied hier kann auf verschiedene Versionen des AWS SDK in Ihrer Lambda-Umgebung gegenüber Ihrer Entwicklungsumgebung zurückgeführt werden.

In neueren Versionen des SDK wurde der API-Schlüsselwert in bestimmten Antworten als Sicherheitsmaßnahme weggelassen. Sie können den Wert des API-Schlüssels über einen separaten Aufruf an get_api_key mit includeValue abrufen = True

+0

Ich habe versucht mit 'Get_api_key' mit dem' includeValue = True' Argument und 'includeValue' Fails Parameter Validierung. Siehe OP. –

+0

Ich sollte beachten, dass ich boto3 v1.3.1 auf meiner Entwicklungsumgebung verwende, die der AWS-Implementierung entspricht. –

+0

Ich würde vorschlagen, die neueste Version des SDK (1.4) in Ihrer Lambda-Funktion zu bündeln. Lambda neigt dazu, bei SDK-Releases zurückzufallen. Siehe http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html –

Verwandte Themen