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.
--Code repository (CodeCommit et GitHub peuvent être sélectionnés)
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.
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.
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.
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.
Sélectionnez ensuite le référentiel de code. Cette fois, sélectionnons CodeCommit.
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.
La création du projet et l'EDI démarreront (CloudFormation fonctionne en coulisses).
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.
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
.
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
.
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
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.
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.
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é.
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!"}
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