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.
--Code-Repository (CodeCommit und GitHub können ausgewählt werden) --CodeBuilde-Umgebung --CodePipeline-Umgebung --Anwendung --IDE (wenn Cloud9 ausgewählt ist)
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.
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.
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.
Sie können den Anwendungstyp und die Sprache auswählen. Dieses Mal werde ich ein Projekt mit der Lambda + Java Spring-Vorlage erstellen.
Wählen Sie dann das Code-Repository aus. Wählen wir dieses Mal CodeCommit aus.
Ü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.
Die Erstellung des Projekts und der IDE wird gestartet (CloudFormation funktioniert hinter den Kulissen).
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.
Wählen Sie "Code" aus dem Menü links, um den CodeCommit-Bildschirm anzuzeigen. Die Spring-Vorlagenstruktur wurde bis zu "buildspec.yml" erstellt.
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.
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
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.
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.
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.
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!"}
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