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
AWSのテスト技法とPolicy as Code / aws-testing-techniques-and-policy-as-a-code
Search
g-awa
October 01, 2019
Technology
4
1.2k
AWSのテスト技法とPolicy as Code / aws-testing-techniques-and-policy-as-a-code
g-awa
October 01, 2019
Tweet
Share
More Decks by g-awa
See All by g-awa
実践的にAPIを開発していく - ソースコード管理とデリバリーを考えよう - / develop effective web api versioning
gawa
1
220
クラウドを駆使した開発〜AWS Lambda, Dev Tools, AppSync の革新的な最新アップデート〜 / reinvent2023-recap-serverless-meetup-tokyo-developer-experience
gawa
0
510
refactoring-serverless
gawa
1
1.6k
modern-frontend-design-pattern
gawa
8
4.4k
サーバレスブース展示物のアーキテクチャを語る / Serverless Booth Architecture at AWS Summit 2023
gawa
0
110
Effective AppSync ~ Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 ~ / Effective AppSync
gawa
0
1.1k
サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless
gawa
18
4.4k
オレをCI/CDする / my ci cd practice
gawa
6
2.4k
Other Decks in Technology
See All in Technology
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
160
SPI原点回帰論:事業課題とFour Keysの結節点を見出す実践的ソフトウェアプロセス改善 / DevOpsDays Tokyo 2024
visional_engineering_and_design
4
1.8k
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
200
Kernel MemoryでAzure OpenAI Serviceとお手軽データソース連携
mitsuzono
1
160
ServiceNow Knowledge 24の歩き方 EYストラテジー・アンド・コンサルティング
manarobot
0
170
Algyan イベント振り返り
linyixian
0
200
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
190
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
3
460
エンジニアのキャリアをちょっと楽しくする3本の軸/Three Pillars to Make an Engineer's Career More Enjoyable
kwappa
0
2.5k
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
0
320
20240416_devopsdaystokyo
kzkmaeda
1
200
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
130
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
356
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
77
42k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Visualization
eitanlees
135
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
GitHub's CSS Performance
jonrohan
1024
450k
Teambox: Starting and Learning
jrom
128
8.4k
Facilitating Awesome Meetings
lara
41
5.6k
The Mythical Team-Month
searls
215
42k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
How to Ace a Technical Interview
jacobian
272
22k
Transcript
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は処理を外部モジュール化する ブランチごとにデプロイできるようにテンプレートを記述する
ご静聴ありがとうございました!