1

AWSラムダ関数を使用してBoto3を使用してAPIキーを作成しています。以下とローカルAWS APIキーでAWS LambdaのAPIキーをboto3を使用して作成

テストは成功です:

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' 
    }] 
) 

これはexpectedとして辞書を返す何の問題も働きません。返信辞書には、キーが含まれています。このキーには、生成されたapiキー値があります。

AWSラムダで同様の処理を行う場合、返品辞書にvalueというキーは含まれません。

これは私のラムダハンドラ機能です。 AWS boto3モジュールがするように変更され

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

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

{ 
    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'] 
} 

get_api_keyを使用しようと、私は、パラメータの検証エラーを取得:

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 
    } 

api_key_responseを印刷した結果

は以下のとおりです。 valueキーを除外しますか?どのように生成されたAPIキーを返すのですか?

+0

どのようなエラーが発生しますか? – ydaetskcoR

+0

これはエラーではなく、AWSラムダ実装の辞書でキー 'value'が返されます。 –

+1

その時点で 'api_key_response'はどのように見えますか?それを印刷してみてください – ydaetskcoR

答えて

2

ここでの違いは、Lambda環境と開発環境のAWS SDKのバージョンが異なることが原因です。

SDKの新しいバージョンでは、セキュリティ対策としてAPIキー値が特定のレスポンスから除外されています。 API値を取得するには、get_api_keyとincludeValue = Trueを別々に呼び出します。

+0

'include_value = True'の引数で' get_api_key'を使ってみましたが、 'includeValue'がパラメータの検証に失敗しました。 OPを参照してください。 –

+0

私は、AWSの実装と同じdev環境でboto3 v1.3.1を使用していることに注意してください。 –

+0

ラムダ機能にSDK(1.4)の最新バージョンをバンドルすることをお勧めします。ラムダは、SDKのリリースに遅れがちです。 http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.htmlを参照してください。 –

関連する問題