Как я могу развернуть 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, а затем создать задачу или службу, используя определение задачи. Это поднимет контейнеры в Фаргейте.