অপি গেটওয়েতে নির্দেশ করতে আমি কীভাবে রুট 53 সেটআপ করব


12

আমি একসাথে সমস্ত ওয়েবসাইট তৈরি করতে একটি ক্লাউডফর্মেশন কনফিগারেশন ফাইল লিখছি। এর মধ্যে রয়েছে ল্যাম্বডা ফাংশন তৈরি করা, এপিআই গেটওয়ে তৈরি করা, একটি এস 3 বালতি সেটআপ করা, রুট 53 জোন তৈরি করা এবং রেকর্ডগুলি।

যতদূর:

  • ল্যাম্বদা ফাংশন তৈরি করা এবং এর ভূমিকা (কাজ করে)
  • এটি স্থাপনার এপিআই গেটওয়ে তৈরি এবং এটির ভূমিকা (কাজ করে)
  • একটি এস 3 বালতি তৈরি করা এবং এটি নীতি (কাজ করে)
  • সাইটের জন্য একটি রুট 53 অঞ্চল এবং ডিএনএস রেকর্ড তৈরি করা হচ্ছে (কাজ করে)
  • এপিআই গেটওয়ের জন্য একটি ডোমেন তৈরি করুন (আমি জানি না কী হয়)

সুতরাং domain.comS3 বালতিতে কোনও সমস্যা ছাড়াই ফাইলগুলি সরবরাহ করে। এপিআই গেটওয়ের জন্য অ্যাডাব্লুএস ইউআরআই ব্যবহার করা https://trydsoonjc.execute-api.us-west-2.amazonaws.com/app/path/hereকোনও সমস্যা ছাড়াই কাজ করে ।

আমি যা সেটআপ করতে চাই তা হ'ল api.domain.comসার্ভারের এপিআই অ্যাক্সেস করার জন্য এপিআই গেটওয়েতে নির্দেশ করা।

আমি কীভাবে রুট 53 এপিআই গেটওয়েতে সংযুক্ত করব?

আমার ক্লাউডফর্মেশনটি এখন যেমন দাঁড়িয়ে আছে তা হ'ল:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description" : "Website",

  "Parameters": {
    "DomainName": {
      "Type" : "String",
      "Description" : "The DNS name of an Amazon Route 53 hosted zone e.g. server.com",
      "AllowedPattern" : "(?!-)[a-zA-Z0-9-.]{1,63}(?<!-)",
      "ConstraintDescription" : "must be a valid DNS zone name."
    }
  },

  "Mappings" : {
    "RegionMap" : {
      "us-east-1" : { "S3HostedZoneId" : "Z3AQBSTGFYJSTF", "S3WebsiteEndpoint" : "s3-website-us-east-1.amazonaws.com" },
      "us-west-1" : { "S3HostedZoneId" : "Z2F56UZL2M1ACD", "S3WebsiteEndpoint" : "s3-website-us-west-1.amazonaws.com" },
      "us-west-2" : { "S3HostedZoneId" : "Z3BJ6K6RIION7M", "S3WebsiteEndpoint" : "s3-website-us-west-2.amazonaws.com" },
      "eu-west-1" : { "S3HostedZoneId" : "Z1BKCTXD74EZPE", "S3WebsiteEndpoint" : "s3-website-eu-west-1.amazonaws.com" },
      "ap-southeast-1" : { "S3HostedZoneId" : "Z3O0J2DXBE1FTB", "S3WebsiteEndpoint" : "s3-website-ap-southeast-1.amazonaws.com" },
      "ap-southeast-2" : { "S3HostedZoneId" : "Z1WCIGYICN2BYD", "S3WebsiteEndpoint" : "s3-website-ap-southeast-2.amazonaws.com" },
      "ap-northeast-1" : { "S3HostedZoneId" : "Z2M4EHUR26P7ZW", "S3WebsiteEndpoint" : "s3-website-ap-northeast-1.amazonaws.com" },
      "sa-east-1" : { "S3HostedZoneId" : "Z31GFT0UA1I2HV", "S3WebsiteEndpoint" : "s3-website-sa-east-1.amazonaws.com" }
    }
  },

  "Resources": {
    "LambdaExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [{
            "Effect": "Allow",
            "Principal": {
              "Service": "lambda.amazonaws.com"
            },
            "Action": [ "sts:AssumeRole" ]
          }]
        },
        "Path": "/",
        "Policies": [{
          "PolicyName": "execution",
          "PolicyDocument": {
            "Statement": [{
              "Effect": "Allow",
              "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Resource": "*"
            }, {
              "Effect": "Allow",
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:CreateTable",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
              ],
              "Resource": "*"
            }]
          }
        }]
      }
    },

    "APIGatewayExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [{
            "Effect": "Allow",
            "Principal": {
              "Service": "apigateway.amazonaws.com"
            },
            "Action": [ "sts:AssumeRole" ]
          }]
        },
        "Path": "/",
        "Policies": [{
          "PolicyName": "execution",
          "PolicyDocument": {
            "Statement": [{
              "Effect": "Allow",
              "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
              ],
              "Resource": "*"
            }, {
              "Effect": "Allow",
              "Action": [
                "lambda:InvokeFunction"
              ],
              "Resource": "*"
            }]
          }
        }]
      }
    },

    "LambdaFunctionUpdate": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "ZipFile": "exports.handler = function (event, context) { context.succeed(\"Hello, World!\"); };"
        },
        "Description": "Update handler.",
        "Handler": "index.handler",
        "MemorySize": 128,
        "Role": { "Fn::GetAtt": ["LambdaExecutionRole", "Arn" ] },
        "Runtime": "nodejs4.3",
        "Timeout": 30
      }
    },

    "APIGateway": {
      "Type": "AWS::ApiGateway::RestApi",
      "Properties": {
        "Body": @@swagger,
        "FailOnWarnings": true,
        "Name": "smallPictures",
        "Description": "Structured wiki"
      }
    },

    "APITDeploymentTest": {
      "Type": "AWS::ApiGateway::Deployment",
      "Properties": {
        "RestApiId": { "Ref": "APIGateway" },
        "Description": "Deploy for testing",
        "StageName": "smallPicturesTesting"
      }
    },

    "WebsiteBucket" : {
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
        "BucketName": {"Ref":"DomainName"},
        "AccessControl" : "PublicRead",
        "WebsiteConfiguration" : {
          "IndexDocument" : "index.html",
          "ErrorDocument" : "404.html"
        }
      },
      "DeletionPolicy" : "Retain"
    },

    "WebsiteBucketPolicy" : {
      "Type" : "AWS::S3::BucketPolicy",
      "Properties" : {
        "Bucket" : {"Ref" : "WebsiteBucket"},
        "PolicyDocument": {
          "Statement": [{
              "Action": [ "s3:GetObject" ],
              "Effect": "Allow",
              "Resource": { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "WebsiteBucket" } , "/*" ]]},
              "Principal": "*"
          }]
        }
      }
    },

    "DNS": {
      "Type": "AWS::Route53::HostedZone",
      "Properties": {
        "HostedZoneConfig": {
          "Comment": { "Fn::Join" : ["", ["Hosted zone for ", { "Ref" : "DomainName" } ]]}
        },
        "Name": { "Ref" : "DomainName" },
        "HostedZoneTags" : [{
          "Key": "Application",
          "Value": "Blog"
        }]
      }
    },

    "DNSRecord": {
      "Type": "AWS::Route53::RecordSetGroup",
      "Properties": {
        "HostedZoneName": {
            "Fn::Join": [ "", [ { "Ref": "DomainName" }, "." ]]
        },
        "Comment": "Zone records.",
        "RecordSets": [
          {
            "Name": { "Ref": "DomainName" },
            "Type": "A",
            "AliasTarget": {
              "HostedZoneId": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "S3HostedZoneId" ]},
              "DNSName": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "S3WebsiteEndpoint" ]}
            }
          }, {
            "Name": { "Fn::Join" : ["", ["www.", { "Ref" : "DomainName" }]]},
            "Type": "CNAME",
            "TTL" : "900",
            "ResourceRecords" : [
              {"Fn::GetAtt":["WebsiteBucket", "DomainName"]}
            ]
          }
        ]
      }
    }
  },

  "Outputs": {
    "WebsiteURL": {
      "Value": { "Fn::GetAtt": ["WebsiteBucket", "WebsiteURL" ] },
      "Description": "URL for website hosted on S3"
    }
  }
}

4
একটি কাস্টম ডোমেন নাম (হোস্টনাম) সরাসরি এপিআই গেটওয়ে শেষ পয়েন্টে নির্দেশিত হয় না। এটি অন্তর্নিহিত ক্লাউডফ্রন্ট বিতরণটির দিকে ইঙ্গিত করেছে, API গেটওয়ের পরে কাস্টম ডোমেন নামটি আশা / সমর্থন করার জন্য কনফিগার করা হয়েছে তার পরে তৈরি / মালিকানাধীন / নিয়ন্ত্রিত হয়েছে G রুট ৫৩ এ কেবল রেকর্ড তৈরির চেয়ে এটি আরও জটিল। আপনি যদি এ প্রক্রিয়াটির সাথে ইতিমধ্যে পরিচিত না হন তবে আপনার এপিআই গেটওয়ে এপিআই হোস্ট নাম হিসাবে কাস্টম ডোমেন নাম ব্যবহার করতে হবে review
মাইকেল - sqlbot

2
আপনার কাস্টম হোস্টনামের জন্য আপনাকে একটি এসএসএল শংসাপত্র সরবরাহ করতে হবে, বা কনফিগারেশনের অংশ হিসাবে অ্যামাজন শংসাপত্র পরিচালক থেকে একটি গ্রহণ করতে হবে, যেহেতু এপিআই গেটওয়ের এইচটিটিপিএস সক্ষম হওয়া দরকার।
মাইকেল - sqlbot

উত্তর:


4

শংসাপত্র ব্যবস্থাপক ব্যবহার করে আপনাকে একটি এসএসএল শংসাপত্র তৈরি করতে হবে। একটি প্রান্ত শেষ পয়েন্টের জন্য, এটি ইইউ-পূর্ব -১ এ তৈরি করুন, আঞ্চলিক এবং বেসরকারী শেষ পয়েন্টগুলির জন্য, আপনি যে অঞ্চলে (বা ল্যাম্বদা) এপিআই গেটওয়ে নিযুক্ত করছেন সেখানে এটি তৈরি করুন। এখানে আরও পড়ুন । আমি এ আরএন হিসাবে উল্লেখ করবCertificateArn

আপনাকে একটি কনফিগার করতে হবে AWS::ApiGateway::DomainName:

"MyDomainName": {
  "Type": "AWS::ApiGateway::DomainName",
  "Properties": {
    "DomainName": {"Ref: "DomainName"},
    "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/fb1b9770-a305-495d-aefb-27e5e101ff3"
  }
}

এটি এপিআই গেটওয়ের জন্য ডোমেন সক্ষম করে। এর পরে, আপনাকে একটি নির্দিষ্ট স্থাপনার পর্যায়ে , API (যেমন আপনার রেস্ট্যাপআই) প্রকাশ করতে হবে । আপনার টেমপ্লেটে, আপনার কোনও স্থাপনার পর্যায়ে নেই। একবার দেখে একটি নিন AWS::ApiGateway::Stage। একটি ন্যূনতম উদাহরণ এটির মতো দেখাবে:

"Prod": {
            "Type": "AWS::ApiGateway::Stage",
            "Properties": {
                "StageName": "Prod",
                "Description": "Prod Stage",
                "RestApiId": {
                    "Ref": "APIGateway"
                },
                "DeploymentId": {
                    "Ref": "APITDeploymentTest"
                },
}

তবে আপনি সম্ভবত এটিতে কিছু অতিরিক্ত কনফিগারেশন চান। আমি আপনাকে MethodSettingsসম্পত্তিটি একবার দেখুন পরামর্শ দিই ।

অবশেষে, একটি basepath ম্যাপিং রিসোর্স স্থাপন: AWS::ApiGateway::BasePathMapping। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এই ধরণের তৈরি মঞ্চে ভিত্তিপথটি মানচিত্র করুন:

"ProdDomainBasePath": {
  "Type" : "AWS::ApiGateway::BasePathMapping",
  "Properties" : {
    "DomainName" : {"Ref: "DomainName"},
    "RestApiId" : {"Ref": "APIGateway"},
    "Stage" : "Prod"
  }
}

আপনি যদি কোনও AWS::ApiGateway::Stageসংস্থান পরিবর্তন করেন তবে আপনাকে সংশ্লিষ্ট উত্সের উপর একটি আপডেট জোর করতে হবে AWS::ApiGateway::Deployment- এর অর্থ সাধারণত সেই সম্পদটিকে নতুন করে AWS::ApiGateway::Deploymentরাখা, মনে রাখা। অন্যথায়, এটি স্থাপন করা হবে না।

যা করা উচিৎ.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.