برنامه نویسی

ایجاد و پیوند VPC Endpoint از نوع رابط با استفاده از Terraform و کنسول مدیریت AWS

Summarize this content to 400 words in Persian Lang
در پست های قبلی خود، تنظیم VPC و عملکرد Lambda با Terraform و راه اندازی VPC برای برنامه شما با استفاده از کنسول مدیریت AWS، در مورد راه اندازی VPC با Lambda و نحوه تعامل عملکرد Lambda من با DynamoDB و اینترنت خارجی صحبت کردم.

برای اتصال به DynamoDB، از یک نقطه پایانی VPC از نوع Gateway استفاده کردیم که مدیریت آن آسان‌تر است و اگر انتقال داده در VPC باشد، هزینه‌های اضافی را به همراه نخواهد داشت.

با این حال، نقاط پایانی Gateway فقط از منابع S3 و DynamoDB پشتیبانی می کنند. همه منابع دیگر (از جمله DynamoDB و S3) به یک نقطه پایانی رابط نیاز دارند.

نقطه پایانی VPC نوع رابط به یک گروه امنیتی و برخی تغییرات در کد تابع Lambda شما، به ویژه پیکربندی DynamoDB، برخلاف Endpoint از نوع Gateway که به آنها نیاز ندارد، نیاز دارد.

این بدان معناست که Interface Endpoints می‌تواند محدودیت‌های جزئی‌تری ارائه دهد.

در این پست، نحوه ایجاد و پیوند یک نقطه پایانی VPC از نوع Interface را با استفاده از کنسول مدیریت AWS و Terraform توضیح خواهم داد.

مراحل ایجاد یک نقطه پایانی VPC از نوع رابط

ایجاد گروه های امنیتی برای Lambda و DynamoDB:

برای گروه امنیتی DynamoDB، یک قانون ورودی را مشخص کنید که درخواست‌های دریافتی از گروه امنیتی لامبدا را می‌پذیرد.
برای گروه امنیتی Lambda، یک قانون خروجی را مشخص کنید که اجازه ارسال درخواست به DynamoDB را می دهد.

نقطه پایانی VPC را ایجاد کنید:

سرویس نوع رابط را انتخاب کنید، شناسه زیرشبکه خصوصی را انتخاب کنید و گروه امنیتی DynamoDB خود را به آن پیوند دهید.
پس از ایجاد نقطه پایانی VPC، نام DNS را از توضیحات بازیابی کنید و از آن در کد Lambda خود برای اتصال به DynamoDB استفاده کنید.

ایجاد یک نقطه پایانی VPC از نوع رابط با استفاده از Terraform

resource “aws_vpc” “main” {
cidr_block = “”
}

# Create private subnets
resource “aws_subnet” “private” {
count = NUMBER OF PRIVATE SUBNETS>
vpc_id = aws_vpc.main.id
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index * 2 + 1)
availability_zone = element(data.aws_availability_zones.available.names, count.index)
map_public_ip_on_launch = false
}

resource “aws_security_group” “dynamodb_vpc_endpoint_sg” {
name = “dynamo-sg”
description = “Security group for Lambda”
vpc_id = aws_vpc.main.id

ingress {
from_port = 0
to_port = 0
protocol = “-1”
security_groups = [aws_security_group.lambda.id] }
}

resource “aws_security_group” “lambda” {
name = “lambda-sg”
description = “Security group for Lambda”
vpc_id = aws_vpc.main.id

egress {
from_port = 443
to_port = 443
protocol = “TCP”
cidr_blocks = [aws_vpc.main.cidr_block] }
}

resource “aws_vpc_endpoint” “dynamodb” {
vpc_id = aws_vpc.main.id
service_name = “com.amazonaws.${var.region}.dynamodb”
vpc_endpoint_type = “Interface”
subnet_ids = aws_subnet.private[*].id
security_group_ids = [aws_security_group.dynamodb_vpc_endpoint_sg.id] }

# Use the endpoint as an environment variable in your Lambda function
output “dynamodb_vpc_endpoint_dns” {
value = aws_vpc_endpoint.dynamodb.dns_entry[0].dns_name
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

const { DynamoDBClient } = require(“@aws-sdk/client-dynamodb”);
const client = new DynamoDBClient({
endpoint: `https://`,
});
const dynamoDbClient = DynamoDBDocumentClient.from(client);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد یک نقطه پایانی VPC از نوع رابط با استفاده از کنسول مدیریت AWS

گروه امنیتی DynamoDB را ایجاد کنید با قانون ورودی مناسب (در این مثال، من یک قانون خروجی برای گروه امنیتی لامبدا ایجاد کرده‌ام).
گروه امنیتی لامبدا را ایجاد کنید با قانون خروجی مناسب (در اینجا، VPC CIDR خود را به عنوان یک قانون خروجی اضافه کرده ام).
یک نقطه پایانی VPC از نوع Interface ایجاد کنید با VPC مورد نظر و زیرشبکه خصوصی، سپس DynamoDB Security Group خود را به آن پیوند دهید. پس از ایجاد، نام DNS را از توضیحات دریافت کنید و از آن در تابع Lambda خود برای اتصال به DynamoDB استفاده کنید.

می‌توانید از این نقطه پایانی مانند زیر در تابع Node.js Lambda خود استفاده کنید:

const { DynamoDBClient } = require(“@aws-sdk/client-dynamodb”);
const client = new DynamoDBClient({
endpoint: `https://`,
});
const dynamoDbClient = DynamoDBDocumentClient.from(client);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

در این پست، نحوه ایجاد و پیوند یک نقطه پایانی VPC از نوع رابط را با استفاده از کنسول مدیریت AWS و Terraform بررسی کردیم. با استفاده از نقاط پایانی رابط، می‌توانید ارتباط عملکرد Lambda خود را با DynamoDB و سایر سرویس‌های AWS ایمن کنید، در حالی که کنترل دقیقی بر ترافیک و امنیت دارید.

ما نقطه پایانی Interface را با نقطه پایانی Gateway مقایسه کردیم و به پیکربندی اضافی مورد نیاز مانند راه‌اندازی گروه‌های امنیتی و تغییر کد عملکرد Lambda اشاره کردیم. با این حال، این پیچیدگی اضافی امنیت و کنترل بیشتری را فراهم می کند و نقاط پایانی رابط را به ابزاری قدرتمند برای مدیریت ارتباطات داخلی در محیط AWS شما تبدیل می کند.

با کد Terraform ارائه شده و مراحل کنسول مدیریت AWS، اکنون باید بتوانید نقاط پایانی رابط را در معماری خود ادغام کنید و از دسترسی ایمن و کارآمد به DynamoDB از توابع Lambda خود اطمینان حاصل کنید.

در پست های قبلی خود، تنظیم VPC و عملکرد Lambda با Terraform و راه اندازی VPC برای برنامه شما با استفاده از کنسول مدیریت AWS، در مورد راه اندازی VPC با Lambda و نحوه تعامل عملکرد Lambda من با DynamoDB و اینترنت خارجی صحبت کردم.

برای اتصال به DynamoDB، از یک نقطه پایانی VPC از نوع Gateway استفاده کردیم که مدیریت آن آسان‌تر است و اگر انتقال داده در VPC باشد، هزینه‌های اضافی را به همراه نخواهد داشت.

با این حال، نقاط پایانی Gateway فقط از منابع S3 و DynamoDB پشتیبانی می کنند. همه منابع دیگر (از جمله DynamoDB و S3) به یک نقطه پایانی رابط نیاز دارند.

نقطه پایانی VPC نوع رابط به یک گروه امنیتی و برخی تغییرات در کد تابع Lambda شما، به ویژه پیکربندی DynamoDB، برخلاف Endpoint از نوع Gateway که به آنها نیاز ندارد، نیاز دارد.

این بدان معناست که Interface Endpoints می‌تواند محدودیت‌های جزئی‌تری ارائه دهد.

در این پست، نحوه ایجاد و پیوند یک نقطه پایانی VPC از نوع Interface را با استفاده از کنسول مدیریت AWS و Terraform توضیح خواهم داد.

مراحل ایجاد یک نقطه پایانی VPC از نوع رابط

  1. ایجاد گروه های امنیتی برای Lambda و DynamoDB:

    • برای گروه امنیتی DynamoDB، یک قانون ورودی را مشخص کنید که درخواست‌های دریافتی از گروه امنیتی لامبدا را می‌پذیرد.
    • برای گروه امنیتی Lambda، یک قانون خروجی را مشخص کنید که اجازه ارسال درخواست به DynamoDB را می دهد.
  2. نقطه پایانی VPC را ایجاد کنید:

    • سرویس نوع رابط را انتخاب کنید، شناسه زیرشبکه خصوصی را انتخاب کنید و گروه امنیتی DynamoDB خود را به آن پیوند دهید.
    • پس از ایجاد نقطه پایانی VPC، نام DNS را از توضیحات بازیابی کنید و از آن در کد Lambda خود برای اتصال به DynamoDB استفاده کنید.

ایجاد یک نقطه پایانی VPC از نوع رابط با استفاده از Terraform

resource "aws_vpc" "main" {
  cidr_block = ""
}

# Create private subnets
resource "aws_subnet" "private" {
  count                   = NUMBER OF PRIVATE SUBNETS>
  vpc_id                  = aws_vpc.main.id
  cidr_block              = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index * 2 + 1)
  availability_zone       = element(data.aws_availability_zones.available.names, count.index)
  map_public_ip_on_launch = false
}

resource "aws_security_group" "dynamodb_vpc_endpoint_sg" {
  name        = "dynamo-sg"
  description = "Security group for Lambda"
  vpc_id      = aws_vpc.main.id

  ingress {
    from_port       = 0
    to_port         = 0
    protocol        = "-1"
    security_groups = [aws_security_group.lambda.id]
  }
}

resource "aws_security_group" "lambda" {
  name        = "lambda-sg"
  description = "Security group for Lambda"
  vpc_id      = aws_vpc.main.id

  egress {
    from_port   = 443
    to_port     = 443
    protocol    = "TCP"
    cidr_blocks = [aws_vpc.main.cidr_block]
  }
}

resource "aws_vpc_endpoint" "dynamodb" {
  vpc_id             = aws_vpc.main.id
  service_name       = "com.amazonaws.${var.region}.dynamodb"
  vpc_endpoint_type  = "Interface"
  subnet_ids         = aws_subnet.private[*].id
  security_group_ids = [aws_security_group.dynamodb_vpc_endpoint_sg.id]
}

# Use the endpoint as an environment variable in your Lambda function
output "dynamodb_vpc_endpoint_dns" {
  value = aws_vpc_endpoint.dynamodb.dns_entry[0].dns_name
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const client = new DynamoDBClient({
    endpoint: `https://`,
});
const dynamoDbClient = DynamoDBDocumentClient.from(client);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد یک نقطه پایانی VPC از نوع رابط با استفاده از کنسول مدیریت AWS

  1. گروه امنیتی DynamoDB را ایجاد کنید با قانون ورودی مناسب (در این مثال، من یک قانون خروجی برای گروه امنیتی لامبدا ایجاد کرده‌ام).
    DynamoDB SG

  2. گروه امنیتی لامبدا را ایجاد کنید با قانون خروجی مناسب (در اینجا، VPC CIDR خود را به عنوان یک قانون خروجی اضافه کرده ام).
    لامبدا اس جی

  3. یک نقطه پایانی VPC از نوع Interface ایجاد کنید با VPC مورد نظر و زیرشبکه خصوصی، سپس DynamoDB Security Group خود را به آن پیوند دهید. پس از ایجاد، نام DNS را از توضیحات دریافت کنید و از آن در تابع Lambda خود برای اتصال به DynamoDB استفاده کنید.
    VPCE ایجاد کنید
    جزئیات VPCE
    VPCE ایجاد شد
    VPCE DNS

می‌توانید از این نقطه پایانی مانند زیر در تابع Node.js Lambda خود استفاده کنید:

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const client = new DynamoDBClient({
    endpoint: `https://`,
});
const dynamoDbClient = DynamoDBDocumentClient.from(client);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

در این پست، نحوه ایجاد و پیوند یک نقطه پایانی VPC از نوع رابط را با استفاده از کنسول مدیریت AWS و Terraform بررسی کردیم. با استفاده از نقاط پایانی رابط، می‌توانید ارتباط عملکرد Lambda خود را با DynamoDB و سایر سرویس‌های AWS ایمن کنید، در حالی که کنترل دقیقی بر ترافیک و امنیت دارید.

ما نقطه پایانی Interface را با نقطه پایانی Gateway مقایسه کردیم و به پیکربندی اضافی مورد نیاز مانند راه‌اندازی گروه‌های امنیتی و تغییر کد عملکرد Lambda اشاره کردیم. با این حال، این پیچیدگی اضافی امنیت و کنترل بیشتری را فراهم می کند و نقاط پایانی رابط را به ابزاری قدرتمند برای مدیریت ارتباطات داخلی در محیط AWS شما تبدیل می کند.

با کد Terraform ارائه شده و مراحل کنسول مدیریت AWS، اکنون باید بتوانید نقاط پایانی رابط را در معماری خود ادغام کنید و از دسترسی ایمن و کارآمد به DynamoDB از توابع Lambda خود اطمینان حاصل کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا