커맨드 1발로 AWS에 극소 구성의 웹 서버(SSL/TLS 대응 끝난)를 구축하고 싶다

"일단 움직이면 좋다. 돈을 지불하고 싶지 않다. 도메인이라든지 SSL 증명서 설정 귀찮다. 로드 밸런서라든지 필요."

무슨



SSL/TLS 대응 끝난 웹 서버의 극소의 구성을 빨리 만듭니다. CloudFormation을 사용합니다.

대략의 흐름을 잡으면 Docker 등과의 조합으로, 명령 1발로 Web 서버와 그 인프라를 구축, 삭제할 수 있습니다.

이번에 쓴 코드 등 :
htps : // 기주 b. 코 m / Ponsea / A ws Mimima l-u-bse-r-r

인프라 사양


  • 서버는 EC2 인스턴스 1개만
  • 웹 서버의 URL의 호스트명은 적당하게 되지만 HTTPS로 접속할 수 있다. (자기적으로 도메인이나 인증서를 준비 할 필요 없음)
  • 이러한 URL이 된다 => https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/

  • 서버에 SSH 가능
  • 요금은 모든 EC2 인스턴스 요금 + Route53 호스팅 영역 (월 50 엔) + CloudMap의 네임 스페이스 (월 10 엔) 정도
  • 요금면은 적절하게 공식 페이지에서 확인하십시오


  • 인프라 구성



    최종 인프라 구성입니다.


    API Gateway의 VPC 링크와 개인 통합 기능을 사용하여 요청을 EC2로 우회합니다.
    Cloud Map은 ApiGateway가 EC2 인스턴스의 IP 주소/포트 번호를 확인하는 데 사용합니다.

    전제


  • 계정 등록 및 AWS CLI 설치
  • 위의 인프라 구성을 구축 할 수있는 권한이 있습니다
  • EC2의 키 페어를 1개 만들고 있다

  • 이번에는 CloudFormation을 사용합니다. CloudFormation이란 단적으로 말하면, 전술한 인프라 구성을 정의한 파일(yaml 또는 json 형식)을 준비해 실행하면, 그 인프라 구성을 실제로 구축해 주는 뛰어난 것입니다.

    아래에는 이번 CloudFormation 템플릿 파일(인프라 구성을 정의한 파일)이 있습니다.
    template.yaml 는 인프라 구성 정의 파일입니다.
    template.yaml 안에서는 이미, 자동으로 Docker의 httpd 이미지가 80번 포트로 실행되도록(듯이) 설정되어 있습니다. (자세한 것은 후술)
    docker run -d -p 80:80 httpd
    

    1명의 명령으로 인프라 구축


    template.yaml 있는 디렉토리에서 다음 명령을 실행하십시오. 그러면 실제로 인프라 구성이 구축됩니다.
    aws cloudformation create-stack \
      --stack-name minimal-webserver \ 任意のスタック名 (実際に作成されるAWSリソースの総称のようなもの)
      --template-body file://template.yaml \
      --parameters \
          ParameterKey=Ec2InstanceType,ParameterValue=t2.micro \ インスタンスタイプはお好みで(t2.microの部分)
          ParameterKey=SshKeyName,ParameterValue=<YOUR SSH KEY NAME> \ 予め作っておいたEC2のSSHキーペア名を指定
          ParameterKey=SshLocation,ParameterValue=<YOUR SSH LOCATION> SSH元のIPをx.x.x.x/x形式で指定し制限することをお勧めします。省略すれば0.0.0.0/0(制限なし)となります。
    

    빌드의 상태는 AWS의 CloudFormation 콘솔에서 확인할 수 있습니다. 상태가 CREATE_COMPLETE 가 되면 구축 완료입니다.

    빌드가 완료된 후 EC2 인스턴스의 퍼블릭 IP와 웹 서버의 URL(엔드포인트)을 확인합니다.
    aws cloudformation describe-stacks --stack-name minimal-webserver
    
    {
        "Stacks": [
            {
                ...
    
                "StackStatus": "CREATE_COMPLETE"
    
                ...
    
                "Outputs": [
                    { 
                        "OutputKey": "ApiGatewayUrl",
                        ↓ WebサーバーのURL
                        "OutputValue": "https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/",
                        "Description": "API Gateway endpoint URL for $default stage"
                    },
                    {
                        "OutputKey": "Ec2InstancePublicIp",
                        ↓ EC2 インスタンスのパブリックIP
                        "OutputValue": "xxx.xxx.xxx.xxx",
                        "Description": "EC2 Instance Public IP"
                    }
                ],
    
                ...
        ]
    }
    
    "OutputValue": "https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/", URL을 방문하면 웹 페이지를 볼 수 있습니다.

    현재는 Docker httpd 이미지의 "It works!"라는 페이지가 표시되어야합니다.

    SSH 연결하려는 경우
    ssh -i "/path/to/your-ssh-key.pem" ec2-user@<YOUR EC2 PUBLIC IP>
    

    모두 함께 삭제하고 싶은 경우 :
    aws cloudformation delete-stack  --stack-name minimal-webserver
    

    template.yaml 분석



    이번에 미리 준비한 template.yaml에서 정의한 EC2 인스턴스는 미리 Docker, docker-compose, git을 설치하고 Docker의 httpd 이미지를 실행하는 스크립트를 포함하고 있습니다. 이 스크립트는 EC2 인스턴스를 처음 시작할 때 실행됩니다.
          UserData:
            Fn::Base64: !Sub |
              #!/bin/bash -xe
              # docker, gitインストール
              yum install -y docker git
              # docker-composeインストール
              curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
              chmod +x /usr/local/bin/docker-compose
              systemctl start docker # Dockerデーモン起動
              systemctl enable docker # Dockerデーモン自動起動設定
              usermod -a -G docker ec2-user # dockerコマンドをec2-userで実行できる様に
              docker run -d -p 80:80 httpd # httpdイメージを実行
    

    용도에 맞추어, 여기서 Docker의 컨테이너 구성을 정의하면, 곧바로 싱글 노드의 작은 Web 서비스 지어질 것 같네요.

    CloudFormation 편리!

    전재원

    좋은 웹페이지 즐겨찾기