Как исправить простой http-сервер, написанный на python 3, с помощью Terraform на AWS EC2 Centos

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

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

  • Когда я запускаю простой http-сервер на основе Python 3, который просто печатает «привет, мир», я не могу запустить скрипт Python, используя файловую функцию из terraform. может ли кто-нибудь помочь мне выполнить. я должен использовать функцию или ресурс "null_resource" "cluster" {с помощью интерпретатора?
  • из внешнего мира, я не могу подключить порт public domain: открытый (используя 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"]
  }
}

person change198    schedule 28.03.2019    source источник


Ответы (1)


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

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

person Stargazer    schedule 28.03.2019
comment
аааа !!! глупо с моей стороны .. Я думал, что открыл его для 8080 в питоне. Как вы думаете, Provider local-exec {command = ‹< EOH sudo yum -y update sudo yum install -y python3.6 \ n python3 $ {path. module} /simple-hello-world.py EOH} - person change198; 29.03.2019
comment
@shan да, это так, и я тоже принял ответ. Но это был летний вопрос. ;-) - person change198; 22.07.2020