Senden Sie an diejenigen, die API mit explosiver Geschwindigkeit veröffentlichen möchten
https://github.com/awslabs/chalice
Dieser Kelch, der den Namen des Heiligen Grals trägt, ist eher ein Werkzeug als ein Rahmen. Wenn Sie über Anwendungscode verfügen, können Sie AWS Lambda, AWS APIGateway, IAM-Rolle usw. festlegen und auf AWS bereitstellen. ist. Auf diese Weise können Sie eine API mit explosiver Geschwindigkeit erstellen und eine Produktionsversion realisieren.
Da wir APIs unter vollständiger und vollständiger Verwendung von AWS-Diensten erstellen, müssen Sie zuerst die Anmeldeinformationen festlegen.
$ mkdir ~/.aws
$ cat >> ~/.aws/config
[default]
aws_access_key_id=YOUR_ACCESS_KEY_HERE
aws_secret_access_key=YOUR_SECRET_ACCESS_KEY
region=ap-northeast-1
Wenn Sie durch Umschalten mehrere AWS-Konten verwenden, empfehlen wir, den ACCESS KEY in der Umgebungsvariablen mit direnv festzulegen. Es hängt vom SDK ab, aber für boto3, das dieses Mal verwendet wird, scheinen die Prioritäts- und Umgebungsvariablen mit einer Priorität gelesen zu werden, die mit AWS Cli kompatibel ist, also hier Möglicherweise freuen Sie sich über den Artikel -to-configure-aws-cli /).
Lassen Sie uns wie folgt in die Befehlszeile eintauchen
$ pip install chalice
$ chalice new-project helloworld && cd helloworld
Initial creation of lambda function.
Creating role
Creating deployment package.
Lambda deploy done.
Initiating first time deployment...
Deploying to: dev
https://endpoint/dev/
$ curl https://endpoint/dev
{"hello": "world"}
Die oben genannten Arbeitsreihen werden unmittelbar nach dem Erstellen eines neuen Projekts bereitgestellt. Mit dem Zauberwort "Kelch bereitstellen" wird das Projekt auf "AWS Lambda" bereitgestellt und in einem öffentlich zugänglichen Zustand bereitgestellt, indem "AWS API Gateway" und "AWS Lambda" verknüpft werden. Es ist.
Wenn Sie den Inhalt der API durcheinander bringen möchten, spielen wir mit dem Inhalt von "app.py", der zum Zeitpunkt der Neuerstellung erstellt wurde, als Instinkt.
Es gibt viele Anforderungen, z. B. den Wunsch nach einer API, in der Protokolle gespeichert werden. Es gibt viele Fälle, in denen Sie es vorerst als JSON in S3 speichern und später retten. Besonders jetzt AWS Athena Es gibt Dinge, die interaktiv erledigt werden können, und ich höre oft von den Anforderungen.
Erstellen wir eine API, die JSON in diesem Format in S3 schreibt, wenn JSON in die API gestellt wird.
Lassen Sie uns zunächst einen Bucket für S3 erstellen (dies erfordert manuelle Arbeit). Und installieren wir das AWS SDK
$ pip install boto3
Schreiben wir app.py
wie folgt um
app.py
from chalice import Chalice
app = Chalice(app_name='helloworld')
import json
import boto3
from botocore.exceptions import ClientError
from chalice import NotFoundError
S3 = boto3.client('s3', region_name='ap-northeast-1')
BUCKET = 'your-bucket-name'
@app.route('/objects/{key}', methods=['GET', 'PUT'])
def s3objects(key):
request = app.current_request
if request.method == 'PUT':
S3.put_object(Bucket=BUCKET, Key=key,
Body=json.dumps(request.json_body))
elif request.method == 'GET':
try:
response = S3.get_object(Bucket=BUCKET, Key=key)
return json.loads(response['Body'].read())
except ClientError as e:
raise NotFoundError(key)
Lassen Sie uns nach dem Umschreiben bereitstellen
$ chalice deploy
Updating IAM policy.
The following actions will be added to the execution policy:
s3:GetObject
s3:PutObject
Would you like to continue? [Y/n]: Y
Updating lambda function...
Regen deployment package...
Sending changes to lambda.
Lambda deploy done.
API Gateway rest API already found.
Deleting root resource id
Done deleting existing resources.
Deploying to: dev
https://endpoint/dev/
Ich habe Y reibungslos eingegeben und bereitgestellt, aber tatsächlich macht chalice
die Einstellung der IAM-Rolle hier gut.
Zur detaillierten Erläuterung wird zum Zeitpunkt der Bereitstellung der bereitzustellende Quellcode analysiert, die erforderlichen Berechtigungen ermittelt und gefragt, ob das Festlegen dieser Berechtigungen, dh der folgenden beiden Berechtigungen, in Ordnung ist.
Diese Berechtigung wird auf IAM festgelegt und bereitgestellt, damit Lambda auf S3 zugreifen kann. Mit anderen Worten, die Person, die die Anwendung erstellt, wird bereitgestellt, nachdem die IAM-Einstellungen vorgenommen wurden, ohne die IAM-Einstellungen zu kennen.
Was für eine schreckliche Art, es zu tun! !! Die IAM-Einstellungen sind furchtbar ärgerlich, und es kann eine Geschichte wie das Hinzufügen von Admin sein. Ich bin daher froh, wenn sie automatisch und entsprechend eingestellt werden können.
Python hat eine Lücke zwischen der 2.X-Serie und der 3.X-Serie, und die Welt ist zutiefst traurig. Python unter AWS Lambda ist die 2.7-Serie und unterscheidet sich daher von der 3.X-Serie Daher gibt es viele Fälle, in denen es besser ist, sich an die jeweilige Umgebung anzupassen.
Sich von solch tiefer Traurigkeit zu lösen Die vorhandene Entwicklungsumgebung auf eine beliebige Umgebung umzustellen Lassen Sie uns [pyenv] setzen (https://github.com/pyenv/pyenv)