Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

AWS PrivateLink

ميزة باقة Scale

AWS PrivateLink متوفرة في باقتَي Scale وEnterprise. للترقية، انتقل إلى صفحة الخطط في Cloud Console.

يمكنك استخدام AWS PrivateLink لإنشاء اتصال آمن بين شبكات VPC، وخدمات AWS، وأنظمتك المحلية، وClickHouse Cloud، من دون تعريض حركة المرور إلى الإنترنت العام. توضح هذه الوثيقة الخطوات اللازمة للاتصال بـ ClickHouse Cloud باستخدام AWS PrivateLink.

لحصر الوصول إلى خدمات ClickHouse Cloud الخاصة بك عبر عناوين AWS PrivateLink فقط، اتبع الإرشادات التي يوفرها ClickHouse Cloud بشأن قوائم الوصول حسب عنوان IP.

يدعم ClickHouse Cloud PrivateLink عبر المناطق للخدمات المستضافة في مناطق AWS التالية:

يغطي الجدول مناطق استضافة الخدمات فقط. وتستخدم مناطق نقاط نهاية VPC للواجهة الخاصة بالمستهلك قائمة سماح منفصلة؛ فعلى سبيل المثال، تُعد mx-central-1 منطقة مستهلك مسموحًا بها، رغم أن الخدمات المستضافة فيها لا يمكنها تفعيل الوصول عبر المناطق.

رمز المنطقة اسم المنطقة
af-south-1 أفريقيا (كيب تاون)
ap-east-1 آسيا والمحيط الهادئ (هونغ كونغ)
ap-northeast-1 آسيا والمحيط الهادئ (طوكيو)
ap-northeast-2 آسيا والمحيط الهادئ (سيول)
ap-south-1 آسيا والمحيط الهادئ (مومباي)
ap-southeast-1 آسيا والمحيط الهادئ (سنغافورة)
ap-southeast-2 آسيا والمحيط الهادئ (سيدني)
ap-southeast-3 آسيا والمحيط الهادئ (جاكرتا)
ap-southeast-5 آسيا والمحيط الهادئ (ماليزيا)
ca-central-1 كندا (الوسطى)
eu-central-1 أوروبا (فرانكفورت)
eu-north-1 أوروبا (ستوكهولم)
eu-west-1 أوروبا (أيرلندا)
eu-west-2 أوروبا (لندن)
il-central-1 إسرائيل (تل أبيب)
me-central-1 الشرق الأوسط (الإمارات العربية المتحدة)
sa-east-1 أمريكا الجنوبية (ساو باولو)
us-east-1 شرق الولايات المتحدة (N. Virginia)
us-east-2 شرق الولايات المتحدة (أوهايو)
us-west-2 غرب الولايات المتحدة (أوريغون)

يُرجى إكمال ما يلي لتمكين AWS PrivateLink:

  1. احصل على "Service name" الخاص بنقطة النهاية.
  2. أنشئ نقطة نهاية AWS.
  3. أضف "Endpoint ID" إلى المؤسسة في ClickHouse Cloud.
  4. أضف "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse.

اعثر على أمثلة Terraform هنا.

اعتبارات مهمة

يحاول ClickHouse تجميع خدماتك لإعادة استخدام نقطة نهاية الخدمة المنشورة نفسها داخل منطقة AWS. ومع ذلك، لا يمكن ضمان هذا التجميع، خصوصًا إذا كانت خدماتك موزعة على عدة مؤسسات في ClickHouse. إذا كان PrivateLink مهيأً بالفعل لخدمات أخرى في مؤسسة ClickHouse الخاصة بك، فغالبًا يمكنك تخطي معظم الخطوات بفضل هذا التجميع والانتقال مباشرةً إلى الخطوة الأخيرة: إضافة "Endpoint ID" الخاص بـ ClickHouse إلى قائمة السماح لخدمة ClickHouse.

المتطلبات الأساسية لهذه العملية

قبل البدء، ستحتاج إلى ما يلي:

  1. حساب AWS الخاص بك.
  2. مفتاح واجهة برمجة تطبيقات ClickHouse مع الأذونات اللازمة لإنشاء نقاط النهاية الخاصة وإدارتها من جانب ClickHouse.

الخطوات

اتبع هذه الخطوات لتوصيل خدمات ClickHouse Cloud الخاصة بك عبر AWS PrivateLink.

الحصول على "Service name" الخاص بنقطة النهاية

الخيار 1: ClickHouse Cloud console

في ClickHouse Cloud console، افتح الخدمة التي تريد الاتصال بها عبر PrivateLink، ثم انتقل إلى قائمة Settings.

نقاط النهاية الخاصة

دوّن Service name واسم DNS، ثم انتقل إلى الخطوة التالية.

الخيار 2: واجهة برمجة تطبيقات

أولًا، عيّن متغيرات البيئة التالية قبل تشغيل أي أوامر:

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

احصل على INSTANCE_ID الخاص بـ ClickHouse من خلال التصفية حسب المنطقة وموفّر الخدمة واسم الخدمة:

INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)

احصل على endpointServiceId وprivateDnsHostname الخاصَّين بإعداد PrivateLink لديك:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .result

من المفترض أن يُرجع هذا الأمر شيئًا مثل:

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

دوّن endpointServiceId وprivateDnsHostname، ثم انتقل إلى الخطوة التالية.

إنشاء نقطة نهاية AWS

الخيار 1: AWS Console

افتح AWS Console وانتقل إلى VPCEndpointsCreate endpoints.

حدِّد Endpoint services that use NLBs and GWLBs، ثم استخدم Service nameconsole أو endpointServiceIdواجهة برمجة تطبيقات الذي حصلت عليه من خطوة Obtain Endpoint "Service name" في حقل Service Name. انقر على Verify service:

إعدادات نقطة نهاية AWS PrivateLink

إذا ظهرت لك رسالة الخطأ "Service name couldn't be verified."، فيُرجى التواصل مع دعم العملاء لطلب إضافة Regions جديدة إلى قائمة المناطق المدعومة.

بعد ذلك، حدِّد VPC والشبكات الفرعية الخاصة بك:

تحديد VPC والشبكات الفرعية

كخطوة اختيارية، عيِّن مجموعات الأمان/الوسوم:

بعد إنشاء VPC Endpoint، دوِّن قيمة Endpoint ID، إذ ستحتاج إليها في خطوة لاحقة.

معرّف VPC Endpoint

الخيار 2: AWS CloudFormation

بعد ذلك، عليك إنشاء VPC Endpoint باستخدام Service nameConsole أو endpointServiceIdواجهة برمجة تطبيقات اللذين حصلت عليهما من خطوة الحصول على Endpoint و"Service name" . تأكد من استخدام معرّفات الشبكات الفرعية الصحيحة، ومجموعات الأمان، ومعرّف VPC الصحيح.

Resources:
  ClickHouseInterfaceEndpoint:
    Type: 'AWS::EC2::VPCEndpoint'
    Properties:
      VpcEndpointType: Interface
      PrivateDnsEnabled: false
      ServiceName: <Service name(endpointServiceId), pls see above>
      VpcId: vpc-vpc_id
      SubnetIds:
        - subnet-subnet_id1
        - subnet-subnet_id2
        - subnet-subnet_id3
      SecurityGroupIds:
        - sg-security_group_id1
        - sg-security_group_id2
        - sg-security_group_id3

بعد إنشاء VPC Endpoint، دوّن قيمة Endpoint ID، إذ ستحتاج إليها في خطوة لاحقة.

الخيار 3: Terraform

service_name أدناه هو Service nameConsole أو endpointServiceIdواجهة برمجة تطبيقات اللذان حصلت عليهما من خطوة الحصول على "Service name" لنقطة النهاية

resource "aws_vpc_endpoint" "this" {
  vpc_id            = var.vpc_id
  service_name      = "<pls see comment above>"
  vpc_endpoint_type = "Interface"
  security_group_ids = [
    Var.security_group_id1,var.security_group_id2, var.security_group_id3,
  ]
  subnet_ids          = [var.subnet_id1,var.subnet_id2,var.subnet_id3]
  private_dns_enabled = false
  service_region      = "(Optional) If specified, the VPC endpoint will connect to the service in the provided region. Define it for multi-regional PrivateLink connections."
}

بعد إنشاء VPC Endpoint، دوِّن قيمة Endpoint ID؛ فستحتاج إليها في خطوة لاحقة.

عيّن اسم DNS الخاص لنقطة النهاية

يجب توجيه "اسم DNS"، المأخوذ من خطوة الحصول على "Service name" لنقطة النهاية ، إلى واجهات الشبكة الخاصة بـ AWS Endpoint. وهذا يضمن أن الخدمات/المكوّنات داخل شبكة VPC/الشبكة لديك يمكنها حلّه بشكل صحيح.

أضف "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse

الخيار 1: ClickHouse Cloud console

للإضافة، يُرجى الانتقال إلى ClickHouse Cloud console، ثم فتح الخدمة التي تريد الاتصال بها عبر PrivateLink، وبعد ذلك الانتقال إلى الإعدادات. انقر على إعداد نقطة نهاية خاصة لفتح إعدادات نقاط النهاية الخاصة. أدخل Endpoint ID الذي حصلت عليه من خطوة إنشاء AWS Endpoint. انقر على "إنشاء نقطة نهاية".

مرشّح نقاط النهاية الخاصة

للإزالة، يُرجى الانتقال إلى ClickHouse Cloud console، ثم العثور على الخدمة، وبعد ذلك الانتقال إلى الإعدادات الخاصة بها، ثم العثور على نقطة النهاية التي تريد إزالتها. أزلها من قائمة نقاط النهاية.

الخيار 2: واجهة برمجة تطبيقات

تحتاج إلى إضافة Endpoint ID إلى قائمة السماح لكل مثيل يجب أن يكون متاحًا عبر PrivateLink.

عيّن متغير البيئة ENDPOINT_ID باستخدام البيانات الواردة في خطوة Create AWS Endpoint.

عيّن متغيرات البيئة التالية قبل تشغيل أي أوامر:

REGION=<Your region code using the AWS format, for example: us-west-2>
PROVIDER=aws
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

لإضافة Endpoint ID إلى قائمة السماح:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "add": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X PATCH -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" \
-d @pl_config.json | jq

لإزالة Endpoint ID من قائمة السماح:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "remove": [
      "${ENDPOINT_ID:?}"
    ]
  }
}
EOF

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X PATCH -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" \
-d @pl_config.json | jq

لكل خدمة مُفعَّل لها Private Link نقطة نهاية عامة وأخرى خاصة. وللاتصال باستخدام Private Link، يجب استخدام نقطة نهاية خاصة، وهي privateDnsHostnameواجهة برمجة تطبيقات أو DNS Nameوحدة التحكم، كما هو موضح في الحصول على «اسم الخدمة» لنقطة النهاية.

الحصول على اسم مضيف DNS خاص

الخيار 1: ClickHouse Cloud console

في ClickHouse Cloud console، انتقل إلى الإعدادات. انقر على زر إعداد نقطة نهاية خاصة. في اللوحة الجانبية المنبثقة، انسخ اسم DNS.

اسم DNS لنقطة النهاية الخاصة
الخيار 2: واجهة برمجة تطبيقات

اضبط متغيرات البيئة التالية قبل تشغيل أي أوامر:

KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
INSTANCE_ID=<Your ClickHouse service name>

يمكنك الحصول على INSTANCE_ID من الخطوة.

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | \
jq .result

من المفترض أن تكون النتيجة شيئًا مثل:

{
  "endpointServiceId": "com.amazonaws.vpce.us-west-2.vpce-svc-xxxxxxxxxxxxxxxxx",
  "privateDnsHostname": "xxxxxxxxxx.us-west-2.vpce.aws.clickhouse.cloud"
}

في هذا المثال، سيُوجَّه الاتصال عبر اسم المضيف الوارد في قيمة privateDnsHostname إلى PrivateLink، لكن الاتصال عبر اسم المضيف endpointServiceId سيُوجَّه عبر الإنترنت.

استكشاف الأخطاء وإصلاحها

عدة اتصالات PrivateLink في منطقة واحدة

في معظم الحالات، لا تحتاج إلا إلى إنشاء خدمة نقطة نهاية واحدة لكل VPC. ويمكن لنقطة النهاية هذه توجيه الطلبات من VPC إلى عدة خدمات ClickHouse Cloud. يُرجى الرجوع هنا

انتهت مهلة الاتصال بنقطة النهاية الخاصة
  • يُرجى إرفاق مجموعة الأمان بنقطة نهاية VPC.
  • يُرجى التحقق من قواعد inbound في مجموعة الأمان المرفقة بنقطة النهاية، والسماح بمنافذ ClickHouse.
  • يُرجى التحقق من قواعد outbound في مجموعة الأمان المرفقة بالجهاز الظاهري المستخدم لاختبار الاتصال، والسماح بالاتصالات بمنافذ ClickHouse.
اسم المضيف الخاص: تعذر العثور على عنوان المضيف
  • يُرجى التحقق من تهيئة DNS لديك
أعاد النظير تعيين الاتصال
  • على الأرجح لم تتم إضافة Endpoint ID إلى قائمة السماح الخاصة بالخدمة، يُرجى الانتقال إلى الخطوة
التحقق من عوامل تصفية نقطة النهاية

عيّن متغيرات البيئة التالية قبل تشغيل أي أوامر:

KEY_ID=<Key ID>
KEY_SECRET=<Key secret>
ORG_ID=<please set ClickHouse organization ID>
INSTANCE_ID=<Instance ID>

يمكنك استرداد INSTANCE_ID من الخطوة.

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
-X GET -H "Content-Type: application/json" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | \
jq .result.privateEndpointIds
الاتصال بقاعدة بيانات بعيدة

وفقًا لـ وثائق AWS PrivateLink:

استخدم AWS PrivateLink عندما يكون لديك إعداد عميل/خادم وتريد منح VPC مستهلك واحد أو أكثر وصولًا أحادي الاتجاه إلى خدمة محددة أو إلى مجموعة من المثيلات داخل VPC الخاص بمزوّد الخدمة. ولا يمكن إلا للعملاء الموجودين في VPC المستهلك بدء اتصال بالخدمة الموجودة في VPC الخاص بمزوّد الخدمة.

لتوصيل دوال الجداول MySQL أو PostgreSQL في ClickHouse Cloud بقاعدة بيانات مستضافة في AWS VPC لديك، اضبط مجموعات الأمان في AWS للسماح باتصالات من ClickHouse Cloud. راجع عناوين IP الصادرة الافتراضية لمناطق ClickHouse Cloud، إلى جانب عناوين IP الثابتة المتاحة.

Navigation