برنامه نویسی

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

در این راهنما، نحوه اختصاص یک نام دامنه کاملاً واجد شرایط (FQDN) را به یک نمونه EC2 در حال اجرا یک وب سرور با استفاده از مسیر AWS 53 بررسی خواهیم کرد. این فرآیند شامل استقرار الگوهای CloudFormation، پیکربندی مسیر 53 و اطمینان از حل شدن FQDN به IP عمومی نمونه EC2.

نمای کلی

هدف ما اختصاص یک نام دامنه به یک وب سرور میزبانی شده در یک نمونه EC2 است. به جای دسترسی به سرور با استفاده از یک IP عمومی، از یک FQDN دوستانه (مثلاً www.cmcloudlab1589.info) استفاده خواهیم کرد.

مزایای کلیدی

  1. دسترسی کاربر پسند
    • FQDN دسترسی کاربران به وب سرور را به جای به خاطر سپردن آدرس IP آسان می کند.

  2. مقیاس پذیری
    • راه‌اندازی به راحتی می‌تواند دامنه‌ها و خدمات اضافی را در همان منطقه میزبانی شده جای دهد.

  3. اتوماسیون AWS
    • استفاده از CloudFormation تکرارپذیری را تضمین می کند و استقرار را ساده می کند.

اهداف کلیدی:

  1. یک نمونه EC2 را در حال اجرای یک برنامه وب اجرا کنید.
  2. یک Route 53 RecordSet در منطقه میزبان عمومی موجود ایجاد کنید.
  3. اطمینان حاصل کنید که FQDN به IP عمومی نمونه EC2 حل می شود.

معماری
معماری شامل:

  1. یک نمونه EC2 که یک وب سرور را اجرا می کند.
  2. یک منطقه میزبان عمومی 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. زیرساخت را مستقر کنید

  1. EC2 Stack را راه اندازی کنید
    • الگوی ec2.yaml CloudFormation را برای راه اندازی نمونه EC2 مستقر کنید.
    • به مقدار PublicIp صادر شده برای استفاده در پشته Route 53 توجه کنید.

  2. Route 53 Stack را اجرا کنید
    • الگوی r53.yaml CloudFormation را برای ایجاد RecordSet در منطقه میزبان Route 53 مستقر کنید.

4. تنظیمات را تست کنید

پس از استقرار هر دو پشته، می توانید با استفاده از FQDN اختصاص داده شده در Route 53 به وب سرور خود دسترسی پیدا کنید.

مثال FQDN:
www.cmcloudlab1589.info

نتیجه گیری
تخصیص یک نام دامنه کاملاً واجد شرایط (FQDN) به یک نمونه EC2 با استفاده از Route 53 یک راه حل ساده و در عین حال قدرتمند برای افزایش دسترسی و مقیاس پذیری برنامه های شما است. با استفاده از AWS CloudFormation، ما فرآیند استقرار را خودکار کردیم و آن را کارآمد، تکرارپذیر و مدیریت آسان کردیم.

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

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

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

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