כיצד לבנות יישום ללא שרת באמצעות AWS SAM

במאמר הקודם שלי, דיברתי על כך ש- AWS Chalice עוזר לך לבנות במהירות יישום ללא שרת מבוסס Python ולפרוס אותו ב- AWS תוך מספר דקות.

למרות שזה היה אב טיפוס מהיר ומהנה, ייתכן שפייתון אינה השפה הנבחרת עבור רבים בכל הנוגע להפעלת יישומי ייצור בקנה מידה גדול.

ארגונים רבים משתמשים בג'אווה כשפת הפיתוח העיקרית שלהם, והרבה מפתחים עוברים גם לעבר שפות חדשות יותר כמו Go.

במאמר זה אדריך אתכם בשלבים הנדרשים לבנייתו ופריסתו של אותו יישום ללא שרת שמקבל את החדשות האחרונות מחדשות Google. אך הפעם נשתמש במודל היישום AWS ללא שרת (SAM) וב- Java לצורך פיתוחנו.

כמו גביע, ה- AWS SAM CLI מציע מערך כלים עשיר המאפשר למפתחים לבנות יישומים ללא שרת במהירות.

תנאים מוקדמים

הדרכה זו דורשת חשבון AWS. אם אין לך כבר, המשך וצור אחד. היישום שלנו ישתמש רק במשאבים החינמיים, ולכן העלות לא אמורה להיות בעיה.

עליך גם להגדיר את האבטחה וליצור משתמשים ותפקידים לגישה שלך.

כיצד להגדיר אישורי AWS

SAM משתמש בממשק שורת הפקודה AWS (CLI) מאחורי הקלעים כדי לפרוס את הפרויקט. אם לא השתמשת בעבר ב- CLI של AWS לעבודה עם משאבי AWS, תוכל להתקין אותו על ידי ביצוע ההנחיות כאן.

לאחר ההתקנה, עליך להגדיר את ה- AWS CLI שלך לשימוש בתעודות מחשבון AWS שלך.

כיצד להתקין את SAM

לאחר מכן, עליך להתקין את SAM. אנו משתמשים בג'אווה במדריך זה, אך ניתן להשתמש בכל זמן ריצה בשפה הנתמך על ידי AWS למבה.

אמת את התקנת Java

$ 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)

התקן את SAM CLI

בהתאם למערכת ההפעלה שלך, הוראות ההתקנה של SAM CLI ישתנו. מאמר זה עוסק בהוראות להתקנתו ב- MacOS.

הגישה המומלצת להתקנת SAM CLI ב- macOS היא שימוש במנהל החבילות של Homebrew.

ודא שהתקנת את Homebrew, כך:

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

אם לא, תוכל להתקין את Homebrew באמצעות הפקודה הבאה:

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

לאחר מכן, התקן את SAM באמצעות הפקודה הבאה:

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

אמת את התקנת SAM

$ sam --version SAM CLI, version 1.6.2

כיצד ליצור פרויקט

לאחר מכן, הפעל את sam-initהפקודה ליצירת פרויקט חדש.

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

כברירת מחדל, SAM יוצר פרויקט פייתון. מכיוון שאנחנו רוצים ליצור פרויקט Java, נצטרך להעביר כמה פרמטרים נוספים.

פרמטרים:

  • -r java11: השתמש בזמן הריצה של Java 11
  • -d maven: השתמש ב- maven כמנהל התלות
  • --app-template hello-world: השתמש בתבנית ההפעלה המהירה HelloWorld
  • -n daily-news-java: שם הפרויקט שלנו

פעולה זו תיצור daily-news-javaתיקיה בספריה הנוכחית שלך. אתה יכול לראות ש- SAM יצר מספר קבצים בתיקיה זו.

בואו נסתכל על App.javaהקובץ.

sam-initהפקודה יצרו פונקציה Lambda פשוט מחזיר לגוף JSON {"message": "hello world"}ואת כתובת ה- IP של המכונה כאשר המכונה. כעת אנו יכולים לשנות תבנית זו ולהוסיף קוד נוסף לקריאת חדשות מגוגל.

עכשיו בואו נסתכל על template.ymlהקובץ.

זה מכיל את התבנית CloudFormation שיוצרת את ה- Amazon API Gateway ואת משאבי AWS Lambda שלנו.

מציין, תצורת Lambda שיש לנו HelloWorldFunctionלמבדה שפועל על Java 11ואת 512 MBזיכרון.

תצורת שער ה- API מגדירה GETשיטה אחת עם /helloנתיב בו נשתמש כדי להפעיל את ה- API.

אנו נשתמש בספריות הניתוח הפנימיות של HTTP ו- XML ​​של Java, ולכן איננו צריכים להוסיף תלות pom.xmlבקובץ שלנו .

שים לב כי ברירת המחדל pom.xmlהניתנת כחלק מקוד boilerplate מגיע עם מקור המהדר מוגדר כ- 1.8.נצטרך לעדכן זאת כדי 11שנוכל להשתמש בספריית HTTP החדשה שהיא חלק מג'אווה 11.

מכיוון שג'אווה מכוונת עצמים, בואו גם ליצור NewsItemמחלקה המכילה את הכותרת ואת תאריך הפרסום של ידיעה.

שימו לב שדרסנו את toStringהשיטה. זה יוצר ייצוג JSON של האובייקט ונמנע משימוש בכל ספריות הניתוח של JSON.

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 ?