Как исправить простой http-сервер, написанный на python 3, с помощью Terraform в AWS EC2 Centos - PullRequest
0 голосов
/ 28 марта 2019

Я запускаю новый экземпляр AWS EC2, используя terraform main.tf для Centos AMI. Я могу создать и подключить экземпляр AWS.

но у меня есть проблема ниже

  • Когда я запускаю простой http-сервер на основе python 3, который просто печатает «hello world», я не могу запустить скрипт python, используя функцию file из terraform. Может ли кто-нибудь помочь мне, как выполнить. я должен использовать функцию или использовать ресурс "null_resource" "кластер" { используя переводчик?
  • из внешнего мира, я не могу подключить публичный домен: открытый порт (используя curl http://publicip:8080). Хотя я создал группу безопасности.

Может кто-нибудь помочь мне ... Есть ли возможность проверить в terraform, что эти ресурсы действительно созданы в экземпляре AWS EC2. как какой-то журнал отладки.

PS: в моем экземпляре EC2 по умолчанию установлен python2.7, поэтому в main.tf я попытался установить python3, используя для выполнения сценарий python, и этот сценарий python отлично работает на моем локальном компьютере.

Или есть ли лучший подход для выполнения этого. Я все еще изучаю AWS, используя terraform.

simple-hello-world.py

from http.server import BaseHTTPRequestHandler, HTTPServer


# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):

    # GET
    def do_GET(self):
        # Send response status code
        self.send_response(200)

        # Send headers
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        # Send message back to client
        message = "Hello world!"
        # Write content as utf-8 data
        self.wfile.write(bytes(message, "utf8"))
        return


def run():
    print('starting server...')

    # Server settings
    # Choose port 8080, for port 80, which is normally used for a http server, you need root access
    server_address = ('127.0.0.1', 8081)
    httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
    print('running server...')
    httpd.serve_forever()


run()

main.tf


provider "aws" {
  region = "us-east-2"
  version = "~> 1.2.0"
}

resource "aws_instance" "hello-world" {
  ami = "ami-ef92b08a"
  instance_type = "t2.micro"

  provisioner "local-exec" {
    command = <<EOH
      sudo yum -y update
      sudo yum install -y python3.6
    EOH
  }

  user_data = "${file("${path.module}/simple-hello-world.py")}"

  tags {
    Name = "my-aws-terraform-hello-world"
  }
}

resource "aws_security_group" "allow-tcp" {
  name = "my-aws-terraform-hello-world"
  ingress {
    from_port = 8080
    to_port = 8080
    protocol = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

1 Ответ

0 голосов
/ 28 марта 2019

1 - Вы загружаете скрипт, но не выполняете его. Вам придется вызывать его так же, как вы делали это для установки python, используя local-exec.

2 - Вы открыли порт 8080, но ваше приложение работает на 8081.

...