paint-brush
AWS Sunucusuz API ve CICD İşlem Hattı Oluşturma Kılavuzuile@pchandel09
6,804 okumalar
6,804 okumalar

AWS Sunucusuz API ve CICD İşlem Hattı Oluşturma Kılavuzu

ile Puneet Chandel11m2023/10/27
Read on Terminal Reader

Çok uzun; Okumak

Bu makale, AWS hizmetlerini kullanan Sunucusuz bir API'nin geliştirilmesini gösterir ve AWS ortamında Sürekli Entegrasyon/Sürekli Dağıtım (CICD) hattı oluşturur.
featured image - AWS Sunucusuz API ve CICD İşlem Hattı Oluşturma Kılavuzu
Puneet Chandel HackerNoon profile picture


Genel Bakış

Bu makale, AWS hizmetlerini kullanan Sunucusuz bir API'nin geliştirilmesini gösterir ve AWS ortamında Sürekli Entegrasyon/Sürekli Dağıtım (CICD) hattı oluşturur.


Bölüm 1: API Ağ Geçidinden gelen istekleri işlemek ve Sunucusuz Uygulama Modeli'ni kullanarak verileri DynamoDB'de sürdürmek için bir Lambda işlevinin oluşturulmasını araştırıyor.


Bölüm 2: AWS'de CodeCommit deposunu yapılandırmak ve depoya yeni değişikliklerin gönderilmesi üzerine otomatik olarak bir derleme süreci başlatan bir CICD işlem hattı kurmak için gerekli adımların ayrıntılarını verir.

Önkoşullar

Bu proje için bir AWS hesabına ihtiyacınız olacak (Ücretsiz Kullanım yeterlidir). Aşağıdaki AWS bileşenleri kullanılacaktır:


  • AWS API Ağ Geçidi
  • AWS Lambda'sı
  • AWS DinamoDB
  • AWS CodeCommit
  • AWS CodeBuild
  • AWS CodePipeline
  • AWS S3
  • Çeşitli - CloudWatch, IAM vb.


Yerel geliştirme ortamınızın aşağıdaki gibi kurulduğundan emin olun:


  1. AWS CLI'yi yükleyin : AWS Komut Satırı Arayüzünü yüklemek için buradaki kılavuzu izleyin.


  2. AWS SAM'i (Sunucusuz Uygulama Modeli) yükleyin : Buradaki talimatları izleyerek SAM CLI'yi yükleyin.


  3. Bir IDE seçin : Geliştirme için IntelliJ veya benzer bir IDE kullanın. IntelliJ'i tercih ederim


  4. Paketleme için Maven : Uygulamanızı paketlemek için Maven'in kurulu olduğundan emin olun.


  5. İsteğe bağlı: Docker (Lambda işlevlerini yerel olarak test etmeniz gerekiyorsa): Lambda işlevlerini yerel olarak test etmeyi planlıyorsanız Docker'ı yükleyin.


Bu araçlar ve bileşenler projenin temelini oluşturacaktır.

Bölüm 1: Geliştirme

Bu bölümde, işleyici sınıfını tamamlama, oluşturma, AWS'ye dağıtma ve Postman kullanarak test yürütme dahil olmak üzere AWS SAM kullanarak bir başlangıç projesi oluşturma sürecini göreceğiz.


Ortam Kurulumu

  1. AWS Kurulumu :

    https://aws.amazon.com/console/ adresindeki AWS konsoluna gidin, yönetici kullanıcı kimlik bilgilerinizi kullanarak oturum açın.

    1. IAM'de bir Kullanıcı oluşturun :
      • IAM'de yerel geliştirme ve CLI/SAM kullanımına ayrılmış bir kullanıcı oluşturun.
    2. DynamoDB Tablosu Oluşturun :
      • Ad: "kullanıcılar", Birincil Anahtar: "id" (Tür: String)
  2. AWS CLI'yi Yerel Makinede Yapılandırma :

    • Bir terminal açın ve $ aws configure çalıştırın
    • Daha önce oluşturulan IAM kullanıcısı için erişim anahtarlarını ve diğer varsayılan değerleri sağlayın
  3. AWS Sunucusuz Uygulama Modelini (SAM) kullanarak bir Proje başlatın :

    • Terminalinizi açın ve $ sam init çalıştırın
    • AWS hızlı başlangıç şablonunu seçin.
    • Bir "Merhaba Dünya" örneğini tercih edin.
    • Java 11 veya 17'yi, paket türünü zip olarak seçin ve bağımlılık yöneticisi olarak Maven'i kullanın.
    • CloudWatch ve XRay ile günlük kaydı ve izlemeyi etkinleştirin.
  4. Projeyi Yeniden Adlandırın : Projeyi tercih ettiğiniz adla yeniden adlandırın.

  5. Projeyi IntelliJ'de açın : IntelliJ'i başlatın ve projeyi açın.

  6. pom.xml dosyasına Bağımlılıklar ekleyin :

    • Gerekli bağımlılıkları pom.xml dosyasına ekleyin. Diğer bağımlılıklar SAM tarafından otomatik olarak dahil edileceğinden yalnızca DynamoDB'yi eklemeniz gerekir.

       <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.12.573</version> </dependency> </dependencies>



İşleyici Sınıfını Yazın

Lambda fonksiyonu için sam tarafından otomatik olarak oluşturulan handler sınıfını düzenleyip aşağıdaki kodu ekleyin; bu basit bir koddur ve gerçek projeler için daha modüler kod kullanmak isteyebilirsiniz.

 public class UserRequestHandler implements RequestHandler<Map<String,String>, Map<String,String>> { private AmazonDynamoDB amazonDynamoDB; private String DYNAMODB_TABLE_NAME = "users"; private Regions REGION = Regions.US_EAST_1; @Override public Map<String,String> handleRequest(Map<String,String> input, Context context) { this.initDynamoDbClient(); LambdaLogger logger = context.getLogger(); logger.log("Input payload:" + input.toString()); String userId = UUID.randomUUID().toString(); String firstName= input.get("firstName"); String lastName= input.get("lastName"); Map<String, AttributeValue> attributesMap = new HashMap<>(); attributesMap.put("id", new AttributeValue(userId)); attributesMap.put("firstName", new AttributeValue(firstName)); attributesMap.put("lastName", new AttributeValue(lastName)); logger.log(attributesMap.toString()); amazonDynamoDB.putItem(DYNAMODB_TABLE_NAME, attributesMap); Map<String, String> response = new HashMap<>(); response.put("id", userId); response.put("firstName", firstName); response.put("lastName", lastName); return response; } private void initDynamoDbClient() { this.amazonDynamoDB = AmazonDynamoDBClientBuilder.standard() .withRegion(REGION) .build(); } }


SAM Şablon dosyasını güncelleyin

SAM şablon dosyası, değişikliklerin AWS'de oluşturulup dağıtılmasında önemli bir rol oynar. Proje için dosyayı güncelleyin. Bu dosyada odaklanılacak temel öğeler Lambda işlev adları ve API Ağ Geçidi uç noktalarıdır. Bunlar, sunucusuz uygulamanızın işlevselliğinin merkezinde yer alır.


 AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > pc-aws-user-api Sample SAM Template for pc-aws-user-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 20 MemorySize: 128 Tracing: Active Api: TracingEnabled: true Resources: UserRequestHandlerLambdaFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: PcAwsUsersApi Handler: com.pc.aws.users.UserRequestHandler::handleRequest Runtime: java11 Architectures: - x86_64 MemorySize: 512 Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object Variables: PARAM1: VALUE JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 # More info about tiered compilation https://aws.amazon.com/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ Events: PcUsers: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /users Method: post ApplicationResourceGroup: Type: AWS::ResourceGroups::Group Properties: Name: Fn::Sub: ApplicationInsights-SAM-${AWS::StackName} ResourceQuery: Type: CLOUDFORMATION_STACK_1_0 ApplicationInsightsMonitoring: Type: AWS::ApplicationInsights::Application Properties: ResourceGroupName: Ref: ApplicationResourceGroup AutoConfigurationEnabled: 'true' Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api PcAwsUsersApi: Description: API Gateway endpoint URL for Prod stage Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/users/" UserRequestHandlerLambdaFunction: Description: Lambda Function ARN Value: !GetAtt UserRequestHandlerLambdaFunction.Arn UserRequestHandlerLambdaFunctionIamRole: Description: Implicit IAM Role created Value: !GetAtt UserRequestHandlerLambdaFunctionRole.Arn


SAM kullanarak Kod Oluşturun ve Dağıtın

IntelliJ'de terminali açın ve aşağıdaki komutları yürütün:

$ sam build

$ sam deploy –guided


İstendiğinde Yığın adını "PcAwsUsersApi" olarak sağlayın ve varsayılan seçenekleri seçin.


Çıktı, oluşturulan CloudFormation yığınını sergileyecek ve aynı zamanda API Ağ Geçidi uç noktasını da sağlayacaktır.

API'yi test edin

API'yi test etmeden önce DynamoDB'ye SAM tarafından oluşturulan Lambda rolüne erişim izni verin.

  • AWS Konsolunda Lambda işlevini açın.


  • "İzinler"e gidin ve rol adını bulun.


  • Bu role "DynamoDBFullAccess" iznini ekleyin.


Bu adım, Lambda işlevinin DynamoDB ile etkileşim kurmak için gerekli izinlere sahip olmasını sağlar.




API Gateway'e gidin ve hizmetinizin URL'sini almak için şu adımları izleyin:

  1. AWS Konsolunda API Gateway'e gidin.

  2. API'nizi seçin.

  3. Sol kenar çubuğunda "Aşamalar"ı tıklayın.

  4. "Aşamalar" altında "Ürün" aşamasını seçin.

  5. Sahne Düzenleyici bölümünde "URL'yi Çağır" seçeneğini bulacaksınız. Bu URL'yi kopyalayın.



  • Postacı uygulamasını başlatın.
  • POST İsteği Oluşturun: Aşağıdaki ayrıntılarla yeni bir istek oluşturun:
    • Yöntem: POST
    • URL: Daha önce edindiğiniz API Ağ Geçidi uç noktası URL'sini yapıştırın.
  • Başlıkları Ayarla: Gerekli başlıkları ekleyin (örneğin, Content-Type: application/json ).


  • İstek Gövdesi Ekle: İstekte göndermek istediğiniz kullanıcı verilerini temsil eden bir JSON nesnesi oluşturun. Bu, DynamoDB'de saklanmasını beklediğiniz veriler olacaktır.


Bölüm II CICD Boru Hattının Uygulanması

Bu bölümde AWS CodeCommit, CodeBuild ve CodePipeline kullanılarak bir CICD işlem hattının nasıl oluşturulacağını göstereceğiz. İşlem hattı, depodan kod alan, derleme dosyasını kullanarak derleyen ve yığını oluşturmak için CloudFormation'ı tetikleyen bir derleme işlemi başlatacaktır.


CodeCommit Deposu Oluşturun

AWS'de oturum açın ve CodeCommit hizmetini arayın.


Projenizin kaynak kodunu depolamak için AWS CodeCommit'te yeni bir depo oluşturun.

Kodu Depoya Kaydet

IntelliJ'de terminali açın ve Adım I'de oluşturulan kodu işlemek için aşağıdaki komutları girin.

 $ git init → This initialize local git $ git add . → This will stage files $ git commit -m "commit to CodeCommit"


Değişiklikleri uzak Repo'ya aktarın

CodeCommit repo URL'sini aws konsolundan kopyalayın.

 $ git remote add origin <repo URL> $ git push --set-upstream origin master --> This will prompt for user/password



AWS CodeBuild projesi oluşturun

Uygulamanızı nasıl oluşturacağınızı belirten bir CodeBuild projesi oluşturun. Buna derleme ortamlarının, derleme komutlarının ve bağımlılıkların tanımlanması da dahildir.


  • Derleme dosyalarını depolamak için bir S3 grubu oluşturun.


  • AWS Code Build'i arayın, yeni bir Proje oluşturun ve kod kaynağı olarak CodeCommit'i ve yapı depolaması için S3'ü sağlayın


CodeBuild'ı kurmak için proje dizininizde buildspec.yml adında bir yapı belirtimi dosyası oluşturmanız gerekir. Bu dosya CodeBuild için derleme komutlarını ve talimatlarını içerecektir.


buildspec.yml dosyası oluşturmaya ilişkin ayrıntılı talimatlar için buradaki resmi belgelere başvurabilirsiniz.


 version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - sam build - sam package --output-template-file pcoutputtemplate.yaml --s3-bucket com-appsdev-pc-001 post_build: commands: - echo Build completed on `date` artifacts: files: - pcoutputtemplate.yaml


Yeni dosyayı yerelden depoya aktarın.


Bundan sonra, Kodun Repo'dan Çekilip Çekilmediğini ve yapıtların oluşturulup oluşturulmadığını görmek için projeyi inşa edebilirsiniz.


CodePipeline oluşturma

  • AWS CodePipeline'da yeni bir işlem hattı oluşturun.


  • İşlem hattını kaynak olarak CodeCommit deponuza bağlayın.


  • İşlem hattını CodeBuild'ı derleme aşaması olarak kullanacak şekilde yapılandırın.


  • Oluşturduğunuz şablonu kullanarak CloudFormation'u tetiklemek için bir dağıtım aşaması ekleyin.


İşlem hattı, git taahhüdüne göre otomatik olarak kod oluşturacak ve dağıtacaktır.



Boru Hattını Test Edin


  • Projenizi IntelliJ'de açın.


  • Dosyalarınızdan birinde küçük bir değişiklik yapın; örneğin başka bir kaydedici satırı ekleyin.


  • Değişikliği yerel Git deponuza kaydedin.


  • Taahhüdü CodeCommit deposuna aktarın.


 $ git branch CR01 $ git checkout CR01 $ git add . $ git commit -m “CR01” $ git push --set-upstream origin CR01 You cand also create a pull request in aws code commit, just for simplicity I am merging from local $ git checkout master $ git merge --ff-only CR01 $ git push
  • AWS CodePipeline konsoluna gidin.


  • İşlem hattının otomatik olarak başladığını görmelisiniz. Depodan en son kodu alacak, CodeBuild kullanarak projeyi oluşturacak ve CloudFormation kullanarak dağıtacaktır.


  • CodePipeline panosundaki ilerlemeyi izleyin.


Bu, kodunuzda değişiklik yapma, bunları depoya gönderme ve CICD işlem hattının güncellenmiş kodu otomatik olarak tetikleyip dağıtma sürecini simüle edecektir.







































Makale, AWS API Gateway, Lambda, DynamoDB, CodeCommit, CodeBuild ve CodePipeline'dan yararlanarak esnek ve otomatik bir dağıtım sürecinin nasıl tasarlanacağını gösteriyor.


Okuduğunuz için teşekkürler. Sunucusuz çalışmalarınızın başarı ve yeniliklerle buluşmasını dilerim!