Как я могу развернуть nginx в fargate AWS в коде?

Скажем, у меня есть файл docker-compose, подобный следующему:

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80

Я хочу иметь возможность развернуть его в AWS Fargate в идеале (хотя я достаточно расстроен, что взял бы ECS или что-нибудь еще, что работает) - сейчас меня не волнуют объемы, масштабирование или что-то еще, что может иметь сложность Я просто после минимума, чтобы я мог начать понимать, что происходит. Единственное предостережение в том, что он должен быть в коде - автоматическое развертывание, которое я могу раскрутить с CI-сервера.

Является ли CloudFormation правильным инструментом? Я могу только найти примеры, которые буквально представляют собой тысячи строк yaml или более, ни одна из них не работает, и их невозможно отладить.

2 ответа

Вы можете использовать инструмент AWS cdk для написания своей инфраструктуры в виде кода. Это в основном мета-фреймворк для создания шаблонов облачной информации. Вот минимальный пример развертывания nginx в сбалансированном по нагрузке сервисе eg fargate с автоматическим масштабированием, но вы можете просто удалить последние выражения. Код быстро усложняется, когда вам нужно больше контролировать, с чего начать

import cdk = require('@aws-cdk/cdk');
import ec2 = require('@aws-cdk/aws-ec2');
import ecs = require('@aws-cdk/aws-ecs');
import ecr = require('@aws-cdk/aws-ecr');

export class NginxStack extends cdk.Stack {

    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
        super(scope, id, props);

        const vpc = new ec2.VpcNetwork(this, 'MyApiVpc', {
            maxAZs: 1
        });

        const cluster = new ecs.Cluster(this, 'MyApiEcsCluster', {
            vpc: vpc
        });

        const lbfs = new ecs.LoadBalancedFargateService(this, 'MyApiLoadBalancedFargateService', {
            cluster: cluster,
            cpu: '256',
            desiredCount: 1,
            // The tag for the docker image is set dynamically by our CI / CD pipeline
            image: ecs.ContainerImage.fromDockerHub("nginx"),
            memoryMiB: '512',
            publicLoadBalancer: true,
            containerPort: 80
        });

        const scaling = lbfs.service.autoScaleTaskCount({
            maxCapacity: 5,
            minCapacity: 1
        });

        scaling.scaleOnCpuUtilization('MyApiCpuScaling', {
            targetUtilizationPercent: 10
        });

    }
}

Я добавил ссылку на конкретную версию cdk, потому что последняя сборка для документации немного сломана.

ECS использует "Определения задач" вместо docker-compose. В Определениях задач вы определяете, какой образ и порты использовать. Мы также можем использовать docker-compose, если используем AWS CLI. Но я еще не пробовал.

Таким образом, вы можете сначала создать кластер на основе ECS Fargate, а затем создать задачу или службу, используя определение задачи. Это поднимет контейнеры в Фаргейте.

Другие вопросы по тегам