Минулого разу ми торкнулись причин появи нового IaС продукту Pulumi та спробували розібратись із базовими принципами його роботи на прикладі створення простого AWS S3 buсket-у. Наразі ж спробуємо описати на Python-інтерфейсі Pulumi власний VPC із підмережами та ECS Fargate кластер, тобто значно ближчий до реального життя випадок. Також побачимо як користуватись S3-бекендом для збереження стейтів (checkpoints в термінології Pulumi), та що робити із відсутністю lock-ів на паралельний запуск того ж коду. У кінці спробуємо поговорити про нинішній стан речей та перспективи Pulumi. Всі описані нижче приклади можна буде знайти у наступному github-проекті https://github.com/ipeacocks/pulumi-aws-example
Отже для подальших дій необхідні:
1. CUSTOM VPC/SUBNETS IN FEW AZs
Якою має бути мережа, котру буде не дуже соромно лишати для prod-цілей? Має бути як мінімум декілька публічний підмереж у різних зонах доступності регіону (AZ, availability zone), декілька приватних та стільки ж NAT-шлюзів для з'єднання приватних підмереж із зовнішнім світом. NAT-шлюзи зобов'язані мати постійні IP-адреси (EIP) і лежати в публічних підмережах аналогічних зон доступності. Трафік публічних підмереж має прямувати на Internet-gateway, а приватних - на відповідний NAT-гейтвей своєї ж зони доступності. Спробуємо це реалізувати.
Експортуємо значення Programmatic Access:
$ export AWS_ACCESS_KEY_ID=AKIA1234563J76A
$ export AWS_SECRET_ACCESS_KEY=/xLmpmdp1V3abcdefghklmnopabcdefg2nKRDKO
$ export AWS_REGION=us-east-1
Створимо S3-bucket для стейтів Pulumi:
$ aws s3api create-bucket \
--bucket pulumi-states-zeezpha \
--region us-east-1
$ aws s3api put-bucket-versioning \
--bucket pulumi-states-zeezpha \
--versioning-configuration Status=Enabled
Назва бакету має бути унікальною, тому необхідно обрати якусь власну назву.
Укажемо для Pulumi, що ми збираємось зберігати стейти в створеному вище бакеті S3:
$ pulumi login s3://pulumi-states-zeezpha
Отже для подальших дій необхідні:
- обліковий запис AWS та Programmatic Access до нього
- установлений і налаштований Pulumi
1. CUSTOM VPC/SUBNETS IN FEW AZs
Якою має бути мережа, котру буде не дуже соромно лишати для prod-цілей? Має бути як мінімум декілька публічний підмереж у різних зонах доступності регіону (AZ, availability zone), декілька приватних та стільки ж NAT-шлюзів для з'єднання приватних підмереж із зовнішнім світом. NAT-шлюзи зобов'язані мати постійні IP-адреси (EIP) і лежати в публічних підмережах аналогічних зон доступності. Трафік публічних підмереж має прямувати на Internet-gateway, а приватних - на відповідний NAT-гейтвей своєї ж зони доступності. Спробуємо це реалізувати.
Експортуємо значення Programmatic Access:
$ export AWS_ACCESS_KEY_ID=AKIA1234563J76A
$ export AWS_SECRET_ACCESS_KEY=/xLmpmdp1V3abcdefghklmnopabcdefg2nKRDKO
$ export AWS_REGION=us-east-1
Створимо S3-bucket для стейтів Pulumi:
$ aws s3api create-bucket \
--bucket pulumi-states-zeezpha \
--region us-east-1
$ aws s3api put-bucket-versioning \
--bucket pulumi-states-zeezpha \
--versioning-configuration Status=Enabled
Назва бакету має бути унікальною, тому необхідно обрати якусь власну назву.
Укажемо для Pulumi, що ми збираємось зберігати стейти в створеному вище бакеті S3:
$ pulumi login s3://pulumi-states-zeezpha