Mit [AWS] CodeStar können Sie ein Spring (Java) -Projekt erstellen, das auf Lambda in nur 3 Minuten ausgeführt wird! !!

CodeStar AWS CodeStar kann eine Umgebung für die schnelle Entwicklung und Bereitstellung von Anwendungen erstellen. Es werden mehrere Vorlagen vorbereitet, und Sie können ein Entwicklungsprojekt erstellen, indem Sie es einfach in der Verwaltungskonsole auswählen.

Umwelt gebaut werden

--Code-Repository (CodeCommit und GitHub können ausgewählt werden) --CodeBuilde-Umgebung --CodePipeline-Umgebung --Anwendung --IDE (wenn Cloud9 ausgewählt ist)

Gebühr

Für CodeStar selbst fallen keine Gebühren an. Nur Ressourcennutzungsgebühren für Code-Repositorys, Pipelines und bereitgestellte Anwendungen, die von CodeStar erstellt wurden.

Vorsichtsmaßnahmen

Wenn Sie die Region Tokio als Region auswählen, können Sie Cloud9 nicht als IDE auswählen (Stand August 2020). Da wir dieses Mal eine Umgebung mit Cloud9 erstellen möchten, werden wir Nord-Virginia (us-east-1) als Region auswählen.

Bauverfahren für die Umwelt

Wählen Sie zunächst in der Verwaltungskonsole CodeStar unter Dienste aus. Diesmal zur IDE Ich möchte Cloud9 verwenden, also werde ich die Region Nord-Virginia erstellen.

CodeStar1.png

Sie können den Anwendungstyp und die Sprache auswählen. Dieses Mal werde ich ein Projekt mit der Lambda + Java Spring-Vorlage erstellen.

CodeStar3.png

Wählen Sie dann das Code-Repository aus. Wählen wir dieses Mal CodeCommit aus.

CodeStart4.png

Überprüfen Sie den Inhalt und erstellen Sie ein Projekt.

Wählen Sie schließlich die IDE aus. Diesmal ist es AWS Cloud9. Bitte beachten Sie, dass Cloud 9 in einigen Regionen möglicherweise nicht ausgewählt ist. Wenn Sie Cloud9 auswählen, werden Sie nach dem Instanztyp gefragt. Diesmal fahren wir mit dem Standardwert t2.micro fort.

CodeStar5.png

Die Erstellung des Projekts und der IDE wird gestartet (CloudFormation funktioniert hinter den Kulissen).

CodeStar6.png

Der Umgebungsbau ist für das Projekt in ca. 3 Minuten abgeschlossen. Da die IDE eine EC2-Instanz erstellt, dauert es auch ungefähr 3 Minuten. Wenn beide bereit sind, wird der folgende Bildschirm angezeigt.

CodeStar7.png

Repository-Status

Wählen Sie "Code" aus dem Menü links, um den CodeCommit-Bildschirm anzuzeigen. Die Spring-Vorlagenstruktur wurde bis zu "buildspec.yml" erstellt.

CodeCommit1.png

Der Inhalt von buildspec.yml ist wie folgt.

codespec.yml


version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk8
    commands:
      # Upgrade AWS CLI to the latest version
      - pip install --upgrade awscli
  pre_build:
    commands:
      - echo Test started on `date`
      - mvn clean compile test
  build:
    commands:
      - echo Build started on `date`
      - mvn package shade:shade
      - mv target/HelloWorld-1.0.jar .
      - unzip HelloWorld-1.0.jar
      - rm -rf target tst src buildspec.yml pom.xml HelloWorld-1.0.jar
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml
  post_build:
    commands:
      # Do not remove this statement. This command is required for AWS CodeStar projects.
      # Update the AWS Partition, AWS Region, account ID and project ID in the project ARN on template-configuration.json file so AWS CloudFormation can tag project resources.
      - sed -i.bak 's/\$PARTITION\$/'${PARTITION}'/g;s/\$AWS_REGION\$/'${AWS_REGION}'/g;s/\$ACCOUNT_ID\$/'${ACCOUNT_ID}'/g;s/\$PROJECT_ID\$/'${PROJECT_ID}'/g' template-configuration.json
artifacts:
  files:
    - template-export.yml
    - template-configuration.json

Sie können sehen, dass es mit Maven in OpenJDK8 kompiliert wurde.

IDE Wählen wir nun IDE aus dem Menü. Dann startet CLoud9 und ruft den Code automatisch mit "git clone" aus dem CodeCommit-Repository ab.

CodeCommit1.png

Wenn Sie ein Team einrichten, können Sie das Code-Repository für mehrere Konten freigeben und Mob-Programmierung durchführen.

[AWS] Erstellen einer Mob-Programmierumgebung mit Cloud 9

App-Ausführung

Diesmal ist es eine API von Lambda. Durch Drücken der Schaltfläche "App anzeigen" im Dashboard wird die erste in der Projektvorlage enthaltene API aufgerufen.

{"Output":"Hello World!"}

Was ist mit dem spezifischen API-Gateway und Lambda?

API Gateway Sie können sehen, dass es eine REST-API gibt.

APIGateway.png

Es selbst ist im Code in tenpkate.yml definiert.

template.yml


Resources:
  GetHelloWorld:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-GetHelloWorld'
      Handler: com.aws.codestar.projecttemplates.handler.HelloWorldHandler
      Runtime: java8
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /
            Method: get

  PostHelloWorld:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub 'awscodestar-${ProjectId}-lambda-PostHelloWorld'
      Handler: com.aws.codestar.projecttemplates.handler.HelloWorldHandler
      Runtime: java8
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
      Events:
        PostEvent:
          Type: Api
          Properties:
            Path: /
            Method: post

Lambda

Es gibt zwei Typen, einen für Get und einen für Post. Dies ist auch der Inhalt, der in template.yml definiert ist und in API Gateway beschrieben wird.

Lambda1.png

Versuchen Sie, die Pipeline zu verschieben

Bearbeiten Sie in Cloud9 "springproject / src / main / java / com / aws / codestar / project / handler / HelloWorldHandler.java".

HelloWorldHandler.Vor dem Ändern von Java


return new GatewayResponse(new JSONObject().put("Output", "Hello World!").toString(), headers, 200);

HelloWorldHandler.Nach dem Wechsel von Java


return new GatewayResponse(new JSONObject().put("Output", "Hello World Update!").toString(), headers, 200);

Nachdem Sie die Datei gespeichert haben, senden Sie sie vom Cloud9-Terminal an CodeCommit.

$ git add .
$ git commit -m "update response."
[master f0ba0d6] update response.
 Committer: EC2 Default User <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email [email protected]

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+), 1 deletion(-)
$ git push
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (11/11), 719 bytes | 239.00 KiB/s, done.
Total 11 (delta 3), reused 0 (delta 0)
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/SpringProject
   182e230..f0ba0d6  master -> master

Wenn Sie sich die Pipeline ansehen, können Sie sehen, dass der Build gestartet wurde.

build1.png

Eigentlich bekomme ich hier einen Fehler. Wenn ich es überprüfe, scheint es, dass der Test fehlgeschlagen ist.

[ERROR] Failures: 
[ERROR]   HelloWorldHandlerTest.testHandleRequest:59 expected: <Hello World!> but was: <Hello World Update!>
[INFO] 
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.048 s
[INFO] Finished at: 2020-08-10T14:16:40Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.0:test (default-test) on project HelloWorld: There are test failures.
[ERROR] 
[ERROR] Please refer to /codebuild/output/src139859990/src/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

[Container] 2020/08/10 14:16:40 Command did not exit successfully mvn clean compile test exit status 1
[Container] 2020/08/10 14:16:40 Phase complete: PRE_BUILD State: FAILED
[Container] 2020/08/10 14:16:40 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: mvn clean compile test. Reason: exit status 1

Anscheinend liegt die Ursache darin, dass der Testcode nicht mit der erwarteten Antwort übereinstimmt. Bearbeiten Sie also springproject / test / java / com / aws / codestar / project / handler / HelloWorldTest.java.

HelloWorldTest.Vor dem Ändern von Java


    private static final String EXPECTED_RESPONSE_VALUE = "Hello World!";

HelloWorldTest.Nach dem Wechsel von Java


    private static final String EXPECTED_RESPONSE_VALUE = "Hello World Update!";
$ git add.
$ git commit -m "update test code."
[master f003591] update test code.
 Committer: EC2 Default User <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email [email protected]

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+), 1 deletion(-)
$ git push
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 715 bytes | 238.00 KiB/s, done.
Total 11 (delta 2), reused 0 (delta 0)
To https://git-codecommit.us-east-1.amazonaws.com/v1/repos/SpringProject
   f0ba0d6..f003591  master -> master

Als nächstes waren sowohl Build als auch Deploy erfolgreich! Nachdem Sie eine Weile auf die Anwendung zugegriffen haben, ändert sich das Ergebnis und Sie können sehen, dass die neueste Anwendung bereitgestellt wurde.

{"Output":"Hello World Update!"}

Zusammenfassung

Dieses Mal habe ich die Region Tokio nicht als Region verwendet, um Cloud9 als IDE zu verwenden. Sie können jedoch auch mit IDEs wie Eclipse und VSS entwickeln, indem Sie den Befehl Git normalerweise aus dem Code-Repository verwenden.

Der Ansatz des SAM-Befehls usw. besteht darin, eine Umgebung lokal zu erstellen und dann bereitzustellen. Im Fall von CodeStar ist es jedoch ein Ablauf, zuerst eine Vorlage auf der AWS-Seite vorzubereiten und von dort aus eine Anwendung zu erstellen. .. Um den Einstieg zu vereinfachen, sollten Sie CodeStar verwenden, das von der Verwaltung Ihres Code-Repositorys bis zu Ihrer Pipeline alles in einem ist. Diesmal war es eine Kombination aus Lambda + Spring, aber es gibt viele andere Vorlagen. Daher ist es schön, die Projektkonfiguration entsprechend den Anforderungen der Anwendung und den Fähigkeiten der Entwicklungsmitglieder auswählen zu können. Wenn möglich, hoffe ich, dass Cloud9 so schnell wie möglich mit der Region Tokio kompatibel ist, aber selbst wenn es abgezogen wird, scheint es nützlich zu sein.

Recommended Posts

Mit [AWS] CodeStar können Sie ein Spring (Java) -Projekt erstellen, das auf Lambda in nur 3 Minuten ausgeführt wird! !!
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Erstellen eines Java-Projekts mit Gradle
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
Sie können dies sofort mit Serverless Framework Serverless mit AWS tun (API + Lambda [Java] ist einfach einzurichten).
Bis Sie mit Maven ein von Scala geschriebenes Projekt erstellen und es mit dem Befehl scala ausführen.
Veröffentlichen Sie regelmäßig Bild-Tweets auf Twitter mit AWS Lambda + Java
In Redmine können Sie das Projekt mit Project.find (<Kennung>) abrufen.
Erstellen Sie AWS Lambda mit Quarkus
Lassen Sie uns auf Deep Java Library (DJL) eingehen, eine von AWS veröffentlichte Bibliothek, die Deep Learning in Java verarbeiten kann.
Versuchen Sie, SlackBot mit Ruby x Sinatra auf AWS Lambda auszuführen
[Gradle] Erstellen Sie ein Java-Projekt mit einer Konfiguration, die von der Konvention abweicht
Erstellen Sie einen Minecraft-Server auf AWS
Ist Java unter AWS Lambda langsam?
Hallo Welt mit AWS Lambda + Java
Versuchen Sie, AWS X-Ray in Java auszuführen
Eine Geschichte über ein in Java geschriebenes Spring Boot-Projekt, das Kotlin unterstützt
Beginnen Sie mit der Installation von Docker auf EC2 und dem Ausführen von Yellowfin in einem Container
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Erstellen Sie mit CentOS7 + Nginx + pm2 + Nuxt.js eine Entwicklungsumgebung auf AWS EC2
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Finden Sie heraus, ob es eine Schriftart gibt, die Japanisch (Hiragana, Katakana, Kanji) mit AWS Lambda + Java verwenden kann
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Erstellen Sie ein Maven-Repository in AWS S3
Erstellen Sie eine Java-Entwicklungsumgebung auf dem Mac
Erstellen Sie eine Java 8-Entwicklungsumgebung mit AWS Cloud 9
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Erstellen Sie OpenCV mit Java Wrapper unter Ubuntu 18.04
Behandeln Sie große JSON mit Java Lambda
Erstellen Sie eine Umgebung mit Docker unter AWS
Ich habe eine Java EE-Umgebung auf AWS erstellt und versucht, eine Webanwendung auszuführen
Hello World, eine plattformübergreifende GUI-App mit Groovy, die auf der Java-Plattform ausgeführt wird
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
Vom Erstellen eines Spring Boot-Projekts bis zum Ausführen einer Anwendung mit VS Code