2

Serverless Framework sürüm 0.4.2 ile bir lambda işlevinin API ağ geçidi entegrasyonunu yapıyorum.requestParametreler dönen "Geçersiz eşleme ifadesi belirtildi: true"

Sorunum, bir bitiş noktasının istek parametrelerini tanımlamaktır. AWS docs for API gateway giriş diyor ki:

requestParameters

Amazon API ağ tarafından kabul edilebilir istek parametreleri temsil eder. İstek parametreleri, anahtar olarak bir kaynak ve değer olarak bir Boole bayrağı ile bir anahtar/değer haritası olarak temsil edilir. Boole bayrağı, parametrenin gerekli olup olmadığını belirtmek için kullanılır. Bir kaynak, modelin method.request ile eşleşmesi gerekir. {Location}. {Name}, burada konum ya querystring, path ya da header. ad geçerli, benzersiz bir parametre adıdır. Burada belirtilen kaynaklar, entegrasyon istek parametrelerini veya şablonlarını eşlemek için entegrasyon için kullanılabilir.

Anladığım kadarıyla

, s-function.json config AWS CLI doğrudan verilir, bu yüzden biçiminde istek parametreleri belirttiğiniz: "method.request.querystring.startYear": true. Ancak, bir Invalid mapping expression specified: true hatası alıyorum. Aynı sonucu, yapılandırmayı "method.request.querystring.startYear": "true" olarak belirtmeyi de denedim.

s-function.json:

{ 
    "name": "myname", 
    // etc... 
    "endpoints": [ 
     { 
      "path": "mypath", 
      "method": "GET", 
      "type": "AWS", 
      "authorizationType": "none", 
      "apiKeyRequired": false, 
      "requestParameters": { 
       "method.request.querystring.startYear": true, 
       "method.request.querystring.startMonth": true, 
       "method.request.querystring.startDay": true, 
       "method.request.querystring.currentYear": true, 
       "method.request.querystring.currentMonth": true, 
       "method.request.querystring.currentDay": true, 
       "method.request.querystring.totalDays": true, 
       "method.request.querystring.volume": true, 
       "method.request.querystring.userId": true 
      }, 
      // etc... 
     } 
    ], 
    "events": [] 
} 

Herhangi bir fikir? Şimdiden teşekkürler!

cevap

1

O configuring the integration request section içindir s-function.json dosyada requestParameters benziyor, bu yüzden kullanarak sona erdi:

"requestParameters": { 
    "integration.request.querystring.startYear" : "method.request.querystring.startYear", 
    "integration.request.querystring.startMonth" : "method.request.querystring.startMonth", 
    "integration.request.querystring.startDay" : "method.request.querystring.startDay", 
    "integration.request.querystring.currentYear" : "method.request.querystring.currentYear", 
    "integration.request.querystring.currentMonth" : "method.request.querystring.currentMonth", 
    "integration.request.querystring.currentDay" : "method.request.querystring.currentDay", 
    "integration.request.querystring.totalDays" : "method.request.querystring.totalDays", 
    "integration.request.querystring.volume" : "method.request.querystring.volume", 
    "integration.request.querystring.userId" : "method.request.querystring.userId" 
}, 

Bu durum gösterge tablosunda yöntem isteği bölümüne otomatik ekleyerek sona erdi:

Method request section with parameters automatically added

sonra gönderilecek bir yöntem sonrası bunları açmak haritalama şablonda için kullanabiliriz Lambda işlevime event olarak. Şu anda kullandığım belirli bir eşleme şablonum var, ancak ileride tüm girişleri genel bir şekilde eşleştirmek için Alua K's suggested method kullanabilirim, böylece her işlev için ayrı bir eşleme şablonu yapılandırmam gerekmeyecek.

1

Sen de sağ uç noktalarını kullandığınızdan emin olun bu event.querystring

+0

diğer daha iyi bir çözüm http://stackoverflow.com/a/33602122/2318357. Ama sls içermez. –

+0

http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api-gateway/ –

+0

Sözdizimi hakkında daha çok endişeliydim/Bu soru için 'requestParameters 'biçimi, ancak bu da kullanmaya başlayacağım iyi bir öneri – Seafish

0

gibi sorgu dizesi lambda fonksiyonu erişimi de

"requestTemplates": { 
    "application/json": { 
     "querystring": "$input.params().querystring" 
     } 
} 

gibi lambda sorgu params geçebilir. AWS'de iki tür ya da birkaçı var .. arkadaşım geçmişte yakalandı.