AWS üzerindeki projeler

Modern Bir Web Uygulaması Oluşturun

Bir web uygulaması dağıtın, bir veritabanına bağlanın ve kullanıcı davranışını analiz edin

4. Modül: Kullanıcı Kaydını Kurun

Bu modülde kullanıcıya özgü bilgileri yakalayabilmeniz için web sitesinde kullanıcı kaydı kuracaksınız.

Genel Bakış

Mythical Mysfits web sitesine kullanıcıların en sevdikleri mysfit için oy vermesine ve bir mysfit'i benimsemesine izin vermek gibi daha kritik yönler eklemek için önce kullanıcıların web sitesine kaydolmasını sağlamalıyız. Web sitesi kullanıcılarının kaydını ve kimlik doğrulamasını etkinleştirmek için tamamen yönetilen bir kullanıcı kimliği yönetim hizmeti olan AWS Cognito üzerinde bir Kullanıcı Havuzu oluşturacağız.

Ardından, yalnızca kayıtlı kullanıcıların web sitesinde mysfits'i beğenme veya benimseme yetkisine sahip olduklarından emin olmak için NLB'mizin önünde durması için Amazon API Gateway ile bir REST API dağıtacağız. Amazon API Gateway aynı zamanda yönetilen bir hizmettir ve SSL sonlandırma, istek yetkilendirme, kısıtlama, API aşamaları ve sürüm oluşturma ve çok daha fazlası gibi yaygın olarak gerekli REST API yeteneklerini sağlar.

Gerekli kaynakları AWS'ye dağıtmak için AWS CLI'yi tekrar kullanacaksınız.

Mimari Diyagramı

kullanıcı kaydı mimari diyagramını kurun

Uygulama Talimatları

  • A: Cognito Kullanıcı Havuzunu Oluşturun

    Tüm Mythical Mysfits ziyaretçilerinin depolanacağı Cognito Kullanıcı Havuzu oluşturmak için MysfitsUserPool adlı bir kullanıcı havuzu oluşturmak üzere aşağıdaki CLI komutunu yürütün ve bu havuza kayıtlı olan tüm kullanıcıların onaylanmış kullanıcı olmadan önce e-posta adreslerinin onay e-postasıyla otomatik olarak doğrulanması gerektiğini belirtin.

    aws cognito-idp create-user-pool --pool-name MysfitsUserPool --auto-verified-attributes email

    Sonraki adımlarda kullanmanız gereken kullanıcı havuzunuz için benzersiz kimliği içeren yukarıdaki komuttan yanıtı kopyalayın. Ör: Id: us-east-1_ab12345YZ)

    B: Bir Cognito Kullanıcı Havuzu İstemcisi Oluşturun

    Ardından, ön uç web sitemizi Cognito ile entegre etmek üzere bu kullanıcı havuzu için yeni bir Kullanıcı Havuzu İstemcisi oluşturmalıyız. Bu, web sitemizin, web sitesi kullanıcılarının Mythical Mysfits kullanıcı havuzunda oturum açabilecekleri ve kayıt yaptırabilecekleri cognito'da kimliği doğrulanmamış API'ları arama yetkisine sahip olmasını sağlayacak benzersiz bir istemci tanımlayıcısı oluşturur. Yukarıdaki kullanıcı havuzu için AWS CLI kullanarak yeni bir istemci oluşturmak amacıyla aşağıdaki komutu çalıştırın (--user-pool-id değerini yukarıda kopyaladığınız değerle değiştirin):

    aws cognito-idp create-user-pool-client --user-pool-id REPLACE_ME --client-name MysfitsUserPoolClient
  • Ardından, dikkatimizi NLB'miz herhangi bir istek almadan önce bizim istek yetkilendirmesi yapabilmemiz için mevcut Flask hizmetimizin önünde yeni bir RESTful API oluşturmaya verelim. Bunu modüle genel bakış bölümünde açıklandığı gibi Amazon API Gateway ile yapacağız.

    API Ağ Geçidinin NLB ile özel olarak entegre olması için API Ağ Geçidi API'lerinin bir VPC içinde özel olarak barındırılan arka uç web hizmetleriyle doğrudan entegre olmasını sağlayan bir API Ağ Geçidi VPC Bağlantısı yapılandıracağız. Not: Bu atölyenin amaçları doğrultusunda daha önceki modüllerde doğrudan çağrılabilmesi için NLB'yi internete yönelik olacak şekilde oluşturduk. Bu nedenle bu modülden sonra API'mızda Yetkilendirme belirteçleri gerekecek olsa da NLB'miz aslında API Ağ Geçidi API'sının arkasında kamuya açık olacak.

    Bir gerçek dünya senaryosunda API Ağ Geçidinin Internet'e yönelik API yetkilendirme stratejiniz olacağını bilerek NLB'nizi baştan itibaren dâhili olacak şekilde oluşturmalısınız (veya mevcut olanın yerine yeni bir dâhili yük dengeleyici oluşturmalısınız). Ancak, zamanla önceden oluşturduğumuz ve herkesin erişebileceği NLB'yi kullanacağız.

    Aşağıdaki CLI komutunu kullanarak yaklaşan REST API'miz için VPC Bağlantısı oluşturun (belirtilen değeri 2. modülde NLB oluşturulduğunda kaydettiğiniz Yük Dengeleyici ARN'si ile değiştirmeniz gerekir):

    aws apigateway create-vpc-link --name MysfitsApiVpcLink --target-arns REPLACE_ME_NLB_ARN > ~/environment/api-gateway-link-output.json

    Yukarıdaki komut, oluşturulan VPC Bağlantısı kimliğini içeren api-gateway-link-output.json adlı bir dosya oluşturur. Ayrıca, durumu aşağıdakine benzer şekilde BEKLEYEN olarak gösterecektir.

    Oluşturulmasının bitmesi yaklaşık 5-10 dakika sürer, kimliği bu dosyadan kopyalayabilir ve sonraki adıma geçebilirsiniz.

    {
        "status": "PENDING",
        "targetArns": [
            "YOUR_ARN_HERE"
        ],
        "id": "abcdef1",
        "name": "MysfitsApiVpcLink"
    }

    VPC bağlantısı oluşturulduğunda Amazon API Gateway'i kullanarak gerçek REST API'sini oluşturmaya devam edebiliriz.

    B: Swagger Kullanarak REST API'sini Oluşturun

    MythicalMysfits REST API'niz, API'leri JSON aracılığıyla tanımlamak için popüler bir açık kaynaklı çerçeve olan ** Swagger ** kullanılarak tanımlanır. API'nin bu Swagger tanımı, `~/çevre/aws-modern-uygulama-atölye/modül-4/aws-cli/api-swagger.json` adresindedir. Bu dosyayı açın; REST API'sını ve içinde tanımlanan tüm kaynaklarını, yöntemlerini ve yapılandırmasını göreceksiniz.

    Bu JSON dosyasında Cognito Kullanıcı Havuzunuza özgü parametreleri ve Network Load Balancer’inizi içerecek şekilde güncellenmesi gereken birkaç yer vardır.

    API tanımındaki `securityDefinitions` nesnesi Yetkilendirme üst bilgisini kullanarak bir apiKey yetkilendirme mekanizması kurduğumuzu gösterir. AWS'nin `x-amazon-api-gateway-` önekini kullanarak Swagger'a özel uzantılar sağladığını fark edeceksiniz. Bu uzantılar, API Ağ Geçidine özgü özelliklerden yararlanmak için tipik swagger dosyalarına API Gateway'e özel işlevlerin eklenebileceği yerlerdir.

    `REPLACE_ME` öğesinin bulunduğu ve belirli parametrelerinizi bekleyen çeşitli yerleri aramak içindosya üzerinden CTRL-F tuşlarına basın. Düzenlemeler yapıldıktan sonra dosyayı kaydedin ve aşağıdaki AWS CLI komutunu yürütün:  

    aws apigateway import-rest-api --parameters endpointConfigurationTypes=REGIONAL --body file://~/environment/aws-modern-application-workshop/module-4/aws-cli/api-swagger.json --fail-on-warnings

    Bu komutun verdiği yanıtı kopyalayın ve sonraki adım için `id` değerini kaydedin:

    {
        "name": "MysfitsApi",
        "endpointConfiguration": {
            "types": [
                "REGIONAL"
            ]
        },
        "id": "abcde12345",
        "createdDate": 1529613528
    }
    C: API'yi Dağıtın

    Şimdi API'mız oluşturuldu, ancak henüz herhangi bir yere dağıtılmadı. API'mızı dağıtmak için önce bir dağıtım oluşturmalı ve dağıtımın hangi **aşaması**’nın ön planda olduğunu belirtmeliyiz. Aşama, API'nın anlık görüntüsü olan bir dağıtımın adlandırılmış başvurusudur.

    Belirli bir dağıtımı yönetmek ve optimize etmek için bir Aşama kullanırsınız. Örneğin, önbelleğe almayı etkinleştirmek, istek kısıtlamayı özelleştirmek, günlüğe kaydetmeyi yapılandırmak, aşama değişkenlerini tanımlamak veya test için bir canary sürümü eklemek amacıyla aşama ayarlarını yapabilirsiniz. Aşamamızı "prod" olarak isimlendireceğiz. Prod aşaması için bir dağıtım oluşturmak amacıyla aşağıdaki CLI komutunu yürütün:

    aws apigateway create-deployment --rest-api-id REPLACE_ME_WITH_API_ID --stage-name prod

    Bununla kullanıcı Yetkilendirmesi yapabilen REST API'miz İnternet'te dağıtılır ve kullanılabilir... ama nerede?! API'nız şu konumda kullanılabilir:

    https://REPLACE_ME_WITH_API_ID.execute-api.REPLACE_ME_WITH_REGION.amazonaws.com/prod

    Yukarıdakileri kopyalayın, uygun değerleri değiştirin ve URI'nin sonuna `/ mysfits` ekleyin. Bir tarayıcı adres çubuğuna girildiğinde Mysfits JSON yanıtınızı bir kez daha görmelisiniz. Ancak, Flask hizmet arka ucunun henüz uygulanmadığı mysfits'i benimseme ve beğenme gibi çeşitli özellikler ekledik.

    Şimdi sonrakiyle ilgilenelim.

    Bu hizmet güncellemeleri CI/CD kanalınızla otomatik olarak iletilirken bir sonraki adıma geçmek için devam edin.

  • A: Flask Hizmet Arka Ucunu Güncelleyin

    Mysfit Profillerini görüntülemek ve benimsemek için yeni işlevselliğe uyum sağlamak amacıyla arka uç Flask web hizmetiniz için güncellenmiş Python kodunu ekledik.

    Bu kodlarla mevcut kod tabanınızın üzerine yazalım ve bunları depoya aktaralım:

    cd ~/environment/MythicalMysfitsService-Repository/
    cp -r ~/environment/aws-modern-application-workshop/module-4/app/* .
    git add .
    git commit -m "Update service code backend to enable additional website features."
    git push

    Bu hizmet güncellemeleri CI/CD kanalınızla otomatik olarak iletilirken bir sonraki adıma geçmek için devam edin.

    B: S3'te Mythical Mysfits Web Sitesini Güncelleyin

    Kısa süre içinde Amazon S3'e ileteceğimiz Mythical Mysfits index.html dosyasının yeni sürümünü açın; O, şurada bulunur: ~ / environment / aws-modern-application-workshop / module-4 / app / web / index.html. Bu yeni index.html dosyasında kullanıcı kaydı ve oturum açma deneyimi eklemek için kullanılan ek HTML ve JavaScript kodunu göreceksiniz.

    Bu kod onu gerektiren tüm API çağrılarına kayıt, kimlik doğrulama ve yetkilendirmenin yönetilmesine yardımcı olmak için AWS Cognito JavaScript SDK ile etkileşime girer.

    Bu dosyada tek tırnak içindeki REPLACE_ME dizelerini yukarıdan kopyaladığınız OutputValues ile değiştirin ve dosyayı kaydedin:

    before-replace2

    Ayrıca, kullanıcı kaydı işlemi için bu değerleri register.html ve confirm.html’ye eklemek amacıyla ek iki HTML dosyanız vardır. Kopyalanan değerleri bu dosyalardaki REPLACE_ME dizelerine de ekleyin.

    Şimdi bu HTML dosyalarını ve Cognito JavaScript SDK'sını yeni özelliklerin çevrimiçi yayınlanması için Mythical Mysfits web sitesi içeriğimizi barındıran S3 klasörüne kopyalayalım.

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-4/web/ s3://YOUR-S3-BUCKET/

    Yeni işlevselliği görmek için tarayıcınızdaki Mythical Mysfits web sitesini yenileyin!

    Bu 4. Modül’ü sonlandırmaktadır.

Son olarak kullanıcı davranışını yakalayın