1

Ich habe eine Website (statische Sitzung in s3), Inhalt wird von s3 serviert. Ich plane, eine Ruhe-API (Knoten oder offen für Vorschläge) zu schreiben. Wenn das Frontend eckigen $ http-Aufruf macht, Beispiel, wenn meine Site example.com heißt, dann sollte der Aufruf etwas wie relative URL (/ Update) sein, die aufgelöst werden soll.Welcher AWS-Dienst wird zum Bereitstellen des Back-Ends verwendet?

Ich bin mir nicht sicher, welche Art von aws-Dienst ich verwenden sollte, um meinen Backend-Code zu implementieren.

Aktualisiert

ich Codestar verwende, Express Web-Service. Hier ist meine Vorlage.yml. und Routen. Der Code-Star-Build funktioniert problemlos, die Bereitstellung schlägt jedoch fehl.

template.yml

AWSTemplateFormatVersion: 2010-09-09 
Transform: 
- AWS::Serverless-2016-10-31 
- AWS::CodeStar 

Parameters: 
    ProjectId: 
    Type: String 
    Description: AWS CodeStar projectID used to associate new resources to team members 

Resources: 
    HelloWorld: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: 
     Fn::ImportValue: 
      !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 
     Events: 
     GetEvent: 
      Type: Api 
      Properties: 
      Path:/
      Method: get 
     PostEvent: 
      Type: Api 
      Properties: 
      Path:/
      Method: post 
    GetItemsBylId: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: 
     Fn::ImportValue: 
      !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 
     Events: 
     GetEvent: 
      Type: Api 
      Properties: 
      Path: /api/getItemsBylId/:id 
      Method: get 

Hier ist meine app.js

var express = require('express'); 
var app = express(); 

app.get('/', function (req, res) { 
    res.send({ 
    "Output": "Hello World!" 
    }); 
}); 

app.get('/api/GetItemsBylId/:id', function (req, res) { 
    res.send({ 
     "Output": "I am up!" 
    }); 
}); 

Hier ist der Fehler von der Entwicklung bei GetItemsBylId

Failed to set tags on AWS::Lambda::Function. IAM permissions lambda:ListTags, lambda:TagResource and lambda:UntagResource are required to tag AWS::Lambda::Function resources and to propagate stack level tags. 

Ich bin mir ziemlich sicher, dass es wegen der ID param ist.

aktualisieren

löste das Tag-Ausgabe Abfrage params verwenden. Anstatt resouce: id zu verwenden, verwende ich jetzt? Id = "".

+0

Sie haben das API-Gateway in Betracht gezogen – Henry

+1

Sie implementieren den Back-End-Code nicht auf dem API-Gateway. Es wird verwendet, um Backend-Code mit URL-Endpunkten zu verbinden. –

Antwort

3

Es gibt ein paar Dinge hier zu betrachten:

API Gateway +

Lambda ist das, was oft eine serverless Lösung in Betracht gezogen wird. Anstatt sich Gedanken über die zugrunde liegende Infrastruktur zu machen, schreiben Sie einfach den Code aus und die zugrunde liegenden verwalteten AWS-Ressourcen führen sie für Sie aus. Das API-Gateway ist in Lambda integriert, damit Sie verschiedene REST-Stil-URLs zu Lambda-Funktionen zuordnen können.

Vorteile

  • Für schnelle Anrufe kosten sehr effektiv
  • Einfache Integration mit AWS-Diensten durch
  • in SDKs gebaut
  • Verwendung von IAM Rollen einfachen Zugang zu Diensten zu ermöglichen, ohne
  • über Berechtigungsnachweise zu kümmern brauchen
  • Eine große Anzahl von ihnen kann parallel für viele Anrufe ausgeführt werden
  • Unterstützung für eine Reihe von Sprachen, einschließlich NodeJS
  • Sie sich keine Gedanken über die Verfügbarkeit Zonen mit nativer kompilierte Pakete Umgang
  • Eine harte Grenze von 5 Minuten

Nachteile

  • Begrenzte Ressourcen
  • sorgen kann etwas mühsam sein. Dies kann Aufgaben wie den Umgang mit Bildern/Videos unwahrscheinlicher Kandidaten für die Verwendung machen.
  • Speicherplatz ist sehr begrenzt

Elastic Container Service

Eine interessante Art und Weise EC2-Instanzen zu nutzen, sie in Behälter zerstückeln. Besonders schön, wenn Sie es gewohnt sind, mit Docker-Bildern umzugehen.

Vorteile

  • Bessere Methoden des mit der Verarbeitung von großen Dateien
  • keine Notwendigkeit, über das Lambda-Timeout
  • Fähigkeit zur Sorge Umgang EC2-Instanzen zerstückeln, um besser die vollen Maschinenressourcen zu nutzen und bekommen, was Sie zahlen für

Nachteile

  • könnte schwierig sein, wenn Sie mit Docker/Container
  • noch sein werden teurer als die Lambda Strecke
  • Vielleicht mögen zu überdenken, wenn du gehst, um mit einem hohen IO nicht vertraut ist, zu verstehen type setup
  • Eventuell mit Mapping-Routen zu tun haben -> Dienste
  • Sie müssen darauf achten, dass Ihre Instanzen nicht in einer einzigen Verfügbarkeitszone sind, im Wesentlichen alle Ihre Dienste herunter zu bringen, bis Sie neue Ressourcen in einem anderen Spin Verfügbarkeitszone.

Elastic Compute (EC2)

würde ich empfehlen, für die mehr IO zentriert Workloads in diese suchen. Es gibt eine Reihe von verfügbaren Optionen, einschließlich bereitgestellter IOPS, Instanzspeicher, hoher IO-Instanztypen usw.

Vorteile

  • Die Kontrolle über das System, und eine Einrichtung, die für diejenigen, die traditionellen VPS verwendet einfacher sein kann
  • viel einfacher Hosting, wenn Sie mit benutzerdefinierten Bibliotheken, nativen Code beschäftigen müssen, verschiedene Sprachen
  • IAM Rollen zu einer EC2-Instanz gebunden ist, kann verwendet werden, um darunter liegende Code einfachen Zugriff auf AWS-Ressourcen zu erlauben
  • Eine Reihe von Instanztypen für hohe IO, hohe Bandbreite und andere Bedürfnisse
  • kann ein System angepasst werden, wandte sich dann in eine AMI für reproduzierbare Systeme zu ermöglichen
  • kann einfacher sein, mit für einige arbeiten als Docker/Container Lösungen
  • kann mit dem Loadbalancer/automatische Skalierung Gruppen leicht arbeiten zu skalieren und unten je nach Bedarf, während auf einen einzelnen Endpunkt darauf hinweisen können (der Load Balancer) und mit nicht zu befürchten

Nachteile

  • Kosten wird ein Thema sein
  • Ständige Überwachung, um sicherzustellen, dass Ihre Instance-Typen Ihren Anforderungen entsprechen und nicht das, was Sie bezahlen
  • nicht unterbewerten Das Preismodell kann etwas komisch sein, da es pro Stunde oder Monat ist. Es gibt jedoch Kalkulationsrechner, die Ihnen Ihre geschätzten monatlichen Kosten mitteilen.
  • Wenn Sie Lastenausgleich verwenden (was ideal ist) gibt es zusätzliche Kosten
  • Bedenken Sie die Verfügbarkeit Zonen in, wo Sie Ihre Server platzieren, obwohl Auto Scaling Groups bei der Automatisierung helfen kann. Dennoch ist es ein weiterer zu berücksichtigender Kostenpunkt.
  • Sie erhalten das zugrunde liegende Betriebssystem zu verwalten, einschließlich Updates

Elastic Beanstalk

Dies ist eine nette Schnittstelle zum EC2 Seite der Dinge. Kann nützlich sein, wenn Sie nur Code haben, den Sie ausführen möchten und lieber etwas anderes machen würde, um die Entscheidungen darüber zu treffen, wo/wie es ausgeführt werden soll.

Vorteile

  • nimmt viel das Rätselraten für grundlegende Anwendungsfälle
  • entfernt Die meisten der gleichen Vorteile wie EC2 + Load Balancing hat

Nachteile

  • Da Ressourcen abstrahiert werden, müssen Sie viel genauer auf die Kosten achten, die Ihnen entstehen
  • Kann es ein bisschen schwieriger Änderungen an den zugrunde liegenden Ressourcen zu machen (obwohl an dieser Stelle Sie auf der Ebene sein könnte, wo man Dinge ohne Elastic Beanstalk verwalten kann)

nun die Datenbanken in Bezug auf die Sie benötigen speichern Dinge:

DynamoDB

A NoSQL-Datenspeicher. Wenn es Ihnen gelingt, Daten als Schlüssel-Wert-Paare zu speichern, ohne dass viele Daten miteinander in Beziehung stehen, dann ist das ein guter Preis. Die Freigrenzen sind ebenfalls gut.

Vorteile

  • Einfache Methode/Schreiblast
  • Sehr schnelle
  • Hat Caching, wenn Sie es
  • Sehr schön Preis frei Tier-Modell

Nachteile müssen verfügbar lesen die Verwaltung von

  • gut nicht mit strukturierten Daten mit einer Menge von Beziehungen und die Notwendigkeit zur Abfrage auf diese Beziehungen für die Arbeit
  • Es Indizes ist, aber Sie beginnen zu zahlen, wenn Sie zusätzliche Drucker brauchen
  • könnte für diejenigen, die nicht verwendet werden, verwirrend zu NoSQL
  • über freies Tier beginnt in stündlichen und pro GB Preis
  • viel einfacher zu finden SDK/APIs, die sie mit gängigen relationalen Datenbanken zu bekommen

SimpleDB

Genauso wie der Name eine ziemlich einfache DB sagt. Dies ist gut für den Umgang mit relativ kleinen Arbeitslasten oder einen Ort, um Daten vorübergehend zu speichern.

Vorteile

  • mit strukturierten Daten
  • Gebühren, die Sie zu bestimmtem Zeitrahmen Zu basierend umgehen kann, im Vergleich zu Ihnen für immer auf Instanzen wie Aufladen, was Sie für EC2
  • Freies Tier haben würden, ist vernünftig für kleine Lasten

Nachteile

  • nicht ideal sein würde, wenn Sie große Datenmengen ist eine 1 GB kostenlos Tier Grenze
  • Das Preismodell ein wenig verwirrend
  • Nicht empfohlen werden kann gespeichert werden sollen, wenn Sie in hohe Lese gehen müssen/schreiben Workflows
  • wahrscheinlich besser mit dem RDS-Lösung zu gehen, wenn Sie strukturierte Daten und den Zugang benötigen sie so ziemlich die ganze Zeit

RDS

Was Sie von Datenbanken erwarten, mit denen die meisten Leute vertraut sind. Beinhaltet MySQL, Aurora (angepasster MySQL-Server), PostgreSQL, Oracle, SQL-Server.

Vorteile

  • Mehr eng aufeinander abgestimmt mit, wie viele Leute mit Datenbanken zu tun haben
  • ist besser bei der Arbeit mit strukturierten Daten als DynamoDB
  • verwendet werden, da es durch populäre Datenbanken gesichert ist, macht es ein wenig einfacher für den Datenimport/-export, vor allem, wenn Sie die Daten lokal überprüfen möchten
  • SQL-Clients sind in den meisten Programmiersprachen ziemlich Standard, so dass es viel einfacher sein wird, mit
  • zu verbinden

Nachteile

  • nicht so groß im Vergleich zu DynamoDB kostenlosen Tiere
  • teuer bekommen kann je nach Bedarf
  • Es ist ein wenig mehr in Abstimmung IO Leistung

Ich denke, Ich habe die grundlegenden Vor- und Nachteile angesprochen, vermisse aber wahrscheinlich einige Punkte, an die mich der Kommentarbereich danach erinnert. Ich empfehle auch sehr, alle verlinkten Seiten zu betrachten, um ein besseres Verständnis der Dienste zu bekommen und was Ihren Bedürfnissen entspricht, da es nur so viel gibt, was ich in diese Antwort fallen lassen kann.

+0

Vielen Dank für Ihre Zeit und nette Erklärung. Ich schätze es sehr. Ich werde wahrscheinlich Lambda + Gateway-Route nehmen. Ich erkunde die Kosten, da ich im freien Tier bin, ich hoffe, es wird nicht viel sein. – Aj1

1

Es gibt nicht wirklich genug Informationen, um Ihnen eine gute Antwort zu geben. Es hängt davon ab, was Ihr Backend tun muss und wie es skaliert werden muss. Wenn Sie nur eine einfache Funktionalität bereitstellen müssen, sind AWS Lambda-Funktionen eine gute, einfache und sehr preiswerte Möglichkeit, dies zu tun, ohne eine gesamte EC2-Instanz in Gang zu setzen. Lambda-Funktionen unterstützen Node.js (sowie Python, C# & Java).

Es ist eine gute Möglichkeit, Dinge auszuprobieren ohne zu viel Engagement. Der Code sollte einfach auf eine EC2-Instanz mit Node umgestellt werden können, falls Sie sich entscheiden, dass Sie eine geeignetere Serverumgebung benötigen oder Dinge in ein Dateisystem schreiben müssen.

Es kann einfacher sein, Ihre API auf einer Subdomain zu hosten, dh api.example.com, anstatt unter der gleichen Domäne wie Ihre S3-Bucket, aber wenn Sie sie alle unter der gleichen Domäne benötigen, könnten Sie es wahrscheinlich tun Einrichten eines S3-Proxys im Gateway. (http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html)

+0

Vielen Dank für den Vorschlag. Ich schätze es sehr. – Aj1

1

Sie sollten AWS Codestar auschecken.

Mit einem einzigen Tastendruck erhalten Sie eine vollständig ausgeführte CI/CD-Pipeline und einen öffentlich verfügbaren Endpunkt, für den Sie sich entwickeln können.

+0

Vielen Dank für den Vorschlag. Ich versuchte das, indem ich auf ein Problem mit dem Lambda List-Tag stieß. Aktualisiert meine Fragen, können Sie mir bitte sagen, wo ich falsch liege. – Aj1

+0

dachte es. Vielen Dank – Aj1

Verwandte Themen