Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWSのテスト技法とPolicy as Code / aws-testing-techniqu...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
geeawa
October 01, 2019
Technology
1.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWSのテスト技法とPolicy as Code / aws-testing-techniques-and-policy-as-a-code
geeawa
October 01, 2019
Transcript
49 slides
CircleCIで実現する AWSのテスト技法 と Policy as Code 2019.10.01 CircleCI User MeetUp
#7
淡路⼤輔 / INTEC @gee0awa 好きな技術 Serverless / React Native
Policy as Code?
の前に Infrastructure as Code
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ deploy Cloudformationによる例 deploy
テスト環境 本番環境
インフラの継続的デリバリ ・デプロイするまでインフラのテストができない ・誤ったセキュリティグループを作ってしまった ・Cloudformationの内部のエラーに遭遇しがち 課題
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ lint test deploy
テスト環境
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ lint test deploy
テスト環境 デプロイの前にどうやってテストをするのか
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ lint test deploy
テスト環境 デプロイの前にどうやってテストをするのか
https://github.com/aws-cloudformation/cfn-python-lint
※今回の資料ではcfn-lintの説明には不要であるため、キャッシュの設定などは記述していません .circleci/config.yml
VSCode上での実⾏イメージ
⾜りないルールがあればPullRequestを出そう
cfn-python-lint だけでは不⼗分 ・誤ったセキュリティグループを作らないようにしたい ・iam:*などの権限の強いポリシーを作らせたくない ・リソースの説明⽂やタグを必ず付けさせたい チームでの取り決め(ポリシー)をどう担保するか
Policy as Code コードが決められたポリシーに従っているかテストする
YAMLをテストする
YAMLを静的構⽂解析する テストコード
取り決め(ポリシー)が 守られているかテストする
jestなどのテストフレームワークを 使⽤してテンプレートのポリシーチェックをする .circleci/config.yml
Policy as Code ・誤ったセキュリティグループを作らない ・iam:*などの権限の強いポリシーを作らせない ・リソースの説明⽂やタグを必ず付けさせる
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ lint test deploy
テスト環境 デプロイの前にどうやってテストをするのか
AWSのリソースを使⽤した アプリケーションをどうテストするか
"84αʔϏεΛ༻ͨ͠ߏྫ アップロードされたファイルサイズが50MB以上の場合 DynamoDBにファイル名を保存し、SNSを介して別サービスに通知する AWS Lambda DynamoDB SNS S3 Bucket Service
A Service B Upload File Event hook Notification
None
None
None
Docker で LocalStack を⽴ち上げる endpoint-urlを指定すれば aws cliでもアクセス可能
"84αʔϏεΛ༻ͨ͠ߏྫ アップロードされたファイルサイズが50MB以上の場合 DynamoDBにファイル名を保存し、SNSを介して別サービスに通知する AWS Lambda DynamoDB SNS S3 Bucket Service
A Service B Upload File Event hook Notification
"84αʔϏεΛ༻ͨ͠ߏྫ アップロードされたファイルサイズが50MB以上の場合 DynamoDBにファイル名を保存し、SNSを介して別サービスに通知する AWS Lambda DynamoDB SNS S3 Bucket Service
A Service B Upload File Event hook Notification ファイルアップロードする サービスクラスに対する テストを書いてみる
アップロード/ダウンロードする FileServiceクラスを実装する
None
アンチパターン プロダクションコードに テスト⽤の条件を混在させない
Dependency Injection できる作りにしておく Good Parts
S3 Client Object を Dependency Injectionする テストコード S3 Client Object
の endpoint を LocalStackに向けてFakeする
ローカルでの実⾏例
これを CircleCI で実現する
docker-compose で LocalStackを ⽴ち上げるのでホストマシンに VM を使⽤する .circleci/config.yml
LocalStack の起動 .circleci/config.yml
あとは普通にテスト .circleci/config.yml
"84αʔϏεΛ༻ͨ͠ߏྫ Lambda はどうテストするのか? 特に S3 Put Object のトリガーで 発⽕するような構成の場合 AWS
Lambda DynamoDB SNS S3 Bucket Service A Service B Upload File Event hook Notification アップロードされたファイルサイズが50MB以上の場合 DynamoDBにファイル名を保存し、SNSを介して別サービスに通知する
None
処理本体を別モジュール化 Before After
Lambdaをテスト可能にする Before After 処理本体を別モジュール化
別モジュール化した処理本体をテストする テストコード
Github Create Stack Developer commits CloudFormation インフラの継続的デリバリ lint test deploy
テスト環境 どうやってデプロイするか
"84αʔϏεΛ༻ͨ͠ߏྫ アップロードされたファイルサイズが50MB以上の場合 DynamoDBにファイル名を保存し、SNSを介して別サービスに通知する AWS Lambda DynamoDB SNS S3 Bucket Service
A Service B Upload File Event hook Notification これらのリソースを1つの テンプレートでデプロイする
ブランチごとにスタックを作成 PullRequest(ブランチ)ごとにAWS上にデプロイすれば 実際のAWS環境上でもUnitTestを実⾏できる。
インフラの継続的デリバリ lint test deploy まとめ cfn-python-lintを使う / Policy as Code
でYAMLをテストする LocalStack を使う / Lambdaは処理を外部モジュール化する ブランチごとにデプロイできるようにテンプレートを記述する
ご静聴ありがとうございました!
More Decks by geeawa
See All by geeawa
AI が開発・運用しやすいクラウド 〜サーバーレスの視点から考える設計原則〜 / serverless-design-principles-for-ai-agent-era
gawa
2
52
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
2k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
4.6k
ローカルで稼働するAI エージェントを超えて / beyond-local-ai-agents
gawa
3
480
AI は "道具" から "同僚" へ 自律型 AI エージェントの最前線と、AI 時代の人材の在り方 / Colleague in the AI Era - Autonomous AI Seminar 2026 at Niigata
gawa
0
430
Server Less Code More - コードを書かない時代に生きるサーバーレスデザイン / server-less-code-more
gawa
5
3.3k
[JAWS-UG TOHOKU] AI エージェント作って・使って・楽しんで ~Bedrock Engineer で AI エージェントを体験しよう~ / create, use and enjoy AI agents
gawa
6
880
AI Agent that supports ”YOU” / introducing-bedrock-engineer-en
gawa
2
1.2k
開発エージェントの作り手から見る開発エージェントの利用テクニック / ai-coding-dojyo-bedrock-engineer
gawa
3
930
Other Decks in Technology
See All in Technology
大江戸Ruby会議でデータベース クライアントの話をするのは 間違っているだろうか
yahonda
1
120
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
670
Ebitengine製iOSアプリ公開ボタンを押す会
eiei114
0
120
The future of architectural work
ufried
0
200
速くなった開発の効果をどう推し量るのか
bulbulpaul
0
110
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
230
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
1
830
属人化したISMS運用をGitHubとAIで仕組み化した1年間の記録
sioncojp
4
2.4k
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
660
Kiro CLI 入門 (ターミナルと CI で使う) | 目指せ Kiro マスター 03
inariku
PRO
2
140
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
310
会社説明資料_最新版
demaecan
0
32k
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.4k
Agile that works and the tools we love
rasmusluckow
331
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The SEO identity crisis: Don't let AI make you average
varn
0
630
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
The Cost Of JavaScript in 2023
addyosmani
56
10k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
69k
How Software Deployment tools have changed in the past 20 years
geshan
3
35k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
800