Memperbarui kode aplikasi untuk beban kerja alur kerja berbasis peristiwa (EDW)
Artikel ini menguraikan pembaruan kode aplikasi utama untuk mereplikasi beban kerja EDW di Azure menggunakan Azure SDK untuk bekerja dengan layanan Azure.
Beban kerja AWS bergantung pada layanan AWS dan SDK AWS akses data terkait. Kami sudah memetakan layanan AWS ke layanan Azure yang setara, sehingga kami sekarang dapat membuat kode untuk mengakses data untuk antrean produsen dan tabel database hasil konsumen di Python menggunakan Azure SDK.
Untuk bidang data, isi pesan produsen (payload) adalah JSON, dan tidak memerlukan perubahan skema apa pun untuk Azure. Aplikasi konsumen asli menyimpan pesan yang diproses dalam tabel DynamoDB. Dengan modifikasi kecil pada kode aplikasi konsumen, kita dapat menyimpan pesan yang diproses dalam Tabel Azure Storage.
Beban kerja AWS menggunakan kebijakan peran IAM yang menentukan akses penuh ke sumber daya Amazon Simple Queue Service (SQS):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "*"
}
]
}
Beban kerja AWS menggunakan kebijakan peran IAM yang menentukan akses penuh ke sumber daya Amazon DynamoDB:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "*"
}
]
}
Dalam beban kerja AWS, Anda menetapkan kebijakan ini menggunakan AWS CLI:
aws iam create-policy --policy-name sqs-sample-policy --policy-document <filepath/filename>.json
aws iam create-policy --policy-name dynamodb-sample-policy --policy-document <filepath/filename>.json
aws iam create-role --role-name keda-sample-iam-role --assume-role-policy-document <filepath/filename>.json
aws iam attach-role-policy --role-name keda-sample-iam-role --policy-arn=arn:aws:iam::${<AWSAccountID>}:policy/sqs-sample-policy
aws iam attach-role-policy --role-name keda-sample-iam-role --policy-arn=arn:aws:iam::${<AWSAccountID>}:policy/dynamodb-sample-policy
# Set up trust relationship Kubernetes federated identity credential and map IAM role via kubectl annotate serviceaccount
Mari kita jelajahi cara melakukan logika komunikasi layanan AWS serupa dalam lingkungan Azure menggunakan AKS.
Anda menerapkan dua definisi peran Azure RBAC untuk mengontrol akses bidang data ke Antrean Azure Storage dan Tabel Azure Storage. Peran ini seperti kebijakan peran IAM yang digunakan AWS untuk mengontrol akses ke SQS dan DynamoDB. Peran Azure RBAC tidak dibundel dengan sumber daya. Sebagai gantinya, Anda menetapkan peran ke perwakilan layanan yang terkait dengan sumber daya tertentu.
Dalam implementasi Azure dari beban kerja EDW, Anda menetapkan peran ke identitas terkelola yang ditetapkan pengguna yang ditautkan ke identitas beban kerja dalam pod AKS. Azure Python SDK untuk Azure Storage Queue dan Azure Storage Table secara otomatis menggunakan konteks prinsip keamanan untuk mengakses data di kedua sumber daya.
Anda menggunakan peran Kontributor Data Antrean Penyimpanan untuk memungkinkan penerima peran membaca, menulis, atau menghapus terhadap Antrean Azure Storage, dan peran Kontributor Data Tabel Penyimpanan untuk mengizinkan penerima tugas membaca, menulis, atau menghapus data terhadap Tabel Azure Storage.
Langkah-langkah berikut menunjukkan cara membuat identitas terkelola dan menetapkan peran Kontributor Data Antrean Penyimpanan dan Kontributor Data Tabel Penyimpanan menggunakan Azure CLI:
Buat identitas terkelola menggunakan
az identity create
perintah .managedIdentity=$(az identity create \ --resource-group $resourceGroup \ --name $managedIdentityName
Tetapkan peran Kontributor Data Antrean Penyimpanan ke identitas terkelola
az role assignment create
menggunakan perintah .principalId=$(echo $managedIdentity | jq -r `.principalId`) az role assignment create \ --assignee-object-id $principalId \ --assignee-principal-type ServicePrincipal --role "Storage Queue Data Contributor" \ --scope $resourceId
Tetapkan peran Kontributor Data Tabel Penyimpanan ke identitas terkelola menggunakan
az role assignment create
perintah .az role assignment create \ --assignee-object-id $principalId \ --assignee-principal-type ServicePrincipal --role "Storage Table Data Contributor" \ --scope $resourceId
Untuk melihat contoh kerja, lihat deploy.sh
skrip di repositori GitHub kami.
Beban kerja AWS menggunakan pustaka AWS boto3 Python untuk berinteraksi dengan antrean Amazon SQS untuk mengonfigurasi akses antrean penyimpanan. Kemampuan AWS IAM AssumeRole
mengautentikasi ke titik akhir SQS menggunakan identitas IAM yang terkait dengan pod EKS yang menghosting aplikasi.
import boto3
# other imports removed for brevity
sqs_queue_url = "https://<region>.amazonaws.com/<queueid>/source-queue.fifo"
sqs_queue_client = boto3.client("sqs", region_name="<region>")
response = sqs_client.send_message(
QueueUrl = sqs_queue_url,
MessageBody = 'messageBody1',
MessageGroupId='messageGroup1')
Implementasi Azure menggunakan Azure SDK untuk Python dan autentikasi OAuth tanpa kata sandi untuk berinteraksi dengan layanan Azure Storage Queue. Kelas DefaultAzureCredential
Python mengetahui identitas beban kerja dan menggunakan identitas terkelola yang terkait dengan identitas beban kerja untuk mengautentikasi ke antrean penyimpanan.
Contoh berikut menunjukkan cara mengautentikasi ke Antrean Azure Storage menggunakan DefaultAzureCredential
kelas :
from azure.identity import DefaultAzureCredential
from azure.storage.queue import QueueClient
# other imports removed for brevity
# authenticate to the storage queue.
account_url = "https://<storageaccountname>.queue.core.windows.net"
default_credential = DefaultAzureCredential()
aqs_queue_client = QueueClient(account_url, queue_name=queue_name ,credential=default_credential)
aqs_queue_client.create_queue()
aqs_queue_client.send_message('messageBody1')
Anda dapat meninjau kode untuk produsen antrean (aqs-producer.py
) di repositori GitHub kami.
Kode AWS asli untuk akses DynamoDB menggunakan pustaka AWS boto3 Python untuk berinteraksi dengan antrean Amazon SQS. Bagian konsumen dari beban kerja menggunakan kode yang sama dengan produsen untuk menyambungkan ke antrean Amazon SQS untuk membaca pesan. Konsumen juga berisi kode Python untuk terhubung ke DynamoDB menggunakan kemampuan AWS IAM AssumeRole
untuk mengautentikasi ke titik akhir DynamoDB menggunakan identitas IAM yang terkait dengan pod EKS yang menghosting aplikasi.
# presumes policy deployment ahead of time such as: aws iam create-policy --policy-name <policy_name> --policy-document <policy_document.json>
dynamodb = boto3.resource('dynamodb', region_name='<region>')
table = dynamodb.Table('<dynamodb_table_name>')
table.put_item(
Item = {
'id':'<guid>',
'data':jsonMessage["<message_data>"],
'srcStamp':jsonMessage["<source_timestamp_from_message>"],
'destStamp':'<current_timestamp_now>',
'messageProcessingTime':'<duration>'
}
)
Implementasi Azure menggunakan Azure SDK untuk Python untuk berinteraksi dengan Tabel Azure Storage.
Sekarang Anda memerlukan kode produsen untuk mengautentikasi ke Tabel Azure Storage. Seperti yang dibahas sebelumnya, skema yang digunakan di bagian sebelumnya dengan DynamoDB tidak kompatibel dengan Tabel Azure Storage. Anda menggunakan skema tabel yang kompatibel dengan Azure Cosmos DB untuk menyimpan data yang sama dengan beban kerja AWS di DynamoDB.
Contoh berikut menunjukkan kode yang diperlukan untuk Azure:
from azure.storage.queue import QueueClient
from azure.data.tables import (TableServiceClient)
creds = DefaultAzureCredential()
table = TableServiceClient(
endpoint=f"https://{storage_account_name}.table.core.windows.net/",
credential=creds).get_table_client(table_name=azure_table)
entity={
'PartitionKey': _id,
'RowKey': str(messageProcessingTime.total_seconds()),
'data': jsonMessage['msg'],
'srcStamp': jsonMessage['srcStamp'],
'dateStamp': current_dateTime
}
response = table.insert_entity(
table_name=azure_table,
entity=entity,
timeout=60
)
Tidak seperti DynamoDB, kode Tabel Azure Storage menentukan dan PartitionKey
RowKey
. PartitionKey
mirip dengan ID uniqueidentifer
di DynamoDB. PartitionKey
adalah uniqueidentifier
untuk partisi dalam kontainer logis di Tabel Azure Storage. RowKey
adalah uniqueidentifier
untuk semua baris dalam partisi tertentu.
Anda dapat meninjau kode produsen dan konsumen lengkap di repositori GitHub kami.
Sekarang, Anda dapat membangun gambar kontainer dan mendorongnya ke Azure Container Registry (ACR).
app
Dalam direktori repositori kloning, skrip shell yang disebut docker-command.sh
membangun gambar kontainer dan mendorongnya ke ACR. .sh
Buka file dan tinjau kodenya. Skrip ini membangun gambar kontainer produsen dan konsumen dan mendorongnya ke ACR. Untuk informasi selengkapnya, lihat Pengenalan registri kontainer di Azure dan Mendorong dan menarik gambar di ACR.
Untuk membangun gambar kontainer dan mendorongnya ke ACR, pastikan variabel AZURE_CONTAINER_REGISTRY
lingkungan diatur ke nama registri yang ingin Anda dorong gambarnya, lalu jalankan perintah berikut:
./app/docker-command.sh
Microsoft mempertahankan artikel ini. Kontributor berikut awalnya menulisnya:
- Ken Kilty | TPM Utama
- Russell de Pina | TPM Utama
- Jenny Hayes | Pengembang Konten Senior
- Carol Smith | Pengembang Konten Senior
- Erin Schaffer | Pengembang Konten 2
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: