[AWS] Ansible Automation Architecture

    반응형
    SMALL

    Architecture

    아키텍처 설명

    Client 입장

    1.     Client Domain으로 Browser 접근합니다.

    2.     Client 요청을 받은 ALB Django 운영 중인 서버에 Round Robin 알고리즘 방식으로 Web Server 요청을 보냅니다.

    3.     ALB Request 받은 Web Server 해당 내용에 대해 Client 브라우저에 출력될 있도록 Web Content를반환해줍니다.

     

    Developer 입장

    1.     개발자가 Playbook 작성하여 Python3/Boto3 개발된 애플리케이션에 업로드를 합니다.

    2.     해당 Playbook 받은 Boto3 애플리케이션은 S3 Bucket 업로드를 합니다.

    3.     S3 업로드가 정상 적으로 되면 Event 발생하여 Lambda에게 정보가 전달됩니다.

    4.     전달을 받은 Lambda다는 Control Plane Playbook 전송해주고 적용을 하는 명령어를 System Manager에서 지원하는 Run Command 사용해 명령어를 전송 실행시킵니다.

    5.     만약 부하가 발생하여 Auto Scaling 통해 Instance 자동으로 확장이 됩니다.

    6.     이때 확장이 Instance에는 아무런 파일이 존재하지 않기 때문에 Auto Scaling Event 통해서 확장이 되었을 경우 Lambda 함수가 동작합니다.

            1. 해당 Lambda Function 새롭게 추가된 Instance Id parsing하여 새롭게 추가된 Instance에게 Playbook Apply하도록 함수를 수행합니다.


    Hands on Lab

    Create VPC using CloudFormation Stack

    우선 CloudFormation 사용해서 VPC 구성해주자.

    $ aws cloudformation create-stack --stack-name ioc-vpc-stack --template-body file://vpc.yml --region ap-northeast-2

    그러면 5 뒤에 VPC 모두 생성되었는지 확인하고 진행.

     

    Create S3 Buckets

    이제 S3 Bucket AWS CLI 사용해서 Bucket 생성해주자.

    $ aws s3 mb s3://ioc-ansible-bucket --region ap-northeast-2

     

    Create IAM Role

    https://console.aws.amazon.com/iam

     

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "ssm:SendCommand",
                    "lambda:UpdateFunctionConfiguration"
                ],
                "Resource": [
                    "arn:aws:lambda:ap-northeast-2:XXXXXXXXXXXX:function:ioc-send-playbook-functions",
                    "arn:aws:ssm:*:*:document/*"
                ]
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": "ssm:SendCommand",
                "Resource": "arn:aws:ec2:*:*:instance/*"
            }
        ]
    }

    그리고 policy 생성해주고 해당 Policy Attach 해준다

    그리고 해당 Role 생성해준다.

    Lambda 전용 IAM Role 생성해주었다면 이제 EC2 Instance 위한 IAM Role 하나 생성해주자.

    그리고 해당  Role 생성해주자.

     

    Create Security Group

    아래와 같은 Rule 갖는 Security Group 생성해준다.

     

    Create Auto Scaling groups

    https://console.aws.amazon.com/ec2

    그리고 launch template 생성해주고 이제 Auto Scaling Group 생성해주자.

    Private Subnet 모두 선택해준다.

    Create Lambda Function

    이제 Lambda Function 생성해주자.

    https://console.aws.amazon.com/lambda

    그리고 Lambda 함수를 생성해주고 배포된 파일을 업로드해준다.

    //해당 코드는 ioc-send-playbook-functions 폴더안에 lambda_function.py파일의 Source Code 작성해주면 된다.

    그리고 이제 SNS 사용해서 Event Trigger 구성해주자.

    https://console.aws.amazon.com/sns

    {
      "Version": "2008-10-17",
      "Id": "example-ID",
      "Statement": [
        {
          "Sid": "s3-publish-access",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "SNS:Publish",
          "Resource": "arn:aws:sns:ap-northeast-2:XXXXXXXXXXXX:ioc-lifecycle-notification"
        }
      ]
    }

    그리고 생성해준다.

    생성을 했다면 이제 lambda 연결해주자.

    그리고 이제는 S3랑도 연결을 해주자.

    https://console.aws.amazon.com/s3/

    Create Notification Service

    Auto Scaling Group Scale-out 했을 경우 알람이 가도록 구성해주자

    https://console.aws.amazon.com/ec2

    그리고 생성해준다.

     

    Create Application Load Balancer

    우선 ALB 생성하기 앞서 Target Group 생성해주자.

    그리고 생성해주고 이제 Auto Scaling Group Attach 해주자.

    그리고 이제 Load Balancer 생성해주자.

    그리고 Load Balancer 생성해준다.

     

    Deploying Apache Applications

    그리고 이제 배포를 해보자

    $ Scripts/python app.py --file playbook.yml --bucket ioc-ansible-bucket --region ap-northeast-2

     

    그리고 ALB 통해서 접근하면 아래와 같이 정상 적으로 접근이 되는 것을 있다.

    반응형
    LIST

    댓글