如何在 AWS EC2 Centos 上使用 Terraform 修复用 python 3 编写的简单 http 服务器
How to fix simple http server written in python 3 using Terraform on AWS EC2 Centos
我正在使用 terraform main.tf 为 Centos AMI 启动新的 AWS EC2 实例。我能够创建和连接 AWS 实例。
但我有以下问题
- 当我启动简单的基于 python 3 的 http 服务器时,它只是打印 "hello world",我无法 运行 python 使用文件函数的脚本地形。任何人都可以帮助我如何执行。我应该使用函数还是使用
资源 "null_resource" "cluster" {
使用口译员?
- 从外部世界,我无法连接 public domain:exposed 端口(使用 curl http://publicip:8080)。虽然我已经创建了一个安全组。
任何人都可以帮助我...是否有任何可能性,以检查 terraform 这些资源确实是在 AWS EC2 实例中创建的。像某种调试日志。
PS:我的 EC2 实例默认安装了 python2.7,所以在 main.tf 我尝试安装 python3 用于执行 python 脚本和这个 python 脚本在我的本地运行良好。
或者是否有执行此操作的最佳方法。
我仍在使用 Terraform 学习 AWS。
简单-你好-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 - 您正在上传脚本,但并未执行。您必须像安装 python 一样调用它,使用 local-exec
.
2 - 您打开了端口 8080,但您的应用程序在 8081 上运行。
我正在使用 terraform main.tf 为 Centos AMI 启动新的 AWS EC2 实例。我能够创建和连接 AWS 实例。
但我有以下问题
- 当我启动简单的基于 python 3 的 http 服务器时,它只是打印 "hello world",我无法 运行 python 使用文件函数的脚本地形。任何人都可以帮助我如何执行。我应该使用函数还是使用 资源 "null_resource" "cluster" { 使用口译员?
- 从外部世界,我无法连接 public domain:exposed 端口(使用 curl http://publicip:8080)。虽然我已经创建了一个安全组。
任何人都可以帮助我...是否有任何可能性,以检查 terraform 这些资源确实是在 AWS EC2 实例中创建的。像某种调试日志。
PS:我的 EC2 实例默认安装了 python2.7,所以在 main.tf 我尝试安装 python3 用于执行 python 脚本和这个 python 脚本在我的本地运行良好。
或者是否有执行此操作的最佳方法。 我仍在使用 Terraform 学习 AWS。
简单-你好-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 - 您正在上传脚本,但并未执行。您必须像安装 python 一样调用它,使用 local-exec
.
2 - 您打开了端口 8080,但您的应用程序在 8081 上运行。