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
30
第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
第159回 雲勉 Amazon Bedrock でブラウザを操作する AI エージェントを作ってみた
iret
0
21
第157回 雲勉 AWSインフラ監視をNew Relicで行う際の個人的Tips
iret
0
37
第156回 雲勉 AWS on Windows入門
iret
0
71
第155回 雲勉 サーバレスアーキテクチャを 用いたコスト重視 AI サービス
iret
0
51
第154回 雲勉 AWS Codeシリーズ盛り上げ隊 ~ Codeシリーズは砕けない ~
iret
0
54
第153回 雲勉 トラシューが秒で終わる新機能 Amazon Q Developer operational investigations
iret
0
65
第150回 雲勉 AWS AppSyncではじめるGraphQL体験
iret
0
57
第151回 雲勉 プロジェクトのドキュメントにおける課題をAmazon Bedrockで解決してみる
iret
0
75
第152回 雲勉 シームレスなマルチリージョンへの移行と検討 ~Amazon EKSとAWS Global Acceleratorを使用した環境〜
iret
0
78
Other Decks in Technology
See All in Technology
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.3k
サーバシステムを無理なくコンテナ移行する際に伝えたい4つのポイント/Container_Happy_Migration_Method
ozawa
1
100
大規模サービスにおける カスケード障害
takumiogawa
3
520
Medmain FACTBOOK
akinaootani
0
120
ひまプロプレゼンツ 「エンジニア格付けチェック 〜春の公開収録スペシャル〜」
kaaaichi
0
150
モノリスの認知負荷に立ち向かう、コードの所有者という思想と現実
kzkmaeda
0
110
DevOps文化を育むQA 〜カルチャーバブルを生み出す戦略〜 / 20250317 Atsushi Funahashi
shift_evolve
1
110
Security response for open source ecosystems
frasertweedale
0
100
Amazon Q Developer 他⽣成AIと⽐較してみた
takano0131
1
120
OPENLOGI Company Profile for engineer
hr01
1
22k
Proxmox VE超入門 〜 無料で作れるご自宅仮想化プラットフォームブックマークする
devops_vtj
0
170
開発現場とセキュリティ担当をつなぐ脅威モデリング
cloudace
0
110
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
30k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
8
700
Facilitating Awesome Meetings
lara
53
6.3k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
The Language of Interfaces
destraynor
157
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
500
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Optimizing for Happiness
mojombo
377
70k
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