Web ajansı » Dijital haberler » Git'ten Güvenli Lambda dağıtımları nasıl otomatikleştirilir

Git'ten Güvenli Lambda dağıtımları nasıl otomatikleştirilir

Lambda, muhtemelen daha önce işlevlerinizi yazmak için kullandığınız web tabanlı bir metin düzenleyiciye sahiptir. Platformu öğrenen yeni başlayanlar için harika, ancak güncellemelerle başa çıkmanın en iyi yolu değil. Git'te Lambda işlevlerinizi nasıl izleyeceğiniz aşağıda açıklanmıştır.

CI / CD Lambda için nasıl çalışır?

El ile düzenleyiciyi kullanmak yerine, işlevlerinizi yerel olarak geliştirmeli, değişiklikleri bir Git deposuna göndermeli ve göndermeli ve derleme ve dağıtımı sizin için CodePipeline'ın üstlenmesini sağlamalısınız.

CodePipeline, kaynak kodunuzdaki değişiklikleri algıladığında otomatik olarak çalışır ve değişiklikleri derleme için CodeBuild'e (veya Jenkins'e) gönderir. Bu adım isteğe bağlıdır ve Lambda için kullanmayabilirsiniz, ancak TypeScript gibi bir şey kullanıyorsanız bu adıma ihtiyacınız olacaktır. Derlemeden sonra, değişiklikler dağıtımı yöneten CodeDeploy'a gönderilir.

CodeDeploy, Lambda işlevlerinizi otomatik olarak günceller ve yeni bir sürüm başlatır. Dağıtım sürecini daha sorunsuz hale getirmek için trafiğin %100'ü yeni işleve yönlendirilene kadar trafiği bir takma ad kullanarak kademeli olarak taşıyabilir.

CodeDeploy, fiili dağıtımı yönetmek için AWS Sunucusuz Uygulama (SAM) modelini kullanır. SAM, bir kod olarak altyapı hizmeti olan CloudFormation'ın bir uzantısıdır. Esasen, Lambda işlevlerinin ve önkoşullarının dağıtılmasıyla ilişkili tüm yapılandırmayı yönetmek için kullanılan ve yalnızca kod kullanarak dağıtabilmenin önemli bir parçası olan, insan tarafından okunabilen bir Veri Serileştirme Dili (YAML) modelidir.

Kaynak kontrolünü yapılandırma

Bu adım oldukça basittir. Tüm kodunuzu tutmak ve Git ile başlatmak için yeni bir proje dizini oluşturmak isteyeceksiniz. SAM şablonu, adlı bu dizinin köküne gidecektir. template.yml. Her işlev kendi klasörüne gider, kök her biri için index.js olur. Her şeyi açıkça ayırır ve yönetimi kolaylaştırır

Proje Dizini | --template.yml | --İşlev | | --index.js | --AnotherFunction | --index.js

CodePipeline, kaynak denetimi için Github ve BitBucket'i destekler. Bunlardan herhangi birini kullanırsanız, tek yapmanız gereken dağıtımlar için yeni bir dal oluşturmaktır (veya sizin için uygunsa sadece master'ı kullanın). Başka bir hizmet kullanıyorsanız, AWS'nin kendi CodeCommit kod denetimini ikincil depo olarak kullanmak ve istediğiniz zaman güncelleme yapmak istediğinizde değişiklik yapmak isteyeceksiniz.

SAM modeli yazma

Bu adım, işleviniz ve gereksinimleriniz için en karmaşık ve en spesifik adım olacaktır. Lambda işlevinizi ve gerekli tüm kaynaklarını yapılandıracak bir SAM şablonu oluşturmanız gerekecektir.

Temel bir şablon şöyle görünür:

AWSTemplateFormatVersion: '2010-09-09' Dönüştürme: AWS :: Sunucusuz-2016-10-31 Açıklama: İşlevinizi açıklayan bir AWS Sunucusuz Belirtim şablonu Kaynaklar: HelloWorld: Tür: AWS :: Sunucusuz :: İşlev Özellikleri: İşleyici: HelloWorld / index.handler Çalışma Zamanı: nodejs8.10

Bu, NodeJS üzerinde çalışan ve işleyicisi içinde bulunan bir Lambda işlevi olan bir kaynağı kaydeder. HelloWorld/index.js.

SAM şablonundan diğer kaynakları da dağıtabilirsiniz. Örneğin, işlevinizi çağırmak ve işlevinizi belirli bir API yolunda çalışacak şekilde yapılandırmak üzere API Ağ Geçidine izin vermek için aşağıdakileri eklersiniz:

AWSTemplateFormatVersion: '2010-09-09' Dönüştürme: AWS :: Sunucusuz-2016-10-31 Açıklama: İşlevinizi açıklayan bir AWS Sunucusuz Belirtim şablonu Kaynaklar: HelloWorld: Tür: AWS :: Sunucusuz :: İşlev Özellikleri: İşleyici: HelloWorld / index.handler Çalışma Zamanı: nodejs8.10
      Olaylar:
        MerhabaDünyaApi:
          Tür: API
          Özellikler:
            Yol: / merhabadünya
            Yöntem: GET
  HelloWorldİzin:
    Tür: AWS :: Lambda :: İzin
    Özellikler:
      Eylem: lambda: InvokeFunction
      Fonksiyon adı:
        Fn :: GetAtt:
        - Bonjour Monde
        - RNA
      Ana: apigateway.amazonaws.com
      KaynakArn:
        Fn :: Alt: arn: aws: execute-api: $ {AWS :: Bölge}: $ {AWS :: AccountId}: * / * / * / *

Kesinlikle burada listelenebileceklerden daha spesifik kullanımlara ihtiyacınız olacak. SAM hakkında daha fazla bilgi için kullanıcı kılavuzumuzu, AWS Geliştirici Kılavuzlarını veya Github'daki tam diyagramı okuyabilirsiniz.

Çalışan bir modeliniz olduğunda, SAM CLI'yi yükleyerek dağıtımı test edebilirsiniz:

pip kurulumu aws-sam-cli

Ardından, projenizi paketleyecek ve yapıtları bir S3 klasöründe depolayacaksınız:

sam paketi --template-file template.yml --output-template-file package.yml --s3-bucket kova-adı

Ve dağıtımı manuel olarak çalıştıracaksınız:

sam konuşlandırma --template-file package.yml --stack-name sam-hello-world --capabilities CAPABILITY_IAM

Her şey yolunda gittiyse, Lambda'da işlevlerinizle birlikte yeni bir CloudFormation yığını ve bir uygulama görmelisiniz.

CodePipeline ile projeyi paketleme ve dağıtma

Derlenmiş bir dille çalışmıyor olsanız bile bu adım isteğe bağlı değildir. SAM modelini kullanarak, CodeBuild, projenin paketlenmesini CodeDeploy ile çok kolay bir şekilde dağıtılabilecek bir şeye dönüştürmek için burada kullanılacaktır. İsteğe bağlı olarak, paketlemeden önce aşağıdaki gibi diğer komutları çalıştırabilirsiniz: npm run build et npm install.

İlk olarak, CloudFormation güncellemelerini işleyebilecek bir yürütme rolüne ihtiyacınız olacak. Yeni bir rol eklemek için IAM yönetim konsolunu açın. Bu rolü kullanacak kaynak olarak "CloudFormation"ı seçin, ardından "AWSLambdaExecute yetkilendirme politikası.

Rolü kaydedin, açın ve aşağıdaki çevrimiçi ilkeyi ekleyin:

{"Statement": ({"Eylem": ("apigateway: *", "codedeploy: *", "lambda: *", "cloudformation: CreateChangeSet", "iam: GetRole", "iam: CreateRole", "iam : DeleteRole "," iam: PutRolePolicy "," iam: AttachRolePolicy "," iam: DeleteRolePolicy "," iam: DetachRolePolicy "," iam: PassRole "," s3: GetObject "," s3: GetObjectVersion "," s3: GetBucketVersioning " ")," Kaynak ":" * "," Etki ":" İzin Ver "})," Sürüm ":" 2012-10-17 "}

CodePipeline konsolundan yeni bir işlem hattı oluşturun. Yeni bir hizmet rolü oluşturmak için varsayılan ayarları seçin. Otomatik olarak yapılandırılacaktır.

Kaynak denetimi adımı için kaynak denetim türünü, veri havuzunu ve yayımlama dalını seçin.

Oluşturma adımı için CodeBuild'te yeni bir proje oluşturmak isteyeceksiniz. Varsayılan yapılandırma doğrudur, yalnızca yapı işletim sistemi olarak Amazon Linux 2'yi seçin ve standart çalışma zamanını ve standart görüntüyü seçin.

codePipeline için ihtiyacınız olacak en önemli şey, buildspec.yml , proje dizininizin köküne yerleştirilir. Bu, CodeBuild'i çalıştırması gereken komutlarla yapılandırır. Aşağıdaki yapılandırma, TypeScript'i yükleyen, tüm NPM paketlerini çalıştıran bir örnektir. npm run build, ardından CloudFormation için her şeyi toplar.

sürüm: 0.2 aşama: kurulum: çalışma zamanı sürümleri: düğümler: 10 komutlar: - npm install -g typescript build: komutlar: - echo Derleme "tarih"te başladı - npm kurulum zamanı - npm build çalıştırma - dışa aktarma BUCKET = typescript-lambda - aws cloudformation package --template-file template.yml --s3-bucket $ BUCKET --output-template-file outputtemplate.yml yapıtları: tür: zip dosyaları: - template.yml - outputtemplate.yml

Muhtemelen projenize bağlı olarak değiştirmeniz gerekecektir.

Tamamlandığında, son adımı yapılandırabilirsiniz. CodeDeploy'u kullanmak yerine, tüm paket zaten oluşturma aşamasında gerçekleştiğinden, işleri doğrudan güncellemek için CloudFormation'ı kullanacağız. Dağıtım sağlayıcısı olarak "CloudFormation"ı seçin ve eylem modunu "Değişiklik kümesi oluştur veya değiştir" olarak ayarlayın. Yeni bir ad girin ve oyunun adını düzenleyin.

Model için "BuildArtifact"i seçin ve girin outputtemplate.yml önceki adımdan. Yeteneklere "Yetenek IAM" ekleyin ve daha önce manuel olarak oluşturduğunuz hizmet rolünü seçin.

"Oluştur"u tıkladığınızda işlem hattınız hatasız çalışmalıdır. Ancak, CloudFormation adımı bir değişiklik seti, bu değişikliklerin bir önizlemesi gibidir. Değişiklikleri gerçekten dağıtmak için değişiklik setini çalıştırmamız gerekiyor.

Oluşturduğunuz işlem hattında "Düzenle"yi tıklayın. "Dağıt" altında, "Değiştir"e ve ardından "Bir eylem grubu ekle"ye tıklayın sonra Eylem zaten oluşturuldu. Yeni eylemi bundan önce oluşturursanız, çalışmaz.

Sağlayıcı olarak "CloudFormation"ı seçin. Giriş yapıtı olarak "BuildArtifact"i seçin. Eylem modu ve değişiklik kümesi adı için, ilk dağıtım eylemi için oluşturduğunuz değerlerin aynısını girin.

"Kaydet"e tıkladığınızda ana boru hattı ekranına geri döneceksiniz. İşlem hattını manuel olarak yeniden çalıştırmak için "Değişikliği Yayınla"yı tıklayın. Şimdi tamamlanmalı ve değişiklikler Lambda konsolunda görünmelidir.

Herhangi bir hata alırsanız, onları bulmak oldukça kolaydır çünkü CodePipeline'daki hata mesajının yanındaki "Daha Fazla Ayrıntı"yı tıklayabilirsiniz. Bu büyük olasılıkla başarısız bir derleme, eksik SAM modeli veya CodeBuild veya CloudFormation için yetersiz izinlerdir.

Kaynak kodu denetiminizde herhangi bir değişiklik yaparsanız, bunun CodePipeline tarafından algılanması ve tüm bu işlemi yeniden başlatması gerekir.

★ ★ ★ ★ ★