Szerver nélküli alkalmazás létrehozása AWS SAM használatával

Előző cikkemben arról beszéltem, hogy az AWS Chalice hogyan segít gyorsan felépíteni egy Python-alapú kiszolgáló nélküli alkalmazást és néhány percen belül telepíteni az AWS-re.

Noha gyors és szórakoztató prototípus volt, a Python sokak számára nem biztos, hogy a választott nyelv a nagyüzemi gyártási alkalmazások futtatásakor.

Számos szervezet a Java-t használja elsődleges fejlesztési nyelvként, és sok fejlesztő az olyan újabb nyelvek felé is halad, mint a Go.

Ebben a cikkben bemutatom azokat a lépéseket, amelyek szükségesek ugyanazon kiszolgáló nélküli alkalmazás létrehozásához és telepítéséhez, amely a legfrissebb híreket kapja a Google Hírekből. De ezúttal fejlesztésünkhöz az AWS Serverless Application Model (SAM) és a Java programot fogjuk használni.

A Chalice-hoz hasonlóan az AWS SAM CLI gazdag eszközkészletet kínál, amely lehetővé teszi a fejlesztők számára, hogy gyorsan szerver nélküli alkalmazásokat építsenek.

Előfeltételek

Az oktatóanyaghoz AWS-fiók szükséges. Ha még nincs, akkor hozzon létre egyet. Alkalmazásunk csak a szabad réteg erőforrásait fogja felhasználni, így a költségeknek nem lehet kérdés.

Be kell állítania a biztonságot, és felhasználókat és szerepeket kell létrehoznia a hozzáféréshez.

Az AWS hitelesítő adatok konfigurálása

A SAM a kulisszák mögött található AWS parancssori interfészt (CLI) használja a projekt telepítéséhez. Ha korábban nem használta az AWS CLI-t az AWS-erőforrásokkal való munkavégzéshez, telepítheti az itt található útmutatásokat követve.

A telepítés után be kell állítania az AWS CLI-t az AWS-fiók hitelesítő adatainak használatához.

A SAM telepítése

Ezután telepítenie kell a SAM-ot. A Java-t ebben az oktatóprogramban fogjuk használni, de bármilyen, az AWS Lambda által támogatott futási időt használhat.

Ellenőrizze a Java telepítését

$ java --version openjdk 11.0.8 2020-07-14 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)

Telepítse a SAM CLI-t

Az operációs rendszertől függően a SAM CLI telepítési utasításai változhatnak. Ez a cikk a MacOS-ra történő telepítésével kapcsolatos utasításokat tartalmazza.

A SAM CLI macOS-ra történő telepítésének ajánlott megközelítése a Homebrew csomagkezelő használata.

Ellenőrizze, hogy telepítette-e a Homebrew-t:

$ brew --version Homebrew/homebrew-core (git revision fe68a; last commit 2020-10-15) Homebrew/homebrew-cask (git revision 4a2c25; last commit 2020-10-15)

Ha nem, a következő paranccsal telepítheti a Homebrew-t:

$ /bin/bash -c "$(curl -fsSL //raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Ezután telepítse a SAM-ot a következő paranccsal:

brew tap aws/tap brew install aws-sam-cli

Ellenőrizze a SAM telepítését

$ sam --version SAM CLI, version 1.6.2

Hogyan hozzunk létre egy projektet

Ezután futtassa a sam-initparancsot egy új projekt létrehozásához.

sam init -r java11 -d maven --app-template hello-world -n daily-news-java

Alapértelmezés szerint a SAM létrehoz egy Python projektet. Mivel Java projektet akarunk létrehozni, át kell adnunk néhány további paramétert.

Paraméterek:

  • -r java11: használja a Java 11 futásidejét
  • -d maven: használja a maven-t függőségkezelőként
  • --app-template hello-world: használja a HelloWorld gyorsindítási sablont
  • -n daily-news-java: projektünk neve

Ez létrehoz egy daily-news-javamappát az aktuális könyvtárban. Láthatja, hogy a SAM több fájlt hozott létre ebben a mappában.

Vessünk egy pillantást a App.javafájlra.

A sam-initparancs létrehozott egy egyszerű Lambda függvényt, amely {"message": "hello world"}visszahívja a JSON törzset és a gép IP címét. Most megváltoztathatjuk ezt a sablont, és további kódot adhatunk a Google-tól származó hírek olvasásához.

Most vessünk egy pillantást a template.ymlfájlra.

Ez tartalmazza a CloudFormation sablont, amely létrehozza az Amazon API Gateway és az AWS Lambda erőforrásainkat.

A Lambda konfiguráció megadja, hogy van egy HelloWorldFunctionlambda, amely fut Java 11és 512 MBmemória.

Az API átjáró konfigurációja egyetlen GETmetódust határoz meg egy /helloútvonallal, amelyet az API meghívására fogunk használni.

A Java belső HTTP és XML elemző könyvtárait fogjuk használni, ezért nem kell semmilyen függőséget hozzáadnunk a pom.xmlfájlunkhoz.

Ne feledje, hogy a pom.xmlkazántábla kód részeként megadott alapértelmezett érték a fordítói forrás beállítása. 1.8.Ezt frissítenünk kell arra 11, hogy használhassuk az új HTTP könyvtárat, amely a Java 11 része.

Mivel a Java objektum-orientált, hozzunk létre egy NewsItemosztályt is, amely tartalmazza a hír címét és megjelenési dátumát.

Vegye figyelembe, hogy felülírtuk a toStringmódszert. Ez létrehozza az objektum JSON-ábrázolását, és elkerüli a JSON-elemző könyvtárak használatát.

Next, you need to add a method to fetch the RSS feed from Google, parse it to extract the news title and publication date, and create a list of news items. To do this, add the following code to your App.java:

Now let’s update the handleRequest method in App.java to invoke this method and return the list of news items as result.

Don’t forget to update the unit tests as well. They were written to test the presence of “hello world” in the response and will start failing after our change.

How to Start the Build

From the daily-news-java folder, run the sam build command.

This compiles your source code and builds any dependencies that you have in the application. It then moves all the files into the .aws-sam/build folder so that they are ready to be packaged and deployed. It also updates the template.yml file accordingly.

How to Test Your Application Locally

Now here’s the beautiful part about SAM. You can deploy and test your application locally! This is really helpful during the development stage when you want to test your code without having to deploy it to AWS.

The SAM CLI provides the sam local command to run your application locally. This internally uses Docker to simulate the execution environment of Lambda. If you don’t have Docker installed, you can get it from here.

We can locally test our application in two ways:

  • Hosting the API locally
  • Directly invoking the Lambda function

Let’s take a look at both of these options.

Local Hosting

Use the following command to start the API locally:

sam local start-api

This internally creates a local server and exposes a local endpoint that replicates your REST API.

Once the Docker container is loaded, you can access the API on localhost, like this:

curl //127.0.0.1:3000/hello

Direct Invocation

Use the following command to invoke the Lambda function:

sam local invoke "HelloWorldFunction" -e events/event.json

This directly invokes the Lambda function (just like we would call the main method) and passes the event.json file as payload.

How to Deploy the Project

Let’s deploy the application. From the daily-news-java folder, run the sam deploy --guided command. Follow the prompts and provide the required inputs (or just press Enter to accept the defaults).

This deploys our application on AWS using Amazon API Gateway and AWS Lambda. It takes the deployment artifacts that we built with the sam build command, packages and uploads them to an Amazon S3 bucket created by the AWS SAM CLI, and deploys the application using AWS CloudFormation.

We can now try accessing the API using the endpoint URL provided above.

How to Clean Up Resources

We can use the aws cloudformation delete-stackcommandto delete the AWS CloudFormation stack along with all the resources it created when we ran the sam deploy command.

Conclusion

Congratulations! You just deployed a serverless application on AWS using AWS SAM. It did involve a bit more work than earlier, but it wasn’t too hard either.

You can now go ahead and make any modifications to your App.java file and rerun sam deploy to redeploy your changes.

The full source code for this tutorial can be found here.

Thank you for staying with me so far. Hope you liked the article. You can connect with me on LinkedIn where I regularly discuss technology and life. Also take a look at some of my other articles on Medium.

Happy reading ?