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

CDK with ChatGPT

CDK with ChatGPT

Yusuke Shimizu

March 30, 2023
Tweet

More Decks by Yusuke Shimizu

Other Decks in Technology

Transcript

  1. JAWS-UG
    大阪「IAC
    を語りたい(仮)」
    CDK
    WITH
    CHATGPT
    志水 友輔

    View Slide

  2. CDK with ChatGPT
    志水 友輔 (しみず ゆうすけ)
    NRI
    ネットコム / CLOUD ARCHITECT
    AWS Top Engineer(2021)
    APN ALL AWS Certifications Engineers
    (2021/2022)
     AWS CDK, Cloud9
    SysOps
    試験本書きました
    Blog:

    View Slide

  3. CDK with ChatGPT
    AWS Cloud Development
    Kit(CDK)とは クラウドアプリケーションのインフラストラクチャ
    を定義し、プロビジョニングするためのオープンソ
    ースのソフトウェア開発キット
    クラウドアプリのIaC
    開発者は、インフラストラクチャの変更を追跡しや
    すくなり、バージョン管理とコードレビューが容易
    使い慣れたプログラミング言語で記述
    AWS
    リソースのためのコンストラクトと呼ばれる高
    レベルなコンポーネントを提供し、開発者がリソー
    スの作成と構成を簡単に行うことができる
    コンストラクトで簡単に構築

    View Slide

  4. CDK with ChatGPT
    ChatGPTとは
    OpenAI
    が2022
    年11
    月に公開した人工知能(AI)
    チャットボット。自然で意味のある文章を生成する
    ことができる
    人工知能チャットボット
    自然言語処理(NLP
    )タスクに優れており、質問へ
    の回答や文章の要約や翻訳はもちろん、コード生成
    やコードの説明など開発者の助けも可能
    開発者としても有用
    ChatGPT
    は、2021
    年9
    月までの最新技術をベースに
    しており、それ以降の最新技術については、継続的
    にアップデートされることが期待される
    知識の限界

    View Slide

  5. CDK with ChatGPT
    やばっ
    ChatGPTとは

    View Slide

  6. CDK with ChatGPT
    CDK
    書いてる
    場合じゃない
    ChatGPTとは

    View Slide

  7. CDK with ChatGPT
    プロンプト書こ
    ChatGPTとは

    View Slide

  8. CDK with ChatGPT
    プロンプトは、
    ChatGPT
    で対話を
    行うための
    インターフェース
    のことやで
    ChatGPTとは

    View Slide

  9. 朝9
    時に起動するLambda
    ChatGPT
    で書いてこ

    View Slide

  10. CDK with ChatGPT
    INPUT OUTPUT

    Python
    を使用してAWS CDK

    EventBridge
    を利用し、日本時間の
    朝9
    時に"Hello ChatGPT"
    を返す
    Lambda
    関数が実行される
    サーバレスアーキテクチャを構築する
    方法を教えて
    VSCode
    、Microsoft
    、https://azure.microsoft.com/ja-jp/products/visual-studio-code

    View Slide

  11. CDK with ChatGPT
    INPUT OUTPUT

    Python
    を使用してAWS CDK

    EventBridge
    を利用し、日本時間の
    朝9
    時に"Hello ChatGPT"
    を返す
    Lambda
    関数が実行される
    サーバレスアーキテクチャを構築する
    方法を教えて
    言語をPython
    に指定
    日本時間の9
    時(UTC0
    時)に
    なってる
    Rule
    とFunction

    紐付けしてる
    VSCode
    、Microsoft
    、https://azure.microsoft.com/ja-jp/products/visual-studio-code

    View Slide

  12. CDK with ChatGPT
    OUTPUT2 OUTPUT3
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28
    VSCode
    、Microsoft
    、https://azure.microsoft.com/ja-jp/products/visual-studio-code

    View Slide

  13. CDK with ChatGPT
    OUTPUT2 OUTPUT3
    CDK
    コードに沿った手順
    Lambda
    の場所やファイル名 body
    でHello ChatGPT

    返してる
    handler
    名もCDK
    と合ってる
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28
    VSCode
    、Microsoft
    、https://azure.microsoft.com/ja-jp/products/visual-studio-code

    View Slide

  14. CDK with ChatGPT
    OUTPUT4
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  15. CDK with ChatGPT
    OUTPUT4 RESULT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  16. CDK with ChatGPT
    OUTPUT4 RESULT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    ERROR!!!
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  17. CDK with ChatGPT
    OUTPUT4 RESULT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  18. CDK with ChatGPT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    core
    のインポートが出来ない
    OUTPUT4 RESULT
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  19. CDK with ChatGPT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    core
    パッケージはv1
    のみ
    v1
    は2023/06
    にサポート終了
    OUTPUT4 RESULT
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  20. CDK with ChatGPT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    core
    パッケージはv1
    のみ
    v1
    は2023/06
    にサポート終了
    OUTPUT4 RESULT
    CDK v2
    化を実施
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  21. CDK with ChatGPT
    修正方法
    v1->v2
    移行の方法:ChatGPT
    は知らない
    AWS
    ドキュメントを参考
    https://docs.aws.amazon.com/ja_jp/cdk/v2
    /guide/migrating-v2.html
    cdk-sample
    の修正を参考
    https://github.com/aws-samples/aws-cdk-
    examples/commit/b6d65ac3c105b68b583a8
    7da8f2e7c4def1e980a#diff-
    d4d60597adf6490245ba6583d79eea5135cf8
    82b45b2dcc7cf32a78e8463b1bb

    View Slide

  22. CDK with ChatGPT
    修正内容 差分
    パッケージ修正
    core
    削除
    aws_cdk
    にApp,Stack
    を追加
    constructs
    のConstruct
    を追加
    コード修正
    core.
    を削除
    asset->from_asset
    へ変更
    VSCode
    、Microsoft
    、https://azure.microsoft.com/ja-jp/products/visual-studio-code

    View Slide

  23. CDK with ChatGPT
    デプロイ完了 起動確認

    View Slide

  24. CDK with ChatGPT
    $ cdk deploy
    Traceback (most recent call last):
    File
    "/Users/yusuku_shimizu/git/codecommit/shimi
    zu-chatgpt/app.py", line 1, in
    from aws_cdk import core
    ImportError: cannot import name 'core' from
    'aws_cdk'
    (/Users/yusuku_shimizu/git/codecommit/shimiz
    u-chatgpt/.venv/lib/python3.9/site-
    packages/aws_cdk/__init__.py)
    Subprocess exited with error 1
    OUTPUT4 RESULT
    何故v1
    を提示するの?
    →ChatGPT
    の知識が2021/09
    まで
    ChatGPT
    、OpenAI
    、https://openai.com/blog/chatgpt
    、アクセス日:2023/03/28

    View Slide

  25. CDK/ChatGPTの歴史
    エラー原因
    2019/07
    CDK v1
    公開
    2023/03
    GPT-4
    公開
    2022/11
    ChatGPT
    公開
    2020/06
    GPT-3
    公開
    2019/02
    GPT-2
    公開
    2018/06
    GPT
    公開
    2021/12
    CDK v2
    公開
    2021/09
    ChatGPT

    知識限界
    2023/06
    CDK v1
    サポート終了
    2021/10/06
    CDK v1.126.0

    View Slide

  26. CDK/ChatGPTの歴史
    エラー原因
    2019/07
    CDK v1
    公開
    2023/03
    GPT-4
    公開
    2022/11
    ChatGPT
    公開
    2020/06
    GPT-3
    公開
    2019/02
    GPT-2
    公開
    2018/06
    GPT
    公開
    2021/12
    CDK v2
    公開
    2021/09
    ChatGPT

    知識限界
    2023/06
    CDK v1
    サポート終了
    2021/10/06
    CDK v1.126.0

    View Slide

  27. CDK/ChatGPTの歴史
    エラー原因
    2019/07
    CDK v1
    公開
    2023/03
    GPT-4
    公開
    2022/11
    ChatGPT
    公開
    2020/06
    GPT-3
    公開
    2019/02
    GPT-2
    公開
    2018/06
    GPT
    公開
    2021/12
    CDK v2
    公開
    2021/09
    ChatGPT

    知識限界
    2023/06
    CDK v1
    サポート終了
    2021/10/06
    CDK v1.126.0

    View Slide

  28. CDK/ChatGPTの歴史
    エラー原因
    2019/07
    CDK v1
    公開
    2023/03
    GPT-4
    公開
    2022/11
    ChatGPT
    公開
    2020/06
    GPT-3
    公開
    2019/02
    GPT-2
    公開
    2018/06
    GPT
    公開
    2021/12
    CDK v2
    公開
    2021/09
    ChatGPT

    知識限界
    2023/06
    CDK v1
    サポート終了
    2021/10/06
    CDK v1.126.0
    ChatGPT
    はCDK v2
    のコードを学習できていない
    提示されるコードは基本的にv1

    View Slide

  29. 改善サイクルを回す
    ChatGPT
    で書いてこ

    View Slide

  30. CDK with ChatGPT
    Fail
    Pass
    Fail
    flake8
    cdk-nag
    普段の開発サイクル
    自動チェックサイクル
    セキュリティチェック
    静的解析

    View Slide

  31. CDK with ChatGPT
    Fail
    Pass
    Fail
    flake8
    cdk-nag
    普段の開発サイクル
    Fail->Pass
    が大変

    View Slide

  32. CDK with ChatGPT
    Fail
    Pass
    Fail
    flake8
    cdk-nag
    普段の開発サイクル
    Fail->Pass
    が大変
    ChatGPT

    View Slide

  33. CDK with ChatGPT
    $ flake8 app.py
    app.py:9:1: E302 expected 2 blank lines, found 1
    app.py:26:80: E501 line too long (99 > 79
    characters)
    LINT
    指摘内容
    空行が2
    個必要
    1
    行にある文字数が多すぎる

    View Slide

  34. CDK with ChatGPT
    プロンプト 修正
    $ flake8 app.py | echo $0
    0
    修正内容(from ChatGPT)
    修正結果
    クラス定義の前に2
    つの空白行を追加しました
    (
    行 9)

    EventBridge
    ルールの定義において、長い行を改
    行して整形しました (
    行 26)

    変更点:
    1.
    2.
    下記がコード内容とそれに対するflake8
    の指摘内容
    です。指摘を直すようにコードを修正して。
    ・コードの内容
    コードをコピる
    ・指摘内容
    app.py:9:1: E302 expected 2 blank lines, found 1
    app.py:26:80: E501 line too long (99 > 79
    characters)

    View Slide

  35. CDK with ChatGPT
    プロンプト 修正
    $ flake8 app.py | echo $0
    0
    修正内容(from ChatGPT)
    修正結果
    クラス定義の前に2
    つの空白行を追加しました
    (
    行 9)

    EventBridge
    ルールの定義において、長い行を改
    行して整形しました (
    行 26)

    変更点:
    1.
    2.
    flake8
    は問題
    なし
    下記がコード内容とそれに対するflake8
    の指摘内容
    です。指摘を直すようにコードを修正して。
    ・コードの内容
    コードをコピる
    ・指摘内容
    app.py:9:1: E302 expected 2 blank lines, found 1
    app.py:26:80: E501 line too long (99 > 79
    characters)

    View Slide

  36. CDK with ChatGPT
    $ cdk diff
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLa
    mbda/ServiceRole/Resource] AwsSolutions-
    IAM4[Policy::arn:
    :iam::aws:policy/service-
    role/AWSLambdaBasicExecutionRole]: The IAM
    user, role, or group uses AWS managed policies.
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLa
    mbda/Resource] AwsSolutions-L1: The non-
    container Lambda function is not configured to
    use the latest runtime version.
    Found errors
    cdk-nag
    指摘内容
    IAM
    のマネージドポリシーを使ってる
    最新のRuntime
    を利用していない

    View Slide

  37. CDK with ChatGPT
    プロンプト 修正
    下記がコード内容とそれに対するcdk-nag
    の指摘内
    容です。指摘を直すようにコードを修正して。
    ・コードの内容
    コードをコピる
    ・指摘内容
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLambda/ServiceRol
    e/Resource] AwsSolutions-IAM4[Policy::arn:
    :iam::aws:policy/service-
    role/AWSLambdaBasicExecutionRole]: The IAM user, role, or
    group uses AWS managed policies.
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLambda/Resource]
    AwsSolutions-L1: The non-container Lambda function is not
    configured to use the latest runtime version.
    $ cdk diff
    ...
    hello_chatgpt_lambda.role = lambda_role
    AttributeError: can't set attribute
    Subprocess exited with error 1
    修正内容(from ChatGPT)
    修正結果
    Lambda
    関数のランタイムをPython 3.9
    に更新し
    ました (
    行 21)

    AWS
    マネージドポリシーの代わりに、カスタム
    ポリシーを作成し、Lambda
    関数に関連付けられ
    たロールにアタッチしました (
    行 25-45)

    変更点:
    1.
    2.

    View Slide

  38. CDK with ChatGPT
    プロンプト 修正
    下記がコード内容とそれに対するcdk-nag
    の指摘内
    容です。指摘を直すようにコードを修正して。
    ・コードの内容
    コードをコピる
    ・指摘内容
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLambda/ServiceRol
    e/Resource] AwsSolutions-IAM4[Policy::arn:
    :iam::aws:policy/service-
    role/AWSLambdaBasicExecutionRole]: The IAM user, role, or
    group uses AWS managed policies.
    [Error at
    /ServerlessEventBridgeExample/HelloChatGPTLambda/Resource]
    AwsSolutions-L1: The non-container Lambda function is not
    configured to use the latest runtime version.
    $ cdk diff
    ...
    hello_chatgpt_lambda.role = lambda_role
    AttributeError: can't set attribute
    Subprocess exited with error 1
    修正内容(from ChatGPT)
    修正結果
    Lambda
    関数のランタイムをPython 3.9
    に更新し
    ました (
    行 21)

    AWS
    マネージドポリシーの代わりに、カスタム
    ポリシーを作成し、Lambda
    関数に関連付けられ
    たロールにアタッチしました (
    行 25-45)

    変更点:
    1.
    2.
    ERROR!!!

    View Slide

  39. CDK with ChatGPT
    プロンプト 修正
    `
    hello_chatgpt_lambda.role = lambda_role`
    の部分で
    `
    AttributeError: can't set attribute`
    というエラーが出ました。修正して
    $ cdk deploy
    ...
    ✅ ServerlessEventBridgeExample
    ✨ Deployment time: 72.48s
    ...
    修正内容(from ChatGPT)
    修正結果
    _lambda.Function
    の定義を更新して、role
    パラ
    メータに lambda_role
    を割り当てました (
    行 34-
    40)

    Lambda
    関数の定義をロールの定義の後に移動し
    ました。
    変更点:
    1.
    2.

    View Slide

  40. CDK with ChatGPT
    プロンプト 修正
    `
    hello_chatgpt_lambda.role = lambda_role`
    の部分で
    `
    AttributeError: can't set attribute`
    というエラーが出ました。修正して
    $ cdk deploy
    ...
    ✅ ServerlessEventBridgeExample
    ✨ Deployment time: 72.48s
    ...
    修正内容(from ChatGPT)
    修正結果
    _lambda.Function
    の定義を更新して、role
    パラ
    メータに lambda_role
    を割り当てました (
    行 34-
    40)

    Lambda
    関数の定義をロールの定義の後に移動し
    ました。
    変更点:
    1.
    2.
    cdk_nag

    いけた!

    View Slide

  41. CDK with ChatGPT
    flake8 cdk-nag
    エラー内容の修正はChatGPT
    で可能
    そもそもエラー自体も少なかった
    ChatGPT
    で出来たコードがある程度質
    が高い可能性有り
    簡単な構成な可能性もある
    エラー内容の修正は一発では出来なかった
    が可能
    指摘内容はよくあるものだったので、極端
    にできているコードの質が悪いことではな

    バージョンの指摘はPython3.9

    2021/09
    以降で適用されたため
    指摘後のエラーも会話を続けて修正しても
    らえれば継続的に修正可能

    View Slide

  42. まとめ
    ChatGPT
    でコーディング速度アップ
    AWS CDK
    とChatGPT
    を組み合わせることで、迅速かつ正確
    なAWS
    インフラストラクチャの作成が可能
    オールインワンの回答がもらえる
    CDK
    コードでなく、CDK
    のインストール手順やLambda
    のコ
    ードも回答されるため、それを適用するだけで良い
    セキュリティが担保されたコードの生成
    flake8/cdk-nag
    に指摘されたものを伝えると良い感じのコー
    ドを出してくれるため、楽にセキュリティ担保可能

    View Slide