Отношение к DevOps как к Skynet с ChatGPT
24 декабря 2022 г.Если вы были в Интернете за последний месяц, вы, вероятно, слышали о ChatGPT. OpenAI объявила о следующем поколении своей модели искусственного интеллекта для обработки естественного языка под названием ChatGPT, с которой вы можете общаться практически на любую тему на свете.
Люди обновляют свои аватары аватарами, сгенерированными искусственным интеллектом на основе подсказок, созданных ChatGPT, и публикуют бесконечные снимки экрана, демонстрируя свое недоверие к качеству и широте знаний ChatGPT.
Вот лишь несколько примеров того, на что способен ChatGPT:
н
п
Одной из областей, которая действительно покорила технологическую индустрию, является способность ChatGPT писать код. Некоторые даже утверждали, что он заменит Google и Stack Overflow. Нам это показалось интересным, и мы хотели посмотреть, как это работает с конфигурацией инфраструктуры. Поэтому мы взяли ChatGPT на тест-драйв.
Одна из самых больших ценностей, которая волнует людей в этом ИИ следующего поколения, на самом деле заключается в том, как он справляется с повторяющимися и рутинными задачами, с которыми инженеры ненавидят иметь дело. Одной из таких областей являются шаблоны IaC, поэтому наша первая попытка состояла в том, чтобы увидеть, как ChatGPT будет работать при создании шаблона и модулей IaC.
Давайте посмотрим.
ПОДСКАЗКА №1. Создайте шаблон Terraform для высокодоступного кластера EKS
И результаты:
provider "aws" {
region = "us-east-1"
}
Create an EKS cluster
resource "aws_eks_cluster" "eks_cluster" {
name = "my-eks-cluster"
role_arn = aws_iam_role.eks_cluster_role.arn
}
Create an IAM role for the EKS cluster
Attach the AmazonEKSClusterPolicy policy to the EKS cluster role
resource "aws_iam_role_policy_attachment" "eks_cluster_policy_attachment" {
role = aws_iam_role.eks_cluster_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
}
Create an Amazon Elastic Block Store (EBS) volume for the Kubernetes etcd data
resource "aws_ebs_volume" "eks_etcd_volume" {
availability_zone = aws_instance.eks_control_plane.availability_zone
size = 20
type = "gp2"
}
Create an Amazon Elastic Compute Cloud (EC2) instance for the Kubernetes control plane
resource "aws_instance" "eks_control_plane" {
ami = "ami-0ac019f4fcb7cb7e6"
instance_type = "t3.medium"
subnet_id = aws_subnet.eks_control_plane_subnet.id
iam_instance_profile = aws_iam_instance_profile.eks_control_plane_instance_profile.name
key_name = "my-ssh-key"
root_block_device {
volume_type = "gp2"
volume_size = 20
delete_on_termination = true
}
tags = {
Name = "eks-control-plane"
}
}
Create an IAM instance profile for the Kubernetes control plane EC2 instance
resource "aws_iam_instance_profile" "eks_control_plane_instance_profile" {
name = "eks-control-plane-instance-profile"
role = aws_iam_role.eks_control_plane_role.name
}
Create an IAM role for the Kubernetes control plane EC2 instance
resource "aws_iam_role" "eks_control_plane_role" {
name = "eks-control-plane-role"
assume_role_policy = <<POL
Очень круто! Должен ли я искать работу? Возможно, еще нет… но невероятно видеть, насколько точен ChatGPT и его возможности писать инфраструктурный код с ограниченными подсказками.
Однако, при всем уважении, давайте посмотрим, справится ли он с задачей императивного IaC, такого как Pulumi.
Подсказка №2: создайте Golang Pulumi, который создаст корзину S3 с уведомлением в теме SNS
import (
"github.com/pulumi/pulumi-aws/sdk/v2/go/aws/s3"
"github.com/pulumi/pulumi-aws/sdk/v2/go/aws/sns"
"github.com/pulumi/pulumi/sdk/v2/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Create an S3 bucket.
bucket, err := s3.NewBucket(ctx, "my-bucket", &s3.BucketArgs{
// Add other bucket configuration options here.
})
if err != nil {
return err
}
// Create an SNS topic for notifications.
topic, err := sns.NewTopic(ctx, "my-topic", &sns.TopicArgs{
// Add other topic configuration options here.
})
if err != nil {
return err
}
// Add an SNS topic subscription for the bucket.
_, err = s3.NewBucketNotification(ctx, "bucket-notification", &s3.BucketNotificationArgs{
Bucket: bucket.ID(),
TopicConfigurations: s3.BucketNotificationTopicConfigurationArray{
s3.BucketNotificationTopicConfigurationArgs{
TopicArn: topic.Arn,
// Add other topic configuration options here.
},
},
})
if err != nil {
return err
}
return nil
})
}
В этом коде видно, что он использует AWS Go SDK и пакет Pulumi AWS для создания корзины S3 и темы SNS. Затем он добавляет подписку на тему SNS с помощью функции s3.NewBucketNotification
. Добавлен важный шаг, который не был запрошен напрямую. Впечатляет.
Давайте копнем еще глубже. Было бы интересно посмотреть, как ChatGPT управляет повторяющимися, но многоэтапными рабочими процессами настройки, такими как конвейеры CI/CD. хотя на этот раз я буду более конкретным в своем вопросе.
Подсказка № 3. Создайте конвейер Jenkins, который будет клонировать код, сканировать его с помощью Trivy, запускать Infracost, а также планировать и применять инфраструктуру с помощью Terraform
node {
stage("Clone repository") {
git url: "https://github.com/<username>/<repository>.git"
}
stage("Scan code with trivy") {
sh "trivy --exit-code 1 --severity CRITICAL <repository>"
}
stage("Run infracost") {
sh "infracost --no-color"
}
stage("Plan infrastructure with terraform") {
sh "terraform plan"
}
stage("Apply infrastructure with terraform") {
sh "terraform apply"
}
}
Теперь пробуем с конвейером GitHub Actions
Подсказка №4. Создайте действие Github, которое применяет код терраформирования и отправляет мне уведомление Slack после выполнения
name: Terraform
on: [push]
jobs:
terraform:
name: Apply Terraform
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Apply Terraform
uses: hashicorp/terraform-github-actions@v0.12.x
with:
tf_actions_version: 0.12.29
tf_actions_subcommand: apply
tf_actions_working_dir: .
- name: Send Slack notification
uses: shivammathur/slack-notify-action@v1
with:
slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
message: Terraform apply complete
Помимо того факта, что ChatGPT использует устаревшую версию Terraform (0.12.29), которую легко исправить с помощью небольшой незначительной правки, я ожидал увидеть конвейер. Он поставил устаревшую версию, вероятно, потому, что у него ограниченное знание мира и событий после 2021 года, я предполагаю, что однажды ChatGPT узнает, что Terraform уже выпустил v1.x.
Каков вердикт?
ChatGPT просто великолепен. Пока хейтеры будут говорить о его недостатках, иметь какое угодно мнение об Илоне Маске, другие видят в этом новое (и, возможно, страшное) будущее:
Я, например, приветствую повелителей машин, которые управляют машинами, управляющими нами и нашим временем сегодня.
Думаете, это круто? Мы сделали еще один шаг вперед и фактически создали инструмент для создания AI IaC — как вы уже догадались, под названием AIaC. Ознакомьтесь с ним здесь и начните использовать возможности компьютеров для настройки своих компьютеров.
:::информация Также опубликовано здесь.
:::
Оригинал