AWS veröffentlicht viele praktische Inhalte, die AWS-Services verwenden. Es wird auch ins Japanische übersetzt.
Praktisches Tutorial zu Amazon Web Services (AWS) https://aws.amazon.com/jp/getting-started/hands-on/
Als ich nach einem Container für den internen Gebrauch und praktischen Unterrichtsmaterialien für API Gateway-Anfänger suchte, Ich habe genau das richtige Tutorial gefunden.
Erstellen einer modernen Webanwendung https://aws.amazon.com/jp/getting-started/hands-on/build-modern-app-fargate-lambda-dynamodb-python/
Dieses Tutorial,
Sie können Schritt für Schritt den Aufbau einer modernen Plattform für die Anwendungsausführung erleben, z Sehr guter Inhalt.
Quelle: https://aws.amazon.com/jp/getting-started/hands-on/build-modern-app-fargate-lambda-dynamodb-python/
Guter Inhalt ... sehr guter Inhalt ...
Auch wenn ich es gemäß dem Verfahren im Tutorial versucht habe, gab es einige Punkte, die nicht funktionierten Ich möchte eine Notiz machen. Ressourcen für .NET, Go und Java sind ebenfalls verfügbar, aber dieser Artikel erinnert mich an meine Testversion mit Python.
Ich mache Docker auf Cloud9 IDE bauen ...
docker build . -t REPLACE_ME_AWS_ACCOUNT_ID.dkr.ecr.REPLACE_ME_REGION.amazonaws.com/mythicalmysfits/service:latest
Python-Pip und Pip-Installation werden Moos.
Building dependency tree...
Reading state information...
E: Unable to locate package python-pip
The command '/bin/sh -c apt-get install -y python-pip python-dev build-essential' returned a non-zero code: 100
Step 5/13 : RUN pip install --upgrade pip
---> Running in 944121289de0
/bin/sh: 1: pip: not found
The command '/bin/sh -c pip install --upgrade pip' returned a non-zero code: 127
Ab August 2020 ist Ubuntu: das neueste Python die v3-Serie Lassen Sie uns Dockerfile mit Python3 kompatibel machen.
Python-Pip ist jetzt ** Python3-Pip **, pip to ** pip3 **, Ändern Sie die Python von ENTRYPOINT in ** python3 **.
FROM ubuntu:latest
RUN echo Updating existing packages, installing and upgrading python and pip.
RUN apt-get update -y
RUN apt-get install -y python3-pip python-dev build-essential
RUN pip3 install --upgrade pip
RUN echo Copying the Mythical Mysfits Flask service into a service directory.
COPY ./service /MythicalMysfitsService
WORKDIR /MythicalMysfitsService
RUN echo Installing Python packages listed in requirements.txt
RUN pip3 install -r ./requirements.txt
RUN echo Starting python and starting the Flask service...
ENTRYPOINT ["python3"]
CMD ["mythicalMysfitsService.py"]
Lassen Sie uns die in Modul 3 und höher bereitgestellte Docker-Datei auf dieselbe Weise ändern.
Sie müssen sich anmelden, bevor der Docker auf ECR drückt ...
$(aws ecr get-login --no-include-email)
get-login ist veraltet, verwenden Sie also ** get-login-password **.
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com
Durch Ausführen der bereitgestellten AWS-CLI wird ein CodeBuild-Projekt erstellt. Wenn Sie die CI / CD-Pipeline in Schritt 2 verschieben, wird der Build moos.
Die Ursache ist, dass das oben veraltete get-login in buildspec.yml verwendet wird. Verwenden Sie stattdessen ** aws ecr get-login-password **.
Öffnen Sie die Datei: //~/environment/aws-modern-application-workshop/module-2/aws-cli/ecr-policy.json und öffnen Sie sie Pre_build-Phase
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
Zu
- aws ecr get-login-password --region $AWS_DEFAULT_REGION) | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
Lassen Sie es uns beheben.
Ressourcen, die an CodeCommit gesendet werden sollen, werden im Voraus vorbereitet. Kopieren Sie es in das Verzeichnis für das Repository.
cp -r ~/environment/aws-modern-application-workshop/module-2/app/* ~/environment/MythicalMysfitsService-Repository/
Wenn Sie diese Ressource an CodeCommit senden, wird die App für ECS bereitgestellt. Die Aufgabe wird gelöscht.
2020-08-30 16:22:28Traceback (most recent call last):
2020-08-30 16:22:28File "mythicalMysfitsService.py", line 3, in <module>
2020-08-30 16:22:28import mysfitsTableClient
2020-08-30 16:22:28File "/MythicalMysfitsService/mysfitsTableClient.py", line 104
2020-08-30 16:22:28print 'filter is '+args.filter
2020-08-30 16:22:28^
2020-08-30 16:22:28SyntaxError: Missing parentheses in call to 'print'. Did you mean print('filter is '+args.filter)?
Das ECS-Aufgabenprotokoll fehlt in der Druckfunktion in mysfitsTableClient.py.
Dieses Tutorial scheint mit Python 2.7 entwickelt worden zu sein. Da die Beschreibung der Druckfunktion in Python 3, das in der Docker-Datei angegeben ist, unterschiedlich ist, Ändern Sie die App.
Vor der Korrektur
if args.filter and args.value:
print 'filter is '+args.filter
print 'value is '+args.value
print "Getting filtered values"
items = queryMysfitItems(args.filter, args.value)
else:
print "Getting all values"
items = getAllMysfits()
print items
Überarbeitet
if args.filter and args.value:
print('filter is '+args.filter)
print('value is '+args.value)
print("Getting filtered values")
items = queryMysfitItems(args.filter, args.value)
else:
print("Getting all values")
items = getAllMysfits()
print(items)
Ich versuche, eine REST-API zu erstellen, indem ich eine API-Definition aus einer Swagger-Definition importiere ...
aws apigateway import-rest-api --parameters endpointConfigurationTypes=REGIONAL --body file://~/environment/aws-modern-application-workshop/module-4/aws-cli/api-swagger.json --fail-on-warnings
Ich erhalte keine JSON-Antwort wie im Tutorial. Der Rückgabewert der Shell ist 255 und es wird kein API-Gateway erstellt.
Zuerst bezweifelte ich die Swagger-Definition. Sie können https://editor.swagger.io/ oder das Open API Editor-Plug-In von VSCode verwenden. Wenn Sie die Definition von api-swagger.json überprüfen, POST / mysfits / {mysfitId} / ähnliche Definition, x-amazon-apigateway-Integrationsteil Sie können sehen, dass die Antworten doppelt vorhanden sind.
Immerhin werde ich die doppelten Antworten löschen, aber Das Ergebnis von aws apigateway import-rest-api ändert sich nicht ... warum?
Führen Sie es in diesem Fall mit der Option --debug aus.
aws apigateway import-rest-api --parameters endpointConfigurationTypes=REGIONAL --body file://~/environment/aws-modern-application-workshop/module-4/aws-cli/api-swagger.json --fail-on-warnings --debug
Dann ~? ?? ??
2020-08-31 06:39:10,907 - MainThread - awscli.clidriver - DEBUG - CLI version: aws-cli/2.0.11 Python/3.7.3 Linux/4.14.181-142.260.amzn2.x86_64 botocore/2.0.0dev15
(Unterlassung)
2020-08-31 06:39:10,994 - MainThread - awscli.clidriver - DEBUG - Exception caught in main()
Traceback (most recent call last):
File "awscli/customizations/binaryformat.py", line 59, in _visit_scalar
File "base64.py", line 87, in b64decode
binascii.Error: Invalid base64-encoded string: number of data characters (6953) cannot be 1 more than a multiple of 4
(Unterlassung)
File "awscli/customizations/binaryformat.py", line 34, in base64_decode_input_blobs
File "awscli/shorthand.py", line 389, in visit
File "awscli/shorthand.py", line 394, in _visit
File "awscli/shorthand.py", line 401, in _visit_structure
File "awscli/shorthand.py", line 394, in _visit
File "awscli/customizations/binaryformat.py", line 61, in _visit_scalar
awscli.customizations.binaryformat.InvalidBase64Error: Invalid base64: "{
"swagger": 2.0,
"info": {
"title": "MysfitsApi"
Invalid base64?
Sehen wir uns die Änderungen von AWS CLI v1 zu v2 an.
Wichtige Änderungen - Migration von AWS CLI Version 1 auf Version 2 - AWS-Befehlszeilenschnittstelle https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cliv2-migration.html#cliv2-migration-binaryparam
Oh! !! !!
AWS CLI Version 2 übergibt jetzt standardmäßig alle binären Eingabe- und Ausgabeparameter als base64-codierte Zeichenfolge. (Weggelassen) Sie können auch die aktiven Profileinstellungen überschreiben und die Einstellungen für einzelne Befehle rückgängig machen, indem Sie den Parameter --cli-binary-format raw-in-base64-out in die Befehlszeile aufnehmen.
Das war's. Die Swagger-Definitionsdatei ist also nicht speziell base64-codiert ** --cli-binäres Format raw-in-base64-out ** Fügen wir einen Parameter hinzu.
aws apigateway import-rest-api --cli-binary-format raw-in-base64-out --parameters endpointConfigurationTypes=REGIONAL --body file://~/environment/aws-modern-application-workshop/module-4/aws-cli/api-swagger.json --fail-on-warnings --debug
Ich bestand.
{
"id": "6xxxxxxxx3",
"name": "MysfitsApi",
"createdDate": "2020-08-31T07:29:58+00:00",
"version": "2017-04-20T04:08:08Z",
"apiKeySource": "HEADER",
"endpointConfiguration": {
"types": [
"REGIONAL"
]
}
}
Ich konnte den Rest der Schritte ohne besondere Probleme ausführen.
Ich werde Github ein Problem mit den zu aktualisierenden Teilen wie AWS CLI und Dockerfile geben. Es wird einige Zeit dauern, bis die Tutorial-Website (insbesondere die japanische Version) angezeigt wird Bitte bezeichnen Sie es als Hilfsdokument.
Sie können also Schritt für Schritt die Erstellung von Cloud-nativen Apps erleben Diejenigen, die ECS, API Gateway, Cognito, Kinesis Firehose usw. lernen möchten, während sie ihre Hände bewegen, Versuch es bitte! !! !!