Die einfachste Art, einen Lambda zu verpacken und bereitzustellen, ist inlined mit CloudFormation. Inlined bedeutet, dass der Quellcode Teil
der CloudFormation-Vorlage ist. Das Inlining von Code hat viele Vorteile, aber auch einige Nachteile. Dieser Artikel erörtert die Vor- und Nachteile
des Inlinings von Lambda-Code.
Vorteile
Das Einfügen von Lambda-Code hat die folgenden Vorteile:
- Einfache Verpackungsstrategie,
- Einfache Einsatzstrategie,
- Ein einziges Artefakt für Verpackung und Bereitstellung,
- Der Code ist Teil der Definition der Infrastruktur (CloudFormation),
- Der Code ist Teil des Infrastruktur-Commits,
- Die Versionierung von Lambda-Code ist kostenlos,
- Inlined Code hat das AWS SDK zur Verfügung Es gibt viele Vorteile für das Inlining von Lambda-Code, aber auch einige Nachteile.
Benachteiligungen
Das Inlining von Lambda-Code hat folgende Nachteile:
- Keine benutzerdefinierten Bibliotheken,
- Nur für Python oder NodeJS verfügbar,
- Maximal 4000 Zeichen pro inlined Lambda
Der größte Nachteil eines inlined Lambdas ist, dass es keine benutzerdefinierten Bibliotheken unterstützt. Das bedeutet, dass Bibliotheken von Drittanbietern
nicht verpackt oder aufgerufen werden können, mit Ausnahme des AWS SDK.
Ersetzen Sie Leerzeichen durch Tabulatoren
Beim Einbinden von Lambda-Code gibt es eine Grenze von 4000 Zeichen. Auch ein Leerzeichen zählt als ein Zeichen. Wenn Sie Python als
Programmiersprache verwenden, ist es hilfreich, Leerzeichen durch Tabulatoren für die Einrückung zu ersetzen. Da ein Zeichen eine wertvolle Ressource
beim Inlining eines Lambdas ist, spart dies Zeichen für den Code.
Ein Beispiel für ein inlined Lambda
Ein inlined Lambda ist Teil der CloudFormation-Vorlage. Beim Inlinen muss die Eigenschaft
gesetzt werden: Code.ZipFile, wie unten gezeigt.
NodeJS:
NodeFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: NodeFunction
content: Node Function Handler
Handler: index.handler
Runtime: nodejs6.10
Role: !GetAtt LambdaBasicExecutionRole.Arn
Code:
ZipFile: |
exports.handler = function(event, context, callback) {
console.log(event);
const response = {
statusCode: 200,
body: JSON.stringify('Hello Node')
};
callback(null, response);
};
Python:
PythonFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: PythonFunction
content: Python Function Handler
Handler: index.handler
Runtime: python3.6
Role: !GetAtt LambdaBasicExecutionRole.Arn
Code:
ZipFile: |
import json
def handler(event, context):
response = {
'statusCode': 200,
'body': json.dumps('Hello Python')
}
return response
aws-cfn-update
Das Dienstprogramm aws-cfn-update von binx.io macht es einfach,
Inline-Lambda-Code in eine CloudFormation-Vorlage zu integrieren. Das Beispielprojekt zeigt, dass es möglich ist, den Lambda-Quellcode
in einem separaten Ordner und einer separaten Datei zu haben. Diese Trennung erleichtert die Entwicklung von Lambdas und ermöglicht einen Entwicklungs- und Testzyklus.
Beispiel
Das Beispiel-Repository zeigt, wie Sie
ein Inline-Lambda erstellen, bauen und bereitstellen. Es zeigt auch, wie Sie den Lambda-Code von der CloudFormation-Vorlage trennen und wie Sie
den Code mit der CloudFormation-Vorlage zusammenführen. Das Beispiel zeigt ein Python- und ein NodeJS-Beispiel-Lambda, die Handler
für API Gateway sind.
Anhand des Beispiels
Ich gehe davon aus, dass Sie einen Mac haben, auf dem python, pipenv und sceptre installiert sind. Um das Beispiel auszuführen, geben Sie
Um die URL des Api-Gateways zu erhalten, geben Sie make delete ein.
Fazit
CloudFormation unterstützt eingebetteten Lambda-Code. Die Vorteile des Inlinings von Lambda-Code sind eine einfache Paketierungs- und Bereitstellungsstrategie,
ein einziges Paketierungs- und Bereitstellungsartefakt, Code ist Infrastruktur-als-Code, Code ist Teil des Infrastruktur-Commits, einfache
Lambda-Versionierung und die Verfügbarkeit des AWS SDK. Die Nachteile von Linining Lambda Code sind: keine Unterstützung für benutzerdefinierte Bibliotheken,
Begrenzung auf 4000 Zeichen und nur für Python und NodeJS verfügbar.
Verfasst von
Dennis Vriend
Unsere Ideen
Weitere Blogs
Contact




