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
47
第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
第161回 雲勉 Amazon Kinesis Data Streams と Amazon Data Firehose を使ってみよう
iret
0
17
第160回 雲勉 それ、AWS Step Functions で置き換えれん?
iret
0
49
第159回 雲勉 Amazon Bedrock でブラウザを操作する AI エージェントを作ってみた
iret
0
64
第157回 雲勉 AWSインフラ監視をNew Relicで行う際の個人的Tips
iret
0
49
第156回 雲勉 AWS on Windows入門
iret
0
84
第155回 雲勉 サーバレスアーキテクチャを 用いたコスト重視 AI サービス
iret
0
60
第154回 雲勉 AWS Codeシリーズ盛り上げ隊 ~ Codeシリーズは砕けない ~
iret
0
64
第153回 雲勉 トラシューが秒で終わる新機能 Amazon Q Developer operational investigations
iret
0
72
第150回 雲勉 AWS AppSyncではじめるGraphQL体験
iret
0
72
Other Decks in Technology
See All in Technology
Sleep-time Compute: LLM推論コスト削減のための事前推論
sergicalsix
1
130
大規模サーバーレスプロジェクトのリアルな零れ話
maimyyym
3
230
Software Architecture in an AI-Driven World
atty303
31
13k
Ruby on Rails の楽しみ方
morihirok
6
2.4k
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
130
Part1 GitHubってなんだろう?その1
tomokusaba
3
800
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
440
Part1 GitHubってなんだろう?その2
tomokusaba
2
780
genspark_presentation.pdf
haruki_uiru
1
260
UIパフォーマンス最適化: AIを活用して100倍の速度向上を実現した事例
kinocoboy2
0
290
dbtとリバースETLでデータ連携の複雑さに立ち向かう
morookacube
0
870
Ninno LT
kawaguti
PRO
1
120
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
A designer walks into a library…
pauljervisheath
205
24k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Statistics for Hackers
jakevdp
799
220k
RailsConf 2023
tenderlove
30
1.1k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
120
52k
The Cult of Friendly URLs
andyhume
78
6.4k
Become a Pro
speakerdeck
PRO
28
5.3k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
GitHub's CSS Performance
jonrohan
1031
460k
4 Signs Your Business is Dying
shpigford
183
22k
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