Nedir Bu AWS SAM?

Ozer SUBASI
3 min readDec 14, 2021

AWS Serverless Application Model(SAM), AWS üzerinde serverless uygulama oluşturmak için kullanabileceğimiz bir open-source framework’tür.

Serverless uygulamalar, sadece Lambda fonksiyonlarından oluşmaz. API’ler, veritabanları, event source mapping’ler gibi birçok kavramı içerebilirler. Bir serverless uygulamayı tanımlarken AWS SAM kullanabiliriz.

AWS SAM, iki bileşenden oluşur;
- AWS SAM template
- AWS SAM CLI (Command Line Interface)

AWS SAM template, uygulamayı tanımlamak için kullanılır. Uygulama içerisinde kullanılacak fonksiyonları, API’leri, izinleri, yapılandırma ayarlarını ve event’leri açıklamak için temiz bir yapı sağlar. Uygulamamızı, deploy edilebilir ve sürümlendirilebilir bir şekilde SAM template kullanarak tek bir yerden yönetebiliriz.

AWS SAM CLI ise, AWS SAM template’leri ile tanımladığımız serverless uygulamaları oluşturmak için kullanılır. CLI, template içerisindeki dosyaların isterlere uygun şekilde olduğunu doğrulamayı, Lambda fonksiyonlarını invoke etmeyi, Lambda fonksiyonlarını debug etmeyi, uygulamayı AWS Cloud’a göndermek üzere paketleyip deploy etmeyi ve bu gibi benzer işlemleri sağlayacak komutları sağlar.

AWS SAM Template

AWS SAM Template, AWS CloudFormation template doyasına benzer bir şekilde tanımlanır ancak temel birkaç farklılıkları vardır.

  • Transform kısmı; bu kısım AWS SAM template dosyalarında zorunludur. Bu tanımlama, AWS CloudFormation template dosyalarını AWS SAM template dosyası olarak tanımlar. AWS CloudFormation template dosyalarında birden fazla makro tanımlanabilir, liste şeklinde tanımlanır ve çalıştırma sırasında bu sıraya göre yürütülür.
  • Globals kısmı; bu kısım direkt olarak AWS SAM’e özgüdür. Burada tüm fonksiyonlar ve API’ler tarafından kullanılan özellikleri tanımlanır. Aynı yapılandırmaya sahip birden fazla uygulamanın yapılandırma bilgilerini her seferinde tekrar tanımlamaktansa, Globals bölümünde bir sefer tanımlayarak birden fazla kaynağın buradan beslenmesini sağlayabiliriz. Globals bölümünde aşağıdaki kaynaklar desteklenir.
    AWS::Serverless::Function
    AWS::Serverless::Api
    AWS::Serverless::HttpApi
    AWS::Serverless::SimpleTable
    Globals kısmında desteklenen tüm kaynak ve özellikler bu linkte Supported resources and properties kısmında belirtilmiştir. Listede yer almayan özellikler güvenlik sorunu çıkmaması ve şablonu karmaşık hale getirmemek sebebiyle desteklenmiyor.
  • Resources kısmı; AWS CloudFormation tarafından desteklenen tüm AWS kaynaklarını ve özelliklerini içerir. Bu bölüm, AWS CloudFormation ve AWS SAM kaynaklarının bir kombinasyonunu içerebilir. Her zaman aşağıdaki biçimde tanımlanır;
    servis-sağlayıcı::servis-adı::veri-tipi-adı
  • Parameters kısmı; burada bildirilen nesneler sam deploy — guided komutunun kullanıcıya ek istemler sunmasına sebep olur. Template üzerinde aşağıdaki gibi tanımlanır;

sam deploy — guided komutunda ise aşağıdakine karşılık gelmektedir;
Parameter MyPar [MyParVal]:

Aşağıdaki örnek template parçasında tanımlanan diğer bölümler AWS CloudFormation şablonuyla aynıdır.

YAML İçeriği

AWS SAM şablonları birden fazla ana bölüm içerebilir ancak Transform ve Resources bölümleri gereklidir. Şablondaki bölümleri dilediğimiz sırada ekleyebiliyoruz ancak örnek şablondaki gösterilen mantıksal sırayı kullanmak faydalı olacaktır.

  • Transform kısmı gereklidir, AWS SAM için AWS::Serverless-2016–10–31 değeri eklenmelidir.
  • Globals kısmında tüm fonksiyonlar ve API’ler tarafından kullanılan özellikler tanımlanır.
  • Description kısmı, şablonu açıklayabileceğimiz sözel kısım.
  • Metadata kısmı, şablon hakkında ek bilgi sağlayan kısım.
  • Parameters kısmı, uygulama çalıştırılırken şablona aktarılacak değerleri içerir.
  • Mappings kısmı, anahtar-değer kümesi mantığıyla tanımlanır. bir değer ve bu değere karşılık bir değerler kümesi, bu sayede Fn::FindInMap fonksiyonu kullanılarak ihtiyaca bağlı değer eşleştirilir.
  • Conditions kısmı, belli kaynakların oluşturulup oluşturulmadığını veya oluşturma sırasında değer atanıp atanmadığını kontrol eder. Örneğin yığını test veya prod ortamına bağlı olarak özelleştirebiliriz.
  • Resources kısmı, kaynakların tanımlandığı kısım.
  • Outputs kısmı, yığın özelliklerini görüntülediğimizde döndürülen değerler tanımlanır.

Örnek olarak HelloWorldFunction bulunduran bir serverless uygulamanın AWS SAM template dokümanı kabaca aşağıdaki gibi oluyor. Bu dokümanı sıfırdan yazmamız gerekmiyor, SAM CLI kullanarak oluşturduğumuz uygulamada ya da bir IDE ile yeni bir proje açtığımızda bu şablon otomatik oluşturuluyor, tabii ki içeriği özelleştirmek çok önemli.

Sırada yeni bir AWS SAM template yazmak, bununla bir proje oluşturup deploy etmek ve yaptığım işlemleri yayınlamak var, bir dahaki yazıda görüşmek üzere :)

Kaynakça;

AWS Serverless Application Model

--

--

Ozer SUBASI

Senior Backend Developer, AWS Community Builder #nodejs #serverless #aws