اختصاص یک FQDN (نام دامنه کاملاً واجد شرایط) به یک نمونه EC2 با استفاده از مسیر 53

در این راهنما، نحوه اختصاص یک نام دامنه کاملاً واجد شرایط (FQDN) را به یک نمونه EC2 در حال اجرا یک وب سرور با استفاده از مسیر AWS 53 بررسی خواهیم کرد. این فرآیند شامل استقرار الگوهای CloudFormation، پیکربندی مسیر 53 و اطمینان از حل شدن FQDN به IP عمومی نمونه EC2.
نمای کلی
هدف ما اختصاص یک نام دامنه به یک وب سرور میزبانی شده در یک نمونه EC2 است. به جای دسترسی به سرور با استفاده از یک IP عمومی، از یک FQDN دوستانه (مثلاً www.cmcloudlab1589.info) استفاده خواهیم کرد.
مزایای کلیدی
-
دسترسی کاربر پسند
• FQDN دسترسی کاربران به وب سرور را به جای به خاطر سپردن آدرس IP آسان می کند. -
مقیاس پذیری
• راهاندازی به راحتی میتواند دامنهها و خدمات اضافی را در همان منطقه میزبانی شده جای دهد. -
اتوماسیون AWS
• استفاده از CloudFormation تکرارپذیری را تضمین می کند و استقرار را ساده می کند.
اهداف کلیدی:
- یک نمونه EC2 را در حال اجرای یک برنامه وب اجرا کنید.
- یک Route 53 RecordSet در منطقه میزبان عمومی موجود ایجاد کنید.
- اطمینان حاصل کنید که FQDN به IP عمومی نمونه EC2 حل می شود.
معماری
معماری شامل:
- یک نمونه EC2 که یک وب سرور را اجرا می کند.
- یک منطقه میزبان عمومی Route 53 با نوع A RecordSet که به IP عمومی نمونه اشاره می کند.
نمودار:
راهنمای گام به گام
1. یک الگوی CloudFormation برای نمونه EC2 ایجاد کنید
فایل ec2.yaml زیر یک نمونه EC2 را تنظیم می کند، از جمله:
• یک وب سرور با httpd نصب و پیکربندی شده است.
• گروه های امنیتی برای اجازه ترافیک HTTP (پورت 80) و SSH (پورت 22).
• یک نقش IAM با دسترسی S3 برای بازیابی فایل index.html برای وب سرور.
AWSTemplateFormatVersion: 2010-09-09
#Description: [CET-004] EC2 with user data from CloudFormation.
Parameters:
InstanceType:
Description: WebServer EC2 instance type.
Type: String
Default: t2.micro
AllowedValues:
- t1.micro
- t2.nano
- t2.micro
- t2.small
- t2.medium
- t2.large
- m1.small
- m1.medium
- m1.large
- m1.xlarge
- m2.xlarge
- m2.2xlarge
- m2.4xlarge
- m3.medium
- m3.large
- m3.xlarge
- m3.2xlarge
- m4.large
- m4.xlarge
- m4.2xlarge
- m4.4xlarge
- m4.10xlarge
- c1.medium
- c1.xlarge
- c3.large
- c3.xlarge
- c3.2xlarge
- c3.4xlarge
- c3.8xlarge
- c4.large
- c4.xlarge
- c4.2xlarge
- c4.4xlarge
- c4.8xlarge
- g2.2xlarge
- g2.8xlarge
- r3.large
- r3.xlarge
- r3.2xlarge
- r3.4xlarge
- r3.8xlarge
- i2.xlarge
- i2.2xlarge
- i2.4xlarge
- i2.8xlarge
- d2.xlarge
- d2.2xlarge
- d2.4xlarge
- d2.8xlarge
- hi1.4xlarge
- hs1.8xlarge
- cr1.8xlarge
- cc2.8xlarge
- cg1.4xlarge
Ec2Name:
Description: Ec2 Resource name.
Type: String
BucketName:
Description: BucketName.
Default: ahmedsalem-testbuckettt
Type: String
ObjectPrefix:
Description: idex.html prefix,for ex /
Type: String
Default: /
# KeyName:
# Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
# Type: 'AWS::EC2::KeyPair::KeyName'
# ConstraintDescription: must be the name of an existing EC2 KeyPair.
# SubnetId:
# Description: Subnet ID which will run the web server instanc into.
# Type: 'AWS::EC2::Subnet::Id'
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<:ec2::image::id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
SSHLocation:
Description: The IP address range that can be used to SSH to the EC2 instance.
Type: String
MinLength: '9'
MaxLength: '18'
Default: 0.0.0.0/0
AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
ConstraintDescription: Must be a valid IP CIDR range of the form x.x.x.x/x
Resources:
WebServerInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
Tags:
- Key: "Name"
Value: !Ref Ec2Name
- Key: "value"
Value: "to be deleted"
# KeyName: !Ref KeyName
# NetworkInterfaces:
# - AssociatePublicIpAddress: "true"
# DeviceIndex: "0"
# SubnetId: !Ref SubnetId
ImageId: !Ref LatestAmiId
SecurityGroupIds:
- !GetAtt "WebServerSecurityGroup.GroupId"
IamInstanceProfile: !Ref IAMInstanceProfile
UserData:
Fn::Base64:
!Sub |
#!/bin/bash -xe
yum update -y aws-cfn-bootstrap
yum install -y httpd
systemctl start httpd
systemctl enable httpd
aws s3 cp s3://${BucketName}${ObjectPrefix}index.html /var/www/html/
WebServerSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupDescription: Enable HTTP access via port 80 and SSH Access port 22.
VpcId: vpc-0078f41e6b5568b6e
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '80'
ToPort: '80'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '22'
ToPort: '22'
CidrIp: !Ref SSHLocation
IAMInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Roles:
- !Ref IAMRole
InstanceProfileName: ec2-access-s3
IAMRole:
Type: AWS::IAM::Role
Properties:
RoleName: ec2-s3-access
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: ec2.amazonaws.com
Action: sts:AssumeRole
Path: "https://dev.to/"
Policies:
- PolicyName: 'EC2Access'
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Action:
- 's3:GetObject'
Resource: !Sub 'arn:aws:s3:::${BucketName}/index.html'
Outputs:
WebsiteURL:
Description: URL for newly apache webserver created.
Value: !Join
- ''
- - 'http://'
- !GetAtt
- WebServerInstance
- PublicDnsName
PublicIp:
Description: The publicIP of the webserver
Value: !GetAtt WebServerInstance.PublicIp
Export:
Name: !Sub "${AWS::StackName}-PublicIp"
2. الگوی Route 53 CloudFormation را ایجاد کنید
فایل r53.yaml زیر یک Route 53 RecordSet ایجاد می کند تا FQDN را با IP عمومی نمونه EC2 مرتبط کند:
Parameters:
WebserverStackParameter:
Type: String
Default: Webserver
HostedZoneId:
#Type: AWS::Route53::HostedZone::Id
Type: String
Description: HostedZone ID
ConstraintDescription: must be a valid HostedZone ID
Default: Z0775680V6B0O09IGAKU
WebserverFQDN:
Type: String
# ConstraintDescription: must be a valid HostedZone ID
Resources:
PublicDNSRecord:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneId: !Ref HostedZoneId
Name: !Sub "${WebserverFQDN}.cmcloudlab1832.info"
Type: A
TTL: 900
ResourceRecords:
-
Fn::ImportValue:
!Sub "${WebserverStackParameter}-PublicIp"
Outputs:
Hostname:
Description: The Hostname attached to our Webserver
Value: !Ref PublicDNSRecord
3. زیرساخت را مستقر کنید
-
EC2 Stack را راه اندازی کنید
• الگوی ec2.yaml CloudFormation را برای راه اندازی نمونه EC2 مستقر کنید.
• به مقدار PublicIp صادر شده برای استفاده در پشته Route 53 توجه کنید. -
Route 53 Stack را اجرا کنید
• الگوی r53.yaml CloudFormation را برای ایجاد RecordSet در منطقه میزبان Route 53 مستقر کنید.
4. تنظیمات را تست کنید
پس از استقرار هر دو پشته، می توانید با استفاده از FQDN اختصاص داده شده در Route 53 به وب سرور خود دسترسی پیدا کنید.
مثال FQDN:
www.cmcloudlab1589.info
نتیجه گیری
تخصیص یک نام دامنه کاملاً واجد شرایط (FQDN) به یک نمونه EC2 با استفاده از Route 53 یک راه حل ساده و در عین حال قدرتمند برای افزایش دسترسی و مقیاس پذیری برنامه های شما است. با استفاده از AWS CloudFormation، ما فرآیند استقرار را خودکار کردیم و آن را کارآمد، تکرارپذیر و مدیریت آسان کردیم.