boto3를 사용하여 Python 스크립트로 3개의 특정 EC2 인스턴스를 중지하는 방법

4271 단어 awsboto3pythondevops


Boto3는 Python용 Amazon Web Services(AWS) 소프트웨어 개발 키트(SDK)입니다. Elastic Compute Cloud(EC2), DynamoDB, AWS Config, Cloud Watch 및 Simple Storage Service를 포함한 모든 현재 AWS 클라우드 서비스를 지원합니다. 이를 통해 Python 스크립트에서 AWS 리소스를 직접 생성, 업데이트 및 삭제할 수 있습니다.

이 기사에서는 boto3와 함께 Python 스크립트를 사용하여 DEV 태그가 있는 3개의 EC2 인스턴스를 중지하는 방법을 보여 드리겠습니다.

목표:


  • DevOps 엔지니어링 팀은 개발 랩을 자주 사용하여 애플리케이션 릴리스를 테스트합니다.
  • 관리자는 개발 랩의 비용 상승에 대해 불평하고 있으며 모든 엔지니어가 시간을 초과한 후 (이 예의 경우) 3개의 EC2 인스턴스를 중지하여 비용을 절약해야 합니다.
  • 프로덕션의 어떤 것도 실수로 중지되지 않도록 개발 인스턴스만 중지되도록 하려고 합니다.
  • Environment: Dev 태그가 있는 실행 중인 인스턴스만 중지하는 Python 스크립트에 논리를 추가합니다.

  • 메모:



    Cloud9 EC2 인스턴스를 중지하지 않는 논리를 추가했습니다.

    전제 조건:


  • 루트 계정이 아닌 관리자 액세스 권한이 있는 AWS 사용자 계정입니다.
  • Cloud9 IDE는 Python 및 boto3가 설치된 상태로 제공됩니다.

  • 사용된 리소스:



    learn-to-code.workshop.aws
    Boto3 documentation — Boto3 Docs 1.24.56 documentation

    시작하자!

    cloud9 환경에서 boto3_multiple_ec2라는 새 디렉터리를 만듭니다.
    mkdir <directory name>
    cd boto3_multiple_ec2

    저는 이 스크립트로 작업할 때 "DEV"태그가 있는 3개의 EC2 인스턴스만 인쇄하고 Cloud9 환경의 EC2 인스턴스를 중단하지 않도록 작은 코드 덩어리로 작업하는 데 매우 주의했습니다.

    Python 스크립트가 작동하면 코드를 복사하여 스크립트(boto3_multiple_ec2.py)에 붙여넣었습니다.

    다음은 파이썬 스크립트의 요지입니다.

    # --- boto3_python_projects/boto3_multiple_ec2.py ---
    
    # AWS Python SDK
    import boto3
    
    
    # A low-level client representing Amazon Elastic Compute Cloud (EC2)
    ec2_client=boto3.client("ec2")
    
    
    # use Amazon service ec2
    ec2_resource=boto3.resource("ec2")
    
    
    # create 4 ec2 instances
    ec2_resource.create_instances(
        ImageId='ami-090fa75af13c156b4',
        InstanceType='t2.micro',
        MaxCount=5,
        MinCount=5)
    
    
    # List of ec2 instance ids
    ec2_instance_ids = []
    
    
    # iterate and prints all ec2 instances 
    # EXCEPT Cloud9 id - i-0e6238103c9b3f9a8
    response=ec2_client.describe_instances()
    
    
    # reservations = response['Reservations']
    for reservation in response['Reservations']:
    
        for instance in reservation['Instances']:
            # instanceId = instance["InstanceId"]
            # not to print Cloud9 id - i-0e6238103c9b3f9a8
            if ("i-0e6238103c9b3f9a8" != instance["InstanceId"]):
                    print(instance["InstanceId"])
                    ec2_instance_ids.append(instance["InstanceId"])
    
    
    # create tags for 3 ec2 instances
    # with **Environment: Dev** tag
    response=ec2_client.create_tags(
        Resources=[
            ec2_instance_ids[1], ec2_instance_ids[2], ec2_instance_ids[3],
        ],
        Tags=[
            {
                'Key': 'Environment',
                'Value': 'dev',
            },
        ],
    )
    
    
    # filters **running** instances that have the **Environment: Dev** tag.
    instances = ec2_resource.instances.filter(
        Filters = [{'Name': 'instance-state-name', 'Values': ['running']},
            {'Name': 'tag:Environment', 'Values':['dev']}])
    
    
    # only stops **running** instances that have the **Environment: Dev** tag.
    for instance in instances:
        try:
            instance.stop()
            print(f'{instance} stopped')
        except:
            print(f'Error stopping {instance}')
    


    GitHub repository에서도 동일한 코드를 볼 수 있습니다.

    우리가 지금까지 한 일



    "DEV"태그가 있는 3개의 특정 EC2 인스턴스를 중지하고 내 Cloud9 EC2 인스턴스를 활성 상태로 유지하기 위해 boto3로 Python 스크립트를 생성했습니다!!!

    간단하고 간단한 스크립트처럼 보이지만 로직을 작동시키기 위해 많은 오류가 발생했습니다. 저는 파이썬을 좋아하고 그것으로 프로젝트를 하는 것이 재미있습니다.

    좋은 웹페이지 즐겨찾기