Java ile Aws Lambda Kullanımı

Emre Savcı
hashtech
Published in
3 min readMar 25, 2019

Merhabalar, bu yazımda java ile yazılmış bir uygulamayı aws üzerinde lambda function olarak çalıştırmayı ve CloudWatch events ile tetiklemeyi göstereceğim.

Öncelikle aws managemenet console a girip lambda araması yapalım ve lambda oluşturmak için ilgili sayfaya geçelim.

Bu ekranda mevcut lambda functionlarımızı görüyoruz. Yeni bir lambda function oluşturmak için sağ üst taraftaki Create function butonuna basalım.

Burada lambda functionımıza bir isim verip runtime seçeneklerinden Java 8 i seçelim.

Create adımından sonra aşağıdaki gibi bir ekran karşınıza gelecek. Sonraki adımlarda bu ekran üzerinden lambda functionımız için gerekli ayarları yapacağız.

Lambda functionımızı tetikleyecek cron ayarlarını yapmak için Management console -> CloudWatch -> Events -> Rules kısmından yeni bir rule oluşturalım. Ben önceden bu işlemi yaptığım için lambda functionıma bağlı bir CloudWatch Event gözüküyor.

Sol tarafta Schedule seçeneği ile cron ayarımızı yapıyoruz. Sağ tarafta tetiklenecek lambda functionımızı seçiyoruz.

Şimdi lambda functionımız için bir java projesi oluşturalım ve pom.xml içerisine aws-lambda-java-core dependency olarak ekleyelim.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>groupId</groupId>
<artifactId>gob2c-exchangerate-lambda</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>

</dependencies>

</project>

Lambda functionın çalışacağı class RequestHandler interface ini implement etmeli. Örneğin request olarak string alan ve response olarak string dönen bir function için aşağıdaki şekilde implement edebiliriz.

package com.test;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class Main implements RequestHandler<String, String> { @Override
public String handleRequest(String s, Context context) {
context.getLogger().log("request string : " + s);
context.getLogger().log("log from test");
return "test";
}
}

Yazdığımız projeyi aws ye yüklemek için mvn package komutu ile jar dosyamızı oluşturalım.

Lambda function ekranına geri gelelim ve upload kısmından oluşturduğumuz jar dosyamızı upload edelim. Burada önemli nokta, Handler kısmında yazan yere kendi package ve class ismini yazmamız gerekiyor.

Basic settings bölümünden lambda için timeout belirtebiliyoruz. Ben test amaçlı 8 saniye olarak ayarladım.

Şimdi sağ üstte bulunan Test butonu ile lambda functionımızı test edelim. Test butonuna bastığımızda test eventi oluşturmamızı istiyor.

Save diyip functionımızı invoke ediyoruz ve output olarak başarılı bir execution result görüyoruz.

Burada logs kısmından lambda functionımızın loglarını görebiliriz. Test olarak gönderdiğimiz “test event” parametresi loglarımız arasında bulunuyor.

Aws aylık 1 milyon lambda isteğini ücretsiz sunuyor ve sonraki her 1 milyon isteği 0.20 dolar fiyatlandırıyor. Detaylı fiyatlandırma için :

https://aws.amazon.com/tr/lambda/pricing/

Hızlı bir başlangıç oldu, aws maceralarımıza ilerleyen yazılarda devam edeceğiz.

Herkese iyi kodlamalar.

--

--

Emre Savcı
hashtech

Tech. Lead @Trendyol & Couchbase Ambassador | Go Türkiye, Kubernetes, Istio, CNCF, Scalability. Open Source Contributor.