Avec [AWS] CodeStar, vous pouvez créer un projet Spring (Java) s'exécutant sur Lambda en seulement 3 minutes! !!

CodeStar AWS CodeStar peut créer un environnement pour le développement et le déploiement rapides d'applications. Plusieurs modèles sont préparés et vous pouvez créer un projet de développement simplement en le sélectionnant dans la console de gestion.

Environnement à construire

--Code repository (CodeCommit et GitHub peuvent être sélectionnés)

Frais

Il n'y a pas de frais pour CodeStar lui-même. Seuls les frais d'utilisation des ressources pour les référentiels de code, les pipelines et les applications déployées créés par CodeStar.

Remarques

Si vous sélectionnez la région de Tokyo comme région, vous ne pouvez pas sélectionner Cloud9 comme IDE (à partir d'août 2020). Puisque nous voulons créer un environnement avec Cloud9 cette fois, nous sélectionnerons le nord de la Virginie (us-east-1) comme région.

Procédure de construction de l'environnement

Tout d'abord, dans la console de gestion, sélectionnez CodeStar dans Services. Cette fois à IDE Je veux utiliser Cloud9, donc je vais faire de la région du nord de la Virginie.

CodeStar1.png

Vous pouvez sélectionner le type d'application et la langue. Cette fois, je vais créer un projet avec le modèle Lambda + Java Spring.

CodeStar3.png

Sélectionnez ensuite le référentiel de code. Cette fois, sélectionnons CodeCommit.

CodeStart4.png

Vérifiez le contenu et créez un projet.

Enfin, sélectionnez l'IDE. Cette fois, c'est AWS Cloud9. Veuillez noter que Cloud 9 peut ne pas être disponible dans certaines régions. Si vous sélectionnez Cloud9, il vous sera demandé le type d'instance, donc cette fois, nous allons procéder avec le t2.micro par défaut.

CodeStar5.png

La création du projet et l'EDI démarreront (CloudFormation fonctionne en coulisses).

CodeStar6.png

La construction de l'environnement est terminée en environ 3 minutes pour le projet. Étant donné que l'EDI crée une instance EC2, cela prend également environ 3 minutes. Lorsque les deux sont prêts, vous verrez l'écran ci-dessous.

CodeStar7.png

État du référentiel

Sélectionnez «Code» dans le menu de gauche pour afficher l'écran CodeCommit. La structure du modèle Spring a été créée, jusqu'à buildspec.yml.

CodeCommit1.png

Le contenu de buildspec.yml est comme ça.

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

Vous pouvez voir qu'il est compilé avec Maven dans OpenJDK8.

IDE Maintenant, sélectionnons IDE dans le menu. Ensuite, CLoud9 démarrera et récupérera automatiquement le code du référentiel CodeCommit avec git clone.

CodeCommit1.png

Si vous créez une équipe, vous pouvez partager le référentiel de code entre les comptes et faire de la programmation mob.

[AWS] Créer un environnement de programmation mob avec Cloud9

Exécution de l'application

Cette fois, il s'agit d'une API de Lambda. Appuyez sur le bouton "Afficher l'application" sur le tableau de bord pour appeler la première API incluse dans le modèle de projet.

{"Output":"Hello World!"}

Qu'en est-il de la passerelle API et de Lambda spécifiques?

API Gateway Vous pouvez voir qu'il existe une API REST.

APIGateway.png

Il est lui-même défini dans tenpkate.yml dans le code.

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

Il existe deux types, un pour Get et un pour Post. C'est aussi le contenu défini dans template.yml décrit dans API Gateway.

Lambda1.png

Essayez de déplacer le pipeline

Sur Cloud9, éditez springproject / src / main / java / com / aws / codestar / project / handler / HelloWorldHandler.java.

HelloWorldHandler.Avant de changer de java


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

HelloWorldHandler.Après avoir changé de java


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

Après avoir enregistré le fichier, poussons-le vers CodeCommit à partir du terminal Cloud9.

$ 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

Si vous regardez le pipeline, vous pouvez voir que la génération a commencé.

build1.png

En fait, j'obtiens une erreur ici. Quand je le vérifie, il semble que le test a échoué.

[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

Apparemment, la cause est que le code de test ne correspond pas à la réponse attendue. Donc éditez springproject / test / java / com / aws / codestar / project / handler / HelloWorldTest.java.

HelloWorldTest.Avant de changer de java


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

HelloWorldTest.Après avoir changé de 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

Ensuite, la génération et le déploiement ont réussi! Après avoir accédé à l'application pendant un certain temps, le résultat changera et vous pourrez voir que la dernière application a été déployée.

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

Résumé

Cette fois, je n'ai pas utilisé la région de Tokyo comme région pour utiliser Cloud9 comme IDE, mais vous pouvez également développer avec des IDE tels que Eclipse et VSS en utilisant la commande Git normalement à partir du référentiel de code.

L'approche de la commande SAM, etc. consiste à créer un environnement localement, puis à Dploy, mais dans le cas de CodeStar, le flux consiste d'abord à préparer un modèle côté AWS et à créer une application à partir de là. .. Pour commencer plus facilement, vous pouvez utiliser CodeStar, qui est tout-en-un de la gestion de votre référentiel de code à votre pipeline. Cette fois, il s'agissait d'une combinaison de Lambda + Spring, mais il existe de nombreux autres modèles, il est donc agréable de pouvoir choisir la configuration du projet en fonction des exigences de l'application et des compétences des membres du développement. Si possible, j'espère que Cloud9 sera compatible avec la région de Tokyo dès que possible, mais même s'il est soustrait, cela semble être utile.

Recommended Posts

Avec [AWS] CodeStar, vous pouvez créer un projet Spring (Java) s'exécutant sur Lambda en seulement 3 minutes! !!
Créer un SlackBot avec AWS lambda et API Gateway en Java
Construire un projet Java avec Gradle
Conseils Java - Créez un projet Spring Boot avec Gradle
Vous pouvez le faire tout de suite avec Serverless Framework Serverless with AWS (API + Lambda [java] est facile à configurer)
Jusqu'à ce que vous construisiez un projet écrit scala avec Maven et que vous l'exécutiez avec la commande scala.
Publiez régulièrement des images de tweets sur Twitter avec AWS Lambda + Java
Dans Redmine, vous pouvez obtenir le projet avec Project.find (<identifier>)
Créez AWS Lambda avec Quarkus
Voyons la Deep Java Library (DJL), une bibliothèque capable de gérer Deep Learning en Java, publiée par AWS.
Essayez d'exécuter SlackBot réalisé avec Ruby x Sinatra sur AWS Lambda
[Gradle] Construisez un projet Java avec une configuration différente de la convention
Créer un serveur Minecraft sur AWS
Java sur AWS Lambda est-il lent?
Hello World avec AWS Lambda + Java
Essayez d'exécuter AWS X-Ray en Java
Une histoire sur un projet Spring Boot écrit en Java qui prend en charge Kotlin
Commencer par installer Docker sur EC2 et exécuter Yellowfin dans un conteneur
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
Créez un environnement de développement sur AWS EC2 avec CentOS7 + Nginx + pm2 + Nuxt.js
Je veux ForEach un tableau avec une expression Lambda en Java
Découvrez s'il existe une police pouvant utiliser le japonais (Hiragana, Katakana, Kanji) avec AWS Lambda + Java
Créer un projet Java Spring Boot avec IntelliJ
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Créer un référentiel Maven sur AWS S3
Créer un environnement de développement Java sur Mac
Créer un environnement de développement Java 8 avec AWS Cloud 9
Diviser une chaîne avec ". (Dot)" en Java
Construire OpenCV avec Java Wrapper sur Ubuntu 18.04
Gérez d'énormes JSON avec Java Lambda
Créer un environnement avec Docker sur AWS
J'ai créé un environnement Java EE sur AWS et essayé d'exécuter une application Web
Hello World, une application d'interface graphique multiplateforme avec Groovy fonctionnant sur la plate-forme Java
Valider le jeton d'ID d'un utilisateur authentifié par AWS Cognito en Java
De la création d'un projet Spring Boot à l'exécution d'une application avec VS Code