Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

CDK with ChatGPT やばっ ChatGPTとは

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

CDK with ChatGPT INPUT OUTPUT 1 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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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 行にある文字数が多すぎる

Slide 34

Slide 34 text

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)

Slide 35

Slide 35 text

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)

Slide 36

Slide 36 text

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 を利用していない

Slide 37

Slide 37 text

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.

Slide 38

Slide 38 text

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!!!

Slide 39

Slide 39 text

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.

Slide 40

Slide 40 text

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 も いけた!

Slide 41

Slide 41 text

CDK with ChatGPT flake8 cdk-nag エラー内容の修正はChatGPT で可能 そもそもエラー自体も少なかった ChatGPT で出来たコードがある程度質 が高い可能性有り 簡単な構成な可能性もある エラー内容の修正は一発では出来なかった が可能 指摘内容はよくあるものだったので、極端 にできているコードの質が悪いことではな い バージョンの指摘はPython3.9 が 2021/09 以降で適用されたため 指摘後のエラーも会話を続けて修正しても らえれば継続的に修正可能

Slide 42

Slide 42 text

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