Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第158回 雲勉 AWS CDK 入門 ~ プログラミング言語で書くインフラ Python 編 ~
Search
iret.kumoben
March 27, 2025
Technology
0
110
第158回 雲勉 AWS CDK 入門 ~ プログラミング言語で書くインフラ Python 編 ~
下記、勉強会での資料です。
https://youtu.be/ONK1osWVtT0
iret.kumoben
March 27, 2025
Tweet
Share
More Decks by iret.kumoben
See All by iret.kumoben
第174回 雲勉 Google Agentspace × ADK Vertex AI Agent Engineにデプロイしたエージェントを呼び出す
iret
0
21
第173回 雲勉 ノーコードで生成 AI アプリを構築!Google Cloud AI Applications(旧 Vertex AI Agent Builder)入門
iret
0
48
第170回 雲勉 Lyria が切り拓く音楽制作の未来
iret
1
27
第169回 雲勉 AWS WAF 構築 RTA
iret
0
35
第168回 雲勉 JITNAの使い方とハマったポイントについて語る回
iret
0
39
第167回 雲勉 エージェント開発を加速する Agent Development Kit 入門
iret
1
52
第166回 雲勉 コードを読んで理解する AWS Amplify Gen2 Backend
iret
0
45
第165回 雲勉 Google Agentspace について
iret
0
65
第164回 雲勉 Agent Development Kit と MCP Toolbox for Databases で MCP 連携してみた
iret
1
130
Other Decks in Technology
See All in Technology
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
AWSで推進するデータマネジメント
kawanago
1
1.3k
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
210
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
530
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
440
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
440
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
380
テストを軸にした生き残り術
kworkdev
PRO
0
190
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
210
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
400
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
6
750
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
110
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Unsuck your backbone
ammeep
671
58k
Code Review Best Practice
trishagee
70
19k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Facilitating Awesome Meetings
lara
55
6.5k
Producing Creativity
orderedlist
PRO
347
40k
Visualization
eitanlees
148
16k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Fireside Chat
paigeccino
39
3.6k
Optimizing for Happiness
mojombo
379
70k
Context Engineering - Making Every Token Count
addyosmani
1
31
Transcript
第158回 雲勉 〜プログラミング言語で書くインフラ Python編〜 AWS CDK 入門
講師自己紹介 2 ◼ 西川 真由 • 所属:クラウドインテグレーション事業部 ソリューション開発セクション 第二開発グループ •
経歴: 2年、アイレット歴: 2年 • 一言: 最近春めいてきて嬉しい • ご質問は YouTubeのコメント欄で受け付けております。 後日回答させていただきます!
アジェンダ 3 1. 本日のゴール 2. AWS CDKについて 3. AWS CDKを書いてみる
4. まとめ
1. 本日のゴール 4
1.本日のゴール 5 CDKが出来る気がする! と思えるようになること お気づきでしょうか... C D K CDKが 出来る
気がする!
1.本日のゴール 6 話すこと・話さないこと 話すこと 話さないこと • AWS CDKとは何か • IaCツールを使うメリット
• AWS CDKの仕組み • AWS CDKの構成概念 • コード例 • 値の設定についての詳細な説明 • AWS CloudFormationとの記述の比較
2. AWS CDKについて 7
2. AWS CDKについて 8 ◼ AWS CDKとは 1. AWS Cloud
Development Kit AWS環境におけるクラウド開発で使用するツール
2. AWS CDKについて 9 ◼ AWS CDKとは 2. AWSが提供するInfrastructure as
Code(IaC)ツールの1つ • インフラ構成をコードで管理し、プロビジョニングまで行うプロセス • 手順書代わりになる。また、変更内容の手順書への反映漏れなどにより実環境と 手順書の内容が異なるといった人的なミスやブラックボックス化を防げる。 • Gitなどでバージョン管理することが出来る。 • コード化することで同じ構成を使い回しすることができる。 • 一度作った構成を共有しやすいのでチームや会社の資産となる。 • IaCを使うメリット • CI/CDには欠かせないツール
2. AWS CDKについて 10 ◼ AWS CDKとは 3.プログラミング言語でAWSリソースを定義できるのが最大の特徴 • 使用可能な言語
⋯ TS, JS, Python, Java, .NET, Go つまり • 開発者にとっては普段使っている言語でリソースを定義できるので学習コストが低い • プログラミング言語なので、IDEのコード補完や型チェックなどが使える • YAMLなどより短く書ける。ソースの可読性が高い • 抽象化されたライブラリを組み合わせることで、複雑な構成も構築可能
2. AWS CDKについて 11 ◼ AWS CDKを使うメリットは… • 手順書代わりになる。また、変更内容の手順書への反映漏れなどにより実環境と手順 書の内容が異なるといった人的なミスやブラックボックス化を防げる
• Gitなどでバージョン管理することが出来る • コード化することで同じ構成を使い回しすることができる • 一度作った構成を共有しやすいのでチームや会社の資産となる • 使用可能な言語 ⋯ TS, JS, Python, Java, .NET, Go • 開発者にとっては普段使っている言語でリソースを定義できるので学習コストが低い • プログラミング言語なので、IDEのコード補完や型チェックなどが使える • YAMLなどより短く書ける。ソースの可読性が高い • 抽象化されたライブラリを組み合わせることで、複雑な構成も構築可能 IaCのメリット AWS CDKの付加価値
2. AWS CDKについて 12 ◼ プロビジョニングまでの流れ 1. インフラ構成をプログラミング言語で定義 開発者が実行することはたった2つだけ 2.
デプロイコマンドの実行
2. AWS CDKについて 13 もう少し詳しく
2. AWS CDKについて 14 ◼ プロビジョニングまでの流れ https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf 1. インフラ構成をプログラミング言語で定義 コンストラクトライブラリ
TSで書かれた単一のコー ドベースを各言語にコンパ イルして提供されている
2. AWS CDKについて 15 ◼ プロビジョニングまでの流れ https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf 2. デプロイコマンドの実行 a.
AWS CDK CLIがAWS CloudFormationのテンプ レートを合成(Synthesize) し、テンプレートを実行 b. AWS CDK CLIがアセッ トをバンドル
2. AWS CDKについて 16 ◼ プロビジョニングまでの流れ https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf 2. デプロイコマンドの実行 a.
AWS CloudFormationが 各リソースのAPIを呼び出 し、テンプレートの状態に 収束するよう操作する b. CDK CLIがアセットをデ プロイ デプロイ完了
2. AWS CDKについて 17 ◼ プロビジョニングまでの流れ(おさらい) 1. インフラ構成をプログラミング言語で定義 開発者が実行することはたった2つだけ 2.
デプロイコマンドの実行
3. AWS CDKを書いてみる 18
3. AWS CDKを書いてみる 19 まずはコードの構成概念の理解から
3.AWS CDKを書いてみる 20 ◼ 構成概念 https://docs.aws.amazon.com/cdk/v2/guide/home.html Construct ・AWS CDKにおける 基本的なビルディングブロック
・AWS CloudFormationリソースと その設定を表すコンポーネント ・ユーザーにより定義・配布が可能 ・ConstructにはL1、L2、L3という レベル分けがある。 L1…AWS CloudFormationテンプレートをそのまま コード化したもの L2…適切な初期値が設定されたもの。リソースごとに 設定されているメソッドが利用可能になり、可読性が 上がる。一番よく使われる。 L3…よくあるパターンをより簡略化したもの
3.AWS CDKを書いてみる 21 ◼ 構成概念 https://docs.aws.amazon.com/cdk/v2/guide/home.html Stack ・AWS CloudFormationの スタックに該当
・デプロイ可能な最小単位 ・関連するリソースを1つの グループとして管理しやすくなる ・AWS CloudFormationで複数スタッ クのアプリを一括デプロイする場合、 依存関係を考慮し順番を shell script などで指定する必要があったが、 AWS CDKでは自動解決してくれる ・Stageを継承し複数のスタックを まとめることで環境の複製も可能
3.AWS CDKを書いてみる 22 ◼ 構成概念 https://docs.aws.amazon.com/cdk/v2/guide/home.html App ・アプリケーション全体 ・複数アカウント・リージョンを 跨ぐことができる
3. AWS CDKを書いてみる 23 次に開発環境の準備
3.AWS CDKを書いてみる 24 ◼ 準備 • AWS CDK CLIをインストール
3.AWS CDKを書いてみる 25 ◼ 準備 Pythonの場合、仮想環境をactivateしてAWS CDK関連のライブラリをpip installする。 • AWS
CDK プロジェクトの作成
3.AWS CDKを書いてみる 26 ◼ 準備 hello-cdk ├── .venv ├── hello_cdk
│ ├── __init__.py │ └── hello_cdk_stack.py ├── tests │ └── __init__.py │ └──unit │ ├── __init__.py │ └── hello_cdk_stack.py ├── .git ├── .gitignore ├── app.py ├── cdk.json ├── README.md ├── requirements-dev.txt ├── requirements.txt └── source.bat • AWS CDK プロジェクトの作成 hello-cdkディレクトリにプロジェクトが作成される スタックを定義するファイル スタッククラス内に1〜複数コンストラクトを定義 エントリーポイントとなるファイル appを作成し、appにスタックを追加する。
3.AWS CDKを書いてみる 27 ◼ 準備 アカウントidとregionは以下コマンドで調べられます(your-profile-nameの部分には各自環境 に合うものを指定) 実稼働環境では対象環境の取 り違えによるデプロイミスを 防ぐ意味でもハードコードを
勧める • app.pyにAWS CDKスタックがデプロイされる環境を指定する
3.AWS CDKを書いてみる 28 ◼ 準備 ここまでで準備は完了。 あとはスタックにConstructを定義したりアセットを準備するだけ! • 環境をbootstrapする
3. AWS CDKを書いてみる 29 いよいよコードを書いていきます!
3.AWS CDKを書いてみる 30 ◼ デモ • AWS LambdaでAmazon DynamoDBに格納されているユーザーデータを取得す る構成
• Stageでdev環境とprd環境を複製
3.AWS CDKを書いてみる 31 ◼ デモ • ディレクトリ構成 hello-cdk ├── .venv
├── backend │ ├──api │ │ ├── runtime │ │ │ └── lambda_handler.py │ │ ├── __init__.py │ │ └── api_stack.py │ ├── database │ │ ├── __init__.py │ │ └── database_stack.py │ └── component.py ├── app.py ├── cdk.json ├── README.md ├── requirements-dev.txt ├── requirements.txt └── source.bat コンポーネントの論理ユニットに基づいてプロジェクトディレ クトリ構造を整理することが推奨されている 今回はapiとdatabaseという論理ユニットでスタックを分離 環境の複製のために、Stageを継承したクラスにapi_stack.py、 database_stack.pyで定義したスタックのインスタンスを追加 実行するLambda関数のソースを配置
3.AWS CDKを書いてみる 32 ◼ デモ • /backend/api/api_stack.py AWS LambdaとAmazon API
Gatewayのリソースを定義
3.AWS CDKを書いてみる 33 ◼ デモ • /backend/database/database _stack.py Amazon DynamoDBのリソー
スを定義
3.AWS CDKを書いてみる 34 ◼ デモ • /backend/component.py Stageを継承したMyAppStage クラスに、DatabaseStackクラ ス・ApiStackクラスのインスタ
ンスを追加
3.AWS CDKを書いてみる 35 ◼ デモ • /app.py Stageを継承したMyAppStage クラスのインスタンスを作成。 この時、環境ごとに識別子と
envを割り当てる
3. AWS CDKを書いてみる 36 コードを書き終えたのであとはデプロイ
3.AWS CDKを書いてみる 37 ◼ デモ • デプロイコマンドの実行 cdk deploy …
全てのスタックをデプロイする cdk deploy “MyStackName” … 特定のスタックのみをデプロイする → cdk list で作成したスタックを一覧で確認することができる
3.AWS CDKを書いてみる 38 ◼ デモ • デプロイコマンドの実行 今回のデモではdev環境とprd環境を分けたので”cdk deploy “Dev/*”でデプロイします
この内容でデプロイするか聞かれるので、問題なければyesでデプロイへ進む
3.AWS CDKを書いてみる 39 ◼ デモ • プロビジョニング完了 デプロイが完了するとリソースが作成されます。Amazon DynamoDBに”testuser”という 項目を追加しLambda関数を実行すると、以下のように”testuser”を取得することができま
す。
4. まとめ 40
4.まとめ 41 • オブジェクト指向プログラミングの良いところをIaCに落とし込んだツール • シンプルでわかりやすくリソースを定義することができる • 環境の複製がかなり簡単にできる • デモでは実施しなかったですが、パラメータを指定してあげることで開発環境と本番環
境でAWS Lambdaの同時実行数やAmazon DynamoDBの課金モードを各々設定するこ とも出来る • AWS CDKすごいのに簡単で使いやすそう!と思っていただけたら嬉しいです
ご清聴いただきありがとうございました 42