Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Y.Sumikura

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/