AWSTemplateFormatVersion: '2010-09-09' Description: (SO8032) - Extension for Comfy on AWS - EC2 Instance Parameters: StackName: Type: String Description: "The Stack Name of the ESD API" keyPairName: Description: Name of the key pair to use for the EC2 instance Type: AWS::EC2::KeyPair::KeyName ConstraintDescription: Must be the name of an existing EC2 KeyPair. InstanceType: Description: EC2 Instance Type of the Comfy to deploy Type: String AllowedValues: - g4dn.xlarge - g4dn.2xlarge - g4dn.4xlarge - g4dn.8xlarge - g4dn.12xlarge - g5.2xlarge - g5.4xlarge - g5.8xlarge - g5.12xlarge Default: g5.2xlarge NumberOfInferencePorts: Description: The number of inference ports Type: Number MinValue: 1 MaxValue: 5 Default: 1 Mappings: RegionToAmiId: us-east-1: AMI: ami-02a07d31009cc8717 us-east-2: AMI: ami-02a912b010cf774bd ap-southeast-1: AMI: ami-06f0228bde7a6dac2 ap-northeast-1: AMI: ami-0f9b45ca95cee6386 ap-northeast-2: AMI: ami-0aba6dcbc1be4e85e us-west-1: AMI: ami-0ea5aefd1471f67b2 us-west-2: AMI: ami-09d4fb52761c3d78d Resources: ApiGwResource: Type: Custom::MyCustomResource Properties: ServiceToken: !GetAtt LambdaFunction.Arn StackName: !Ref StackName ComfyEC2Dev: Type: AWS::EC2::Instance DeletionPolicy: Delete Properties: InstanceType: !Ref InstanceType IamInstanceProfile: !Ref ComfyInstanceProfile SubnetId: !Ref ComfySubnet ImageId: !FindInMap [ RegionToAmiId, !Ref AWS::Region, AMI ] BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeSize: 1024 VolumeType: gp2 KeyName: !Ref keyPairName SecurityGroupIds: - !GetAtt ComfySecurityGroup.GroupId Tags: - Key: Name Value: !Sub "comfy-on-aws" UserData: 'Fn::Base64': !Sub | #!/bin/bash set -euxo pipefail mkdir -p ~/.aws echo "[default] region = ${AWS::Region}" > ~/.aws/config echo "COMFY_API_URL=${ApiGwResource.ApiGatewayUrl}" >> /etc/environment echo "COMFY_API_TOKEN=${ApiGwResource.ApiGatewayUrlToken}" >> /etc/environment echo "COMFY_BUCKET_NAME=${ApiGwResource.S3BucketName}" >> /etc/environment echo "DISABLE_AUTO_SYNC=false" >> /etc/environment echo "DISABLE_AWS_PROXY=false" >> /etc/environment echo "AWS_REGION=${AWS::Region}" >> /etc/environment echo "ACCOUNT_ID=${AWS::AccountId}" >> /etc/environment echo "PROCESS_NUMBER=${NumberOfInferencePorts}" >> /etc/environment echo "ESD_VERSION=dev" >> /etc/environment echo "SERVICE_TYPE=comfy" >> /etc/environment source /etc/environment wget https://github.com/peak/s5cmd/releases/download/v2.2.2/s5cmd_2.2.2_Linux-64bit.tar.gz tar xzvf s5cmd_2.2.2_Linux-64bit.tar.gz cp s5cmd /usr/local/bin/ rm -rf s5cmd_2.2.2_Linux-64bit.tar.gz s5cmd cp "s3://aws-gcr-solutions-${AWS::Region}/stable-diffusion-aws-extension-github-mainline/$ESD_VERSION/src.tar" "/tmp/src.tar" sudo rm -rf /root/stable-diffusion-aws-extension sudo mkdir -p /root/stable-diffusion-aws-extension/ tar --overwrite -xf "/tmp/src.tar" -C "/root/stable-diffusion-aws-extension/" rm -rf /tmp/src.tar sleep 150 while sudo fuser /var/lib/apt/lists/lock >/dev/null 2>&1 ; do echo "Waiting for other apt process to finish..." sleep 1 done while sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1 ; do echo "Waiting for other apt process to finish..." sleep 1 done sudo apt update && sudo apt install jq supervisor nginx -y sudo cp -f /root/stable-diffusion-aws-extension/workshop/comfy_nginx_proxy.conf /etc/nginx/sites-available/default sudo cp -f /root/stable-diffusion-aws-extension/workshop/comfy_custom_502.html /usr/share/nginx/html/custom_502.html sudo cp -f /root/stable-diffusion-aws-extension/workshop/comfy_custom_502.html /usr/share/nginx/html/index.html sudo ufw allow 'Nginx HTTP' sudo systemctl enable nginx sudo systemctl restart nginx aws ecr get-login-password --region ${AWS::Region} | docker login --username AWS --password-stdin 366590864501.dkr.ecr.${AWS::Region}.amazonaws.com docker pull 366590864501.dkr.ecr.${AWS::Region}.amazonaws.com/esd-inference:dev cat > comfy.service <