Looker PSC Southbound HTTPS اینترنت NEG SMTP

۱. مقدمه

در این آزمایشگاه کد، شما با استفاده از یک متعادل‌کننده بار پروکسی TCP داخلی و گروه نقطه پایانی شبکه اینترنت (NEG) با FQDN notifications-pa.googleapis.com که از Looker PSC به عنوان یک مصرف‌کننده سرویس فراخوانی می‌شود، یک اتصال به سمت جنوب به سرویس Lookers SMTP ایجاد خواهید کرد.

سرویس خصوصی اتصال (Private Service Connect) قابلیتی از شبکه گوگل کلود (Google Cloud) است که به مصرف‌کنندگان اجازه می‌دهد تا به صورت خصوصی از داخل شبکه VPC خود به سرویس‌های مدیریت‌شده دسترسی داشته باشند. به طور مشابه، به تولیدکنندگان سرویس مدیریت‌شده نیز اجازه می‌دهد تا این سرویس‌ها را در شبکه‌های VPC جداگانه خود میزبانی کنند و یک اتصال خصوصی به مصرف‌کنندگان خود ارائه دهند. به عنوان مثال، وقتی از سرویس خصوصی اتصال برای دسترسی به Looker استفاده می‌کنید، شما مصرف‌کننده سرویس هستید و گوگل، همانطور که در شکل 1 برجسته شده است، تولیدکننده سرویس است.

شکل ۱.

۱۴۵ea4672c3a3b14.png

دسترسی به سمت جنوب، که با نام PSC معکوس نیز شناخته می‌شود، به مصرف‌کننده این امکان را می‌دهد که به عنوان تولیدکننده، یک سرویس منتشر شده ایجاد کند تا به Looker اجازه دسترسی به نقاط انتهایی در محل، در یک VPC، به سرویس‌های مدیریت شده و اینترنت را بدهد. اتصالات به سمت جنوب می‌توانند در هر منطقه‌ای، صرف نظر از محل استقرار Looker PSC، مستقر شوند، همانطور که در شکل 2 برجسته شده است.

شکل ۲.

259493afd914f68b.png

آنچه یاد خواهید گرفت

  • الزامات شبکه
  • ایجاد یک سرویس تولیدکننده Private Service Connect
  • ایجاد یک نقطه پایانی اتصال سرویس خصوصی در Looker
  • ایجاد اتصال به سرویس SMTP Lookers

آنچه نیاز دارید

def88091b42bfe4d.png

۲. آنچه خواهید ساخت

شما یک شبکه تولیدکننده، looker-psc-demo، برای استقرار متعادل‌کننده بار پروکسی TCP داخلی و NEG اینترنتی منتشر شده به عنوان یک سرویس از طریق Private Service Connect (PSC) ایجاد خواهید کرد. پس از انتشار، اقدامات زیر را برای اعتبارسنجی دسترسی به سرویس تولیدکننده انجام خواهید داد:

  • یک نقطه پایانی PSC در Looker مرتبط با پیوست سرویس تولیدکننده ایجاد کنید
  • برای ایجاد تنظیمات ایمیل SMTP از کنسول Looker استفاده کنید

۳. الزامات شبکه

در زیر جزئیات الزامات شبکه برای شبکه تولیدکننده آمده است، مصرف‌کننده در این آزمایشگاه کد، نمونه Looker PSC است.

قطعات

توضیحات

VPC (مشاهده‌گر-psc-دمو)

حالت سفارشی VPC

زیرشبکه PSC NAT

بسته‌های شبکه VPC مصرف‌کننده با استفاده از NAT مبدا (SNAT) ترجمه می‌شوند، به طوری که آدرس‌های IP مبدا اصلی آنها به آدرس‌های IP مبدا از زیرشبکه NAT در شبکه VPC تولیدکننده تبدیل می‌شوند.

زیرشبکه قانون ارسال PSC

برای اختصاص آدرس IP به متعادل‌کننده بار پروکسی TCP داخلی منطقه‌ای استفاده می‌شود.

زیرشبکه PSC NEG

برای اختصاص آدرس IP به گروه نقاط پایانی شبکه استفاده می‌شود.

زیرشبکه فقط پروکسی

به هر یک از پروکسی‌های متعادل‌کننده بار، یک آدرس IP داخلی اختصاص داده می‌شود. بسته‌هایی که از یک پروکسی به یک ماشین مجازی backend یا نقطه پایانی ارسال می‌شوند، دارای یک آدرس IP منبع از زیرشبکه فقط پروکسی هستند.

اینترنت منفی

منبعی که برای تعریف یک backend خارجی برای load balancer استفاده می‌شود. نقطه پایانی نمی‌تواند فقط از طریق Cloud VPN یا Cloud Interconnect قابل دسترسی باشد.

خدمات بک‌اند

یک سرویس backend به عنوان پلی بین متعادل کننده بار و منابع backend شما عمل می‌کند. در این آموزش، سرویس backend با NEG اینترنت مرتبط است.

روتر ابری

Cloud NAT برای قابلیت‌های صفحه کنترل به روترهای ابری متکی است، اما برای مدیریت جلسه BGP به آن متکی نیست.

NAT ابری

اینترنت منطقه‌ای NEG از Cloud NAT برای خروجی اینترنت استفاده می‌کند.

۴. توپولوژی Codelab

a4eb7693cbdbdfd4.png

۵. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۶. قبل از شروع

فعال کردن APIها

در داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است:

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
echo $project
echo $region

فعال کردن تمام سرویس‌های لازم:

gcloud services enable compute.googleapis.com

۷. ایجاد شبکه VPC تولیدکننده

شبکه VPC

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute networks create looker-psc-demo --subnet-mode custom

ایجاد زیرشبکه‌ها

زیرشبکه PSC به منظور ترجمه آدرس شبکه با پیوست سرویس PSC مرتبط خواهد شد.

درون Cloud Shell، زیرشبکه PSC NAT را ایجاد کنید:

gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

درون Cloud Shell، زیرشبکه‌ی قانون ارسال تولیدکننده را ایجاد کنید:

gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

درون Cloud Shell، زیرشبکه فقط پروکسی منطقه‌ای تولیدکننده را ایجاد کنید:

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=looker-psc-demo \
  --range=10.10.10.0/24

ایجاد دروازه عمومی NAT

دروازه NAT توسط متعادل‌کننده بار پروکسی tcp داخلی منطقه‌ای برای خروجی اینترنت با گزینه پیکربندی –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB استفاده می‌شود، بنابراین همان NATGW از خروجی اینترنت GCE/GKE پشتیبانی نمی‌کند. یک NAT GW اضافی با –endpoint-types=ENDPOINT_TYPE_VM برای خروجی اینترنت GCE/GKE مستقر کنید.

درون Cloud Shell، روتر ابری را ایجاد کنید:

gcloud compute routers create looker-psc-demo-cloud-router --network looker-psc-demo --region $region

درون Cloud Shell، دروازه Cloud NAT را ایجاد کنید که امکان خروج اینترنت را برای متعادل‌کننده بار پروکسی tcp فراهم می‌کند:

gcloud compute routers nats create looker-psc-demo-natgw \
  --router=looker-psc-demo-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

آدرس IP متعادل‌کننده بار را رزرو کنید

در داخل Cloud Shell، یک آدرس IP داخلی برای متعادل‌کننده بار رزرو کنید:

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

در داخل Cloud Shell، آدرس IP رزرو شده را مشاهده کنید.

gcloud compute addresses describe internet-neg-lb-ip \
  --region=$region | grep -i address:

خروجی مثال:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

اینترنت NEG را تنظیم کنید

یک NEG اینترنتی ایجاد کنید و –network-endpoint-type را روی internet-fqdn-port (نام میزبان و پورتی که از طریق آن می‌توان به backend خارجی خود دسترسی پیدا کرد) تنظیم کنید.

درون Cloud Shell، یک Internet NEG ایجاد کنید که برای github.com استفاده می‌شود.

gcloud compute network-endpoint-groups create smtp-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

درون Cloud Shell، Internet NEG smtp-internet-neg را با FQDN notifications-pa.googleapis.com و پورت ۴۴۳ به‌روزرسانی کنید.

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=notifications-pa.googleapis.com,port=443" \
    --region=$region

ایجاد سیاست و قوانین فایروال شبکه

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

قانون فایروال زیر اجازه می‌دهد ترافیک از محدوده PSC NAT Subnet به تمام نمونه‌های شبکه ارسال شود.

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

۸. ایجاد سرویس تولیدکننده

ایجاد اجزای متعادل‌کننده بار

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute backend-services create producer-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=smtp-internet-neg --network-endpoint-group-region=$region --region=$region

در Cloud Shell، یک پروکسی TCP هدف ایجاد کنید تا درخواست‌ها را به سرویس backend خود هدایت کنید:

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

در سینتکس زیر، یک قانون ارسال (متعادل‌کننده بار پروکسی داخلی tcp) ایجاد کنید.

در Cloud Shell، موارد زیر را انجام دهید:

gcloud compute forwarding-rules create producer-smtp-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

ایجاد پیوست سرویس

درون Cloud Shell، پیوست سرویس، smtp-svc-attachment را ایجاد کنید:

gcloud compute service-attachments create smtp-svc-attachment --region=$region --producer-forwarding-rule=producer-smtp-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

در مرحله بعد، پیوست سرویس ذکر شده در selfLink URI را که با پروژه‌های پیکربندی نقطه پایانی PSC در Looker شروع می‌شود، دریافت و یادداشت کنید.

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-https

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute service-attachments describe smtp-svc-attachment --region=$region

مثال:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-10-04T14:56:50.409-07:00'
description: ''
enableProxyProtocol: false
fingerprint: KUPXTZjrGkw=
id: '8947818105173563981'
kind: compute#serviceAttachment
name: smtp-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '23100082169578472'
  low: '8947818105173563981'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-smtp-fr

در کنسول ابری، به مسیر زیر بروید:

سرویس‌های شبکه → اتصال سرویس خصوصی → سرویس‌های منتشر شده

b847b5ee22e3582e.png

b9a7d46c8dea4476.png

۹. ایجاد یک اتصال نقطه پایانی PSC در Looker

در بخش بعدی، شما از طریق استفاده از پرچم‌های –psc-service-attachment در Cloud Shell برای یک دامنه واحد، پیوست سرویس تولیدکنندگان را با Looker Core PSC مرتبط خواهید کرد.

درون Cloud Shell، با به‌روزرسانی پارامترهای زیر برای مطابقت با محیط خود، ارتباط psc را ایجاد کنید:

  • INSTANCE_NAME: نام نمونه Looker (هسته Google Cloud) شما.
  • دامنه_۱: notifications-pa.googleapis.com
  • SERVICE_ATTACHMENT_1: آدرس اینترنتی (URI) هنگام توصیف پیوست سرویس، smtp-svc-attachment، ثبت شده است.
  • منطقه: منطقه‌ای که نمونه Looker (هسته گوگل کلود) شما در آن میزبانی می‌شود.

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

مثال:

gcloud looker instances update looker-psc-instance \
--psc-service-attachment  domain=notifications-pa.googleapis.com,attachment=projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment \
--region=$region

درون Cloud Shell، اعتبارسنجی کنید که وضعیت اتصال پیوست‌های سرویس «پذیرفته‌شده» باشد و با استفاده از INSTANCE_NAME PSC Looker خود به‌روزرسانی کنید.

gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json

مثال:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

مثال:

{
...........................
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "notifications-pa.googleapis.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-10-04T22:02:31.445761128Z"
}

اعتبارسنجی نقطه پایانی PSC در Cloud Console

از طریق کنسول ابری می‌توانید اتصال PSC را تأیید کنید

در کنسول ابری، به مسیر زیر بروید:

مشاهده‌گر → نمونه مشاهده‌گر → جزئیات

2d4684d722d31e4b.png

a7593db722f86642.png

۱۰. تست اتصال SMTP

در مراحل زیر، از Looker Console برای اعتبارسنجی اتصال SMTP با تولید یک SMTP Test & report استفاده خواهید کرد.

ایمیل آزمایشی

Looker ایمیل را با استفاده از سرور SMTP پیش‌فرض notifications-pa.googleapis.com ارسال می‌کند. در این مورد هیچ مرحله اضافی لازم نیست. اگر مایل به استفاده از سرور SMTP دیگری برای اعلان‌ها هستید، لطفاً به بخش پیکربندی SMTP سفارشی مراجعه کنید.

کنسول Looker را باز کنید و به مسیر زیر بروید:

مدیریت → پلتفرم → SMTP → ارسال ایمیل آزمایشی را انتخاب کنید

aacb31e399cec9b7.png

در زیر ایمیل آزمایشی دریافت شده از Looker آمده است:

ff75669fb6993d58.png

ایمیل گزارش تولید شده

به مسیر زیر بروید:

کاوش → فعالیت سیستم → میزان استفاده از API → نوع پرس‌وجوی API → اجرا

788f6d6d08f5f055.png

خروجی مثال:

cebecdf5f2e968d1.png

برای ارسال نتایج به ایمیل خود، نماد چرخ دنده را انتخاب کنید

c6ddb0b234b58ed4.png

گزینه ارسال را انتخاب کنید تا پنجره جدیدی باز شود.

۱۵b45c5c1bc1b09b.png

آدرس ایمیل خود را وارد کنید و ارسال را انتخاب کنید

۸۶۹۷۰bb۹۴۲۴۷ed۶۲.png

در زیر ایمیل آزمایشی دریافت شده از Looker آمده است:

c925c8917f8078b3.png

۱۱. پیکربندی سفارشی SMTP

در این آموزش، از سرور SMTP Looker برای ارسال اعلان‌های ایمیل از طریق FQDN notifications-pa.googleapis.com و Cloud NAT که خروجی اینترنت را انجام می‌دهد، استفاده می‌شود. برای استفاده از سرور SMTP خودتان، یک پیوست سرویس جدید با تغییرات زیر ایجاد کنید:

NEG اینترنت را با FQDN سرور SMTP خود به‌روزرسانی کنید:

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=<your SMTP FQDN>,port=443" \
    --region=$region

هنگام به‌روزرسانی Looker PSC Instance، دامنه SMTP خود را مشخص کنید:

  • INSTANCE_NAME: نام نمونه Looker (هسته Google Cloud) شما.
  • DOMAIN_1: <نام دامنه‌ی سرور SMTP شما>
  • SERVICE_ATTACHMENT_1: آدرس اینترنتی (URI) هنگام توصیف پیوست سرویس، smtp-svc-attachment، ثبت شده است.
  • منطقه: منطقه‌ای که نمونه Looker (هسته گوگل کلود) شما در آن میزبانی می‌شود.
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

برای استفاده از یک سرویس ایمیل متفاوت، گزینه «استفاده از تنظیمات ایمیل سفارشی» را انتخاب کنید.

a3fe7a0b66c80402.png

۱۲. تمیز کردن

از یک ترمینال Cloud Shell، اجزای آزمایشگاه را حذف کنید

gcloud compute service-attachments delete smtp-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-smtp-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete producer-backend-svc --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q

gcloud compute routers delete looker-psc-demo-cloud-router --region=$region -q

gcloud compute network-endpoint-groups delete smtp-internet-neg --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q

gcloud compute networks delete looker-psc-demo -q

۱۳. تبریک

تبریک می‌گوییم، شما با موفقیت اتصال به سرویس SMTP Lookers را با استفاده از کنسول Looker که توسط Private Service Connect پشتیبانی می‌شود، پیکربندی و تأیید کردید.

شما زیرساخت تولیدکننده را ایجاد کردید، یاد گرفتید که چگونه یک Internet NEG، سرویس تولیدکننده و نقطه پایانی Looker PSC ایجاد کنید که امکان اتصال به سرویس تولیدکننده را فراهم می‌کند.

کازموپاپ فکر می‌کند که کدلب‌ها فوق‌العاده هستند!!

c911c127bffdee57.jpeg

بعدش چی؟

به برخی از این آزمایشگاه‌های کد نگاهی بیندازید...

مطالعه بیشتر و ویدیوها

اسناد مرجع