Отношение к DevOps как к Skynet с ChatGPT

Отношение к DevOps как к Skynet с ChatGPT

24 декабря 2022 г.

Если вы были в Интернете за последний месяц, вы, вероятно, слышали о ChatGPT. OpenAI объявила о следующем поколении своей модели искусственного интеллекта для обработки естественного языка под названием ChatGPT, с которой вы можете общаться практически на любую тему на свете.

Люди обновляют свои аватары аватарами, сгенерированными искусственным интеллектом на основе подсказок, созданных ChatGPT, и публикуют бесконечные снимки экрана, демонстрируя свое недоверие к качеству и широте знаний ChatGPT.

Вот лишь несколько примеров того, на что способен ChatGPT:

н

https://twitter.com/Grady_Booch/status/1600623026730545153 п

Одной из областей, которая действительно покорила технологическую индустрию, является способность ChatGPT писать код. Некоторые даже утверждали, что он заменит Google и Stack Overflow. Нам это показалось интересным, и мы хотели посмотреть, как это работает с конфигурацией инфраструктуры. Поэтому мы взяли ChatGPT на тест-драйв.

https://twitter.com/ErikSchluntz/status/1600290313276645376

Одна из самых больших ценностей, которая волнует людей в этом ИИ следующего поколения, на самом деле заключается в том, как он справляется с повторяющимися и рутинными задачами, с которыми инженеры ненавидят иметь дело. Одной из таких областей являются шаблоны 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. Ознакомьтесь с ним здесь и начните использовать возможности компьютеров для настройки своих компьютеров.

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE