Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

第103回 雲勉【オンライン】インフラエンジニアにおける ChatGPT の便利な使い方と注意点

第103回 雲勉【オンライン】インフラエンジニアにおける ChatGPT の便利な使い方と注意点

Y.Sumikura

May 12, 2023
Tweet

More Decks by Y.Sumikura

Other Decks in Technology

Transcript

  1. ChatGPT-3.5 と ChatGPT-4 の違い
 今回の勉強会においては ChatGPT-4 のみを使っております。 ChatGPT-3.5 ChatGPT-4 料金

    無料 月額20ドル のプランで利用可能 ※ 有料 マルチタスク言語理解ベンチマーク 3ショットの正解率 70.1% 85.5% ※ より優秀
  2. 自己紹介 ▪ 平田 健士郎
 • クラウドインテグレーション事業部 構築第八セクション
 • 前職で MSP を

    2 年を経験してそこで初めて AWS に触れる
 • アイレット入社約1年半
 
 ←奥さんに描いてもらった似顔絵

  3. ChatGPT への命令文 (プロンプト) API Gateway と ランタイムが Python の Lambda

    を使って HTTPS 接続したら "Hello ChatGPT" と表示するためのサー バーレスアーキテクチャを Terraform で構築する方法を教えて ください。
  4. ChatGPT への命令文 (プロンプト) API Gateway と ランタイムが Python の Lambda

    を使って HTTPS 接続したら "Hello ChatGPT" と表示するためのサー バーレスアーキテクチャを Terraform で構築する方法を教えて ください。 コードでインフラを構築できる IaC ツールです。 コードで一度定義すれば作成/削除が簡単に行えるため、 今回は ChatGPT に Terraform のコードを生成してもらい そのコードを使って環境を作成します。
  5. API Gateway と ランタイムが python の Lambda を使って HTTPS 接

    続したら "Hello ChatGPT" と表示するためのサーバーレスアーキテク チャを Terraform で構築する方法を教えてください。 Lambda と API Gateway で サーバーレスアーキテクチャが作れるという知識はあるけど 実際にどうやって作ればいいか分からないなー 言語化
  6. 出来上がったもの resource "aws_api_gateway_rest_api" "api" { name = "hello_chatgpt_api" } resource

    "aws_api_gateway_resource" "resource" { rest_api_id = aws_api_gateway_rest_api.api.id parent_id = aws_api_gateway_rest_api.api.root_resource_id path_part = "hello" } resource "aws_api_gateway_method" "method" { rest_api_id = aws_api_gateway_rest_api.api.id resource_id = aws_api_gateway_resource.resource.id http_method = "GET" authorization = "NONE" } resource "aws_api_gateway_integration" "lambda" { rest_api_id = aws_api_gateway_rest_api.api.id resource_id = aws_api_gateway_resource.resource.id http_method = aws_api_gateway_method.method.http_method integration_http_method = "POST" type = "AWS_PROXY" uri = aws_lambda_function.hello_chatgpt.invoke_arn } resource "aws_api_gateway_deployment" "deployment" { depends_on = [aws_api_gateway_integration.lambda] rest_api_id = aws_api_gateway_rest_api.api.id stage_name = "prod" } output "api_gateway_invoke_url" { value = "https://${aws_api_gateway_rest_api.api.id}.execute-api.${var.region}.amazonaws.com/prod/hello" } main.tf の API Gateway 部分
  7. 出来上がったもの resource "aws_lambda_function" "hello_chatgpt" { function_name = "hello_chatgpt" handler =

    "lambda_function.lambda_handler" runtime = "python3.8" role = aws_iam_role.lambda_exec.arn filename = "lambda_function.zip" tags = { Name = "hello_chatgpt" } } resource "aws_iam_role" "lambda_exec" { name = "lambda_exec" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "lambda.amazonaws.com" } } ] }) } resource "aws_iam_role_policy_attachment" "lambda_exec" { policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" role = aws_iam_role.lambda_exec.name } resource "aws_lambda_permission" "apigw" { statement_id = "AllowAPIGatewayInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.hello_chatgpt.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/${aws_api_gateway_method.method.http_method}${aws_api_gateway_resourc e.resource.path}" } main.tf の Lambda 部分
  8. 出来上がったもの resource "aws_lambda_function" "hello_chatgpt" { function_name = "hello_chatgpt" handler =

    "lambda_function.lambda_handler" runtime = "python3.8" role = aws_iam_role.lambda_exec.arn filename = "lambda_function.zip" tags = { Name = "hello_chatgpt" } } resource "aws_iam_role" "lambda_exec" { name = "lambda_exec" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "lambda.amazonaws.com" } } ] }) } resource "aws_iam_role_policy_attachment" "lambda_exec" { policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" role = aws_iam_role.lambda_exec.name } resource "aws_lambda_permission" "apigw" { statement_id = "AllowAPIGatewayInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.hello_chatgpt.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/${aws_api_gateway_method.method.http_method}${aws_api_gateway_resourc e.resource.path}" } main.tf の Lambda 部分 Chat GPT に Terraform コードの説明をして もらうことも可能
  9. 出来上がったもの resource "aws_lambda_function" "hello_chatgpt" { function_name = "hello_chatgpt" handler =

    "lambda_function.lambda_handler" runtime = "python3.8" role = aws_iam_role.lambda_exec.arn filename = "lambda_function.zip" tags = { Name = "hello_chatgpt" } } resource "aws_iam_role" "lambda_exec" { name = "lambda_exec" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "lambda.amazonaws.com" } } ] }) } resource "aws_iam_role_policy_attachment" "lambda_exec" { policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" role = aws_iam_role.lambda_exec.name } resource "aws_lambda_permission" "apigw" { statement_id = "AllowAPIGatewayInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.hello_chatgpt.function_name principal = "apigateway.amazonaws.com" source_arn = "${aws_api_gateway_rest_api.api.execution_arn}/*/${aws_api_gateway_method.method.http_method}${aws_api_gateway_resourc e.resource.path}" } main.tf の Lambda 部分 ChatGPT の便利な使い方① 出来上がったリソースを マネジメントコンソール で確認して Terraform のコードと見比べることで 自分が作りたいものを作るには何をすればいいかが学習できる!
  10. お片付けも簡単! $ terraform destroy Destroy complete! Resources: 9 destroyed. terraform

    destroy コマンドで作成したリソースも簡単に削除 できる
  11. New Relic の NRQL 作成 New Relic とは ・全世界17,000社以上が採用するシステムパフォーマンス管理ツール ・インフラの監視、アプリケーションのモニタリングなどを行う

    SaaS  ※ 弊社の運用保守サービスで利用しているため    例として使用させていただきます。 NRQL とは  ・New Relic のデータを操作するクエリ言語
  12. New Relic の NRQL 作成 例えば バーストパフォーマンスインスタンス EC2 インスタンスのクレジットを 監視するための

    NRQL が欲しい SELECT average(provider.cpuCreditBalance.Average) FROM ComputeSample WHERE provider = 'Ec2Instance' AND providerAccountName = 'Your AWS Account Name' AND instanceId = 'Your EC2 Instance ID' TIMESERIES
  13. New Relic の NRQL 作成 実行 値が取得できた SELECT average(provider.cpuCreditBalance.Average) FROM

    ComputeSample WHERE provider = 'Ec2Instance' AND providerAccountName = 'Your AWS Account Name' AND instanceId = 'Your EC2 Instance ID' TIMESERIES
  14. New Relic の NRQL 作成 ここからは学習 「average(`aws.ec2.CPUCreditBalance`) FROM Metric 〜」という

    書き方を想定していた SELECT average(provider.cpuCreditBalance.Average) FROM ComputeSample WHERE provider = 'Ec2Instance' AND providerAccountName = 'Your AWS Account Name' AND instanceId = 'Your EC2 Instance ID' TIMESERIES SELECT average(`aws.ec2.CPUCreditBalance`) FROM Metric WHERE awsAccountId = 'Your AWS Account ID' AND ec2InstanceId = 'Your EC2 Instance ID' TIMESERIES 出力された NRQL は以下
  15. New Relic の NRQL 作成 違いに気付く 以下の NRQL の違いがデータソースの違いであることに ChatGPT

    説明によって気付く SELECT average(provider.cpuCreditBalance.Average) FROM ComputeSample WHERE provider = 'Ec2Instance' AND providerAccountName = 'Your AWS Account Name' AND instanceId = 'Your EC2 Instance ID' TIMESERIES SELECT average(`aws.ec2.CPUCreditBalance`) FROM Metric WHERE awsAccountId = 'Your AWS Account ID' AND ec2InstanceId = 'Your EC2 Instance ID' TIMESERIES
  16. New Relic の NRQL 作成 データソースを Metric にして NRQL 作成を依頼

    SELECT average(`aws.ec2.CPUCreditBalance`) FROM Metric WHERE awsAccountId = 'Your AWS Account ID' AND ec2InstanceId = 'Your EC2 Instance ID' TIMESERIES
  17. New Relic の NRQL 作成 想定していた記法で 意図した値が取得できた SELECT average(`aws.ec2.CPUCreditBalance`) FROM

    Metric WHERE awsAccountId = 'Your AWS Account ID' AND ec2InstanceId = 'Your EC2 Instance ID' TIMESERIES
  18. New Relic の NRQL 作成 想定していた記法で 意図した値が取得できた と同時に NRQL についての

    知識がついた SELECT average(`aws.ec2.CPUCreditBalance`) FROM Metric WHERE awsAccountId = 'Your AWS Account ID' AND ec2InstanceId = 'Your EC2 Instance ID' TIMESERIES
  19. 新しい情報について main.tf の Lambda 部分 最近 GA された VPC Lattice

    について質問してみたところ。。。 現行の ChatGPT の学習データは 2021年9月 のもののため 回答ができない
  20. 新しくない情報でも。。。 main.tf の Lambda 部分 CloudWatch の「EBSByteBalance%」というメトリクスについて質問し たところ あります。 2018年の記事に記載があります。

    https://aws.amazon.com/jp/blogs/compute/improving-application-performance-and-reducing-costs-with-amazon-ebs-optimized-instance-burst-capability/