Bastion

Name : wsi-bastion-ec2

스크린샷 2025-01-06 오전 9.11.52.png

Amazon Linux 2 선택 및 x86 아키텍처 선택

스크린샷 2025-01-06 오전 9.12.39.png

VPC 선택 및 public-subnet-a 선택 후 IP 자동 할당 활성화 및 보안그룹 생성

스크린샷 2025-01-06 오전 9.14.09.png

PowerUserAccess 권한을 가진 Role 선택

스크린샷 2025-01-06 오전 9.16.49.png

UserData 입력

#!/bin/bash

yum update -y
yum install python3 python3-pip -y
pip3 install flask
mkdir /var/log/app
touch /var/log/app/app.log
chmod 777 /var/log/app/app.log

cat << EOF > /home/ec2-user/app.py
#!/usr/bin/python3
from flask import Flask, abort, request, jsonify
import logging

logging.basicConfig(
  format = '%(asctime)s %(levelname)s %(message)s',
  datefmt = '%Y-%m-%d %H:%M:%S',
  filename = "/var/log/app/app.log",
  level = logging.INFO
)

app = Flask(__name__)

@app.route('/v1/color', methods=['GET'])
def get_color():
  try:
    color_name = request.args['name']
    color_hash = request.args['hash']

    ret = {'code': '', 'name': ''}

    if color_name == 'red':
        ret['code'] = 'f34a07'
        ret['name'] = 'orange'
    elif color_name == 'blue':
        ret['code'] = '71f0f9'
        ret['name'] = 'sky'
    else:
        ret['code'] = 'ff00ff'
        ret['name'] = 'pink'

    return jsonify(ret), 200
  except Exception as e:
    logging.error(e)
    abort(500)

@app.route('/health', methods=['GET'])
def get_health():
  try:
    ret = {'status': 'ok'}

    return jsonify(ret), 200
  except Exception as e:
    logging.error(e)
    abort(500)

if __name__ == "__main__":
  app.run(host='0.0.0.0', port=8080)
EOF

cat << EOF > /etc/systemd/system/myapp.service
[Unit]
Description=My Flask App

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user
ExecStart=/usr/bin/python3 /home/ec2-user/app.py
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start myapp.service
systemctl enable myapp.service
systemctl status myapp.service

EIP 연결

스크린샷 2025-01-06 오전 9.26.31.png