Amazon EC2 Auto Scaling 그룹으로 플릿 인프라 생성 - AWS 기한 클라우드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EC2 Auto Scaling 그룹으로 플릿 인프라 생성

이 섹션에서는 Amazon EC2 Auto Scaling 플릿을 생성하는 방법을 설명합니다.

다음을 사용하십시오. AWS CloudFormation YAML아래 템플릿을 사용하여 Amazon EC2 Auto Scaling (Auto Scaling) 그룹, 두 개의 서브넷, 인스턴스 프로필, 인스턴스 액세스 역할을 갖춘 아마존 가상 사설 클라우드 (AmazonVPC) 를 생성하십시오. 이는 서브넷에서 Auto Scaling을 사용하여 인스턴스를 시작하는 데 필요합니다.

렌더링 요구 사항에 맞게 인스턴스 유형 목록을 검토하고 업데이트해야 합니다.

CloudFormation YAML템플릿에 사용된 리소스 및 매개변수에 대한 전체 설명은 Deadline Cloud 리소스 유형 참조의 Deadline Cloud 리소스 유형 참조를 참조하십시오. AWS CloudFormation 사용 설명서.

Amazon EC2 Auto Scaling 플릿을 만들려면

  1. 다음 예제를 사용하여FarmID,FleetID, AMIId 파라미터를 정의하는 CloudFormation 템플릿을 생성합니다. 템플릿을 로컬 컴퓨터의 .YAML 파일에 저장합니다.

    AWSTemplateFormatVersion: 2010-09-09 Description: Amazon Deadline Cloud customer-managed fleet Parameters: FarmId: Type: String Description: Farm ID FleetId: Type: String Description: Fleet ID AMIId: Type: String Description: AMI ID for launching workers Resources: deadlineVPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: 100.100.0.0/16 deadlineWorkerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: !Join - ' ' - - Security group created for Deadline Cloud workers in the fleet - !Ref FleetId GroupName: !Join - '' - - deadlineWorkerSecurityGroup- - !Ref FleetId SecurityGroupEgress: - CidrIp: 0.0.0.0/0 IpProtocol: '-1' SecurityGroupIngress: [] VpcId: !Ref deadlineVPC deadlineIGW: Type: 'AWS::EC2::InternetGateway' Properties: {} deadlineVPCGatewayAttachment: Type: 'AWS::EC2::VPCGatewayAttachment' Properties: VpcId: !Ref deadlineVPC InternetGatewayId: !Ref deadlineIGW deadlinePublicRouteTable: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref deadlineVPC deadlinePublicRoute: Type: 'AWS::EC2::Route' Properties: RouteTableId: !Ref deadlinePublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref deadlineIGW DependsOn: - deadlineIGW - deadlineVPCGatewayAttachment deadlinePublicSubnet0: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref deadlineVPC CidrBlock: 100.100.16.0/22 AvailabilityZone: !Join - '' - - !Ref 'AWS::Region' - a deadlineSubnetRouteTableAssociation0: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref deadlinePublicRouteTable SubnetId: !Ref deadlinePublicSubnet0 deadlinePublicSubnet1: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref deadlineVPC CidrBlock: 100.100.20.0/22 AvailabilityZone: !Join - '' - - !Ref 'AWS::Region' - c deadlineSubnetRouteTableAssociation1: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref deadlinePublicRouteTable SubnetId: !Ref deadlinePublicSubnet1 deadlineInstanceAccessAccessRole: Type: 'AWS::IAM::Role' Properties: RoleName: !Join - '-' - - deadline - InstanceAccess - !Ref FleetId AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: - 'sts:AssumeRole' Path: / ManagedPolicyArns: - 'arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy' - 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore' - 'arn:aws:iam::aws:policy/AWSDeadlineCloud-WorkerHost' deadlineInstanceProfile: Type: 'AWS::IAM::InstanceProfile' Properties: Path: / Roles: - !Ref deadlineInstanceAccessAccessRole deadlineLaunchTemplate: Type: 'AWS::EC2::LaunchTemplate' Properties: LaunchTemplateName: !Join - '' - - deadline-LT- - !Ref FleetId LaunchTemplateData: NetworkInterfaces: - DeviceIndex: 0 AssociatePublicIpAddress: true Groups: - !Ref deadlineWorkerSecurityGroup DeleteOnTermination: true ImageId: !Ref AMIId InstanceInitiatedShutdownBehavior: terminate IamInstanceProfile: Arn: !GetAtt - deadlineInstanceProfile - Arn MetadataOptions: HttpTokens: required HttpEndpoint: enabled deadlineAutoScalingGroup: Type: 'AWS::AutoScaling::AutoScalingGroup' Properties: AutoScalingGroupName: !Join - '' - - deadline-ASG-autoscalable- - !Ref FleetId MinSize: 0 MaxSize: 10 VPCZoneIdentifier: - !Ref deadlinePublicSubnet0 - !Ref deadlinePublicSubnet1 NewInstancesProtectedFromScaleIn: true MixedInstancesPolicy: InstancesDistribution: OnDemandBaseCapacity: 0 OnDemandPercentageAboveBaseCapacity: 0 SpotAllocationStrategy: capacity-optimized OnDemandAllocationStrategy: lowest-price LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateId: !Ref deadlineLaunchTemplate Version: !GetAtt - deadlineLaunchTemplate - LatestVersionNumber Overrides: - InstanceType: m5.large - InstanceType: m5d.large - InstanceType: m5a.large - InstanceType: m5ad.large - InstanceType: m5n.large - InstanceType: m5dn.large - InstanceType: m4.large - InstanceType: m3.large - InstanceType: r5.large - InstanceType: r5d.large - InstanceType: r5a.large - InstanceType: r5ad.large - InstanceType: r5n.large - InstanceType: r5dn.large - InstanceType: r4.large MetricsCollection: - Granularity: 1Minute Metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupTotalInstances - GroupInServiceCapacity - GroupTotalCapacity
  2. 열기 AWS CloudFormation https://console.aws.amazon.com/cloudformation에서 콘솔을 실행하세요.

    다음을 사용하십시오. AWS CloudFormation 콘솔에서 생성한 템플릿 파일 업로드 지침에 따라 스택을 생성합니다. 자세한 내용은 스택 생성을 참조하십시오. AWS CloudFormation콘솔의 AWS CloudFormation 사용자 가이드.

참고
  • 작업자의 Amazon EC2 인스턴스에 연결된 IAM 역할의 자격 증명은 작업을 포함하여 해당 작업자에서 실행 중인 모든 프로세스에서 사용할 수 있습니다. 작업자는 작업을 수행할 수 있는 최소한의 권한을 가져야 합니다. deadline:CreateWorker 그리고 deadline:AssumeFleetRoleForWorker.

  • 작업자 에이전트는 큐 역할에 대한 자격 증명을 획득하여 작업을 실행하는 데 사용할 수 있도록 구성합니다. Amazon EC2 인스턴스 프로필 역할에는 작업에 필요한 권한이 포함되어서는 안 됩니다.

데드라인 클라우드 스케일 권장 기능을 사용하여 Amazon EC2 플릿을 자동 확장하십시오.

데드라인 클라우드는 아마존 EC2 오토 스케일링 (Auto Scaling) 그룹을 활용하여 아마존 EC2 고객 관리형 플릿 (CMF) 을 자동으로 확장합니다. 플릿 모드를 구성하고 계정에 필요한 인프라를 배포하여 플릿을 자동 확장해야 합니다. 배포한 인프라는 모든 플릿에서 작동하므로 한 번만 설정하면 됩니다.

기본 워크플로는 플릿 모드를 자동 확장하도록 구성하면 Deadline Cloud에서 권장 플릿 크기가 변경될 때마다 해당 플릿에 대한 EventBridge 이벤트를 전송하는 것입니다 (한 이벤트에는 플릿 ID, 권장 플릿 크기 및 기타 메타데이터가 포함됨). 관련 이벤트를 필터링하고 Lambda가 해당 이벤트를 사용하도록 하는 EventBridge 규칙이 있습니다. Lambda는 Amazon Auto EC2 Scaling과 통합되어 아마존 AutoScalingGroup EC2 플릿을 자동으로 확장할 것입니다.

플릿 모드를 다음으로 설정합니다. EVENT_BASED_AUTO_SCALING

플릿 모드를 로 구성하십시오EVENT_BASED_AUTO_SCALING. 콘솔을 사용하여 이 작업을 수행하거나 다음을 사용할 수 있습니다. AWS CLI OR를 직접 호출하려면 CreateFleet UpdateFleet API 모드가 구성된 후 Deadline Cloud는 권장 플릿 크기가 변경될 때마다 EventBridge 이벤트 전송을 시작합니다.

  • UpdateFleet명령 예시:

    aws deadline update-fleet \ --farm-id FARM_ID \ --fleet-id FLEET_ID \ --configuration file://configuration.json
  • 예제 CreateFleet 명령:

    aws deadline create-fleet \ --farm-id FARM_ID \ --display-name "Fleet name" \ --max-worker-count 10 \ --configuration file://configuration.json

다음은 위 (--configuration file://configuration.json) CLI 명령에서 configuration.json 사용된 예제입니다.

  • 플릿에서 Auto Scaling을 활성화하려면 모드를 로 설정해야 EVENT_BASED_AUTO_SCALING 합니다.

  • workerCapabilities는 생성 CMF 시 에 할당된 기본값입니다. 사용 가능한 리소스를 늘려야 하는 경우 이 값을 변경할 수 있습니다CMF.

플릿 모드를 구성한 후 Deadline Cloud는 해당 플릿에 대한 플릿 크기 권장 이벤트를 생성하기 시작합니다.

{ "customerManaged": { "mode": "EVENT_BASED_AUTO_SCALING", "workerCapabilities": { "vCpuCount": { "min": 1, "max": 4 }, "memoryMiB": { "min": 1024, "max": 4096 }, "osFamily": "linux", "cpuArchitectureType": "x86_64", } } }

다음을 사용하여 Auto Scaling 스택을 배포합니다. AWS CloudFormation 템플릿

이벤트를 필터링하는 EventBridge 규칙, 이벤트를 사용하고 Auto Scaling을 제어하는 Lambda, 처리되지 SQS 않은 이벤트를 저장하는 대기열을 설정할 수 있습니다. 다음을 사용하십시오. AWS CloudFormation 템플릿을 사용하여 모든 것을 스택에 배포할 수 있습니다. 리소스를 성공적으로 배포한 후 작업을 제출하면 플릿이 자동으로 확장됩니다.

Resources: AutoScalingLambda: Type: 'AWS::Lambda::Function' Properties: Code: ZipFile: |- """ This lambda is configured to handle "Fleet Size Recommendation Change" messages. It will handle all such events, and requires that the ASG is named based on the fleet id. It will scale up/down the fleet based on the recommended fleet size in the message. Example EventBridge message: { "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "Fleet Size Recommendation Change", "source": "aws.deadline", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [], "detail": { "farmId": "farm-12345678900000000000000000000000", "fleetId": "fleet-12345678900000000000000000000000", "oldFleetSize": 1, "newFleetSize": 5, } } """ import json import boto3 import logging logger = logging.getLogger() logger.setLevel(logging.INFO) auto_scaling_client = boto3.client("autoscaling") def lambda_handler(event, context): logger.info(event) event_detail = event["detail"] fleet_id = event_detail["fleetId"] desired_capacity = event_detail["newFleetSize"] asg_name = f"deadline-ASG-autoscalable-{fleet_id}" auto_scaling_client.set_desired_capacity( AutoScalingGroupName=asg_name, DesiredCapacity=desired_capacity, HonorCooldown=False, ) return { 'statusCode': 200, 'body': json.dumps(f'Successfully set desired_capacity for {asg_name} to {desired_capacity}') } Handler: index.lambda_handler Role: !GetAtt - AutoScalingLambdaServiceRole - Arn Runtime: python3.11 DependsOn: - AutoScalingLambdaServiceRoleDefaultPolicy - AutoScalingLambdaServiceRole AutoScalingEventRule: Type: 'AWS::Events::Rule' Properties: EventPattern: source: - aws.deadline detail-type: - Fleet Size Recommendation Change State: ENABLED Targets: - Arn: !GetAtt - AutoScalingLambda - Arn DeadLetterConfig: Arn: !GetAtt - UnprocessedAutoScalingEventQueue - Arn Id: Target0 RetryPolicy: MaximumRetryAttempts: 15 AutoScalingEventRuleTargetPermission: Type: 'AWS::Lambda::Permission' Properties: Action: 'lambda:InvokeFunction' FunctionName: !GetAtt - AutoScalingLambda - Arn Principal: events.amazonaws.com SourceArn: !GetAtt - AutoScalingEventRule - Arn AutoScalingLambdaServiceRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Statement: - Action: 'sts:AssumeRole' Effect: Allow Principal: Service: lambda.amazonaws.com Version: 2012-10-17 ManagedPolicyArns: - !Join - '' - - 'arn:' - !Ref 'AWS::Partition' - ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' AutoScalingLambdaServiceRoleDefaultPolicy: Type: 'AWS::IAM::Policy' Properties: PolicyDocument: Statement: - Action: 'autoscaling:SetDesiredCapacity' Effect: Allow Resource: '*' Version: 2012-10-17 PolicyName: AutoScalingLambdaServiceRoleDefaultPolicy Roles: - !Ref AutoScalingLambdaServiceRole UnprocessedAutoScalingEventQueue: Type: 'AWS::SQS::Queue' Properties: QueueName: deadline-unprocessed-autoscaling-events UpdateReplacePolicy: Delete DeletionPolicy: Delete UnprocessedAutoScalingEventQueuePolicy: Type: 'AWS::SQS::QueuePolicy' Properties: PolicyDocument: Statement: - Action: 'sqs:SendMessage' Condition: ArnEquals: 'aws:SourceArn': !GetAtt - AutoScalingEventRule - Arn Effect: Allow Principal: Service: events.amazonaws.com Resource: !GetAtt - UnprocessedAutoScalingEventQueue - Arn Version: 2012-10-17 Queues: - !Ref UnprocessedAutoScalingEventQueue