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-techniqu...
Search
geeawa
October 01, 2019
Technology
4
1.3k
AWSのテスト技法とPolicy as Code / aws-testing-techniques-and-policy-as-a-code
geeawa
October 01, 2019
Tweet
Share
More Decks by geeawa
See All by geeawa
生成 AI による新しい UI/UX 〜サーバーレスで実現する Generative UI の世界〜 / generative ui with serverless
gawa
13
5.9k
生成AIによる新しいUI/UX ~Generative UI の世界を感じよう~ / introducing-generative-ui
gawa
6
2.5k
実践的にAPIを開発していく - ソースコード管理とデリバリーを考えよう - / develop effective web api versioning
gawa
3
650
クラウドを駆使した開発〜AWS Lambda, Dev Tools, AppSync の革新的な最新アップデート〜 / reinvent2023-recap-serverless-meetup-tokyo-developer-experience
gawa
0
680
refactoring-serverless
gawa
1
1.9k
modern-frontend-design-pattern
gawa
9
6.2k
サーバレスブース展示物のアーキテクチャを語る / Serverless Booth Architecture at AWS Summit 2023
gawa
0
150
Effective AppSync ~ Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 ~ / Effective AppSync
gawa
0
1.2k
サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless
gawa
18
4.6k
Other Decks in Technology
See All in Technology
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.1k
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
130
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
130
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.3k
Unlearn Product Development - Unleashed Edition
lemiorhan
PRO
2
170
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
110
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
160
20241228 - 成為最強魔法使!AI 實時生成比賽的策略 @ 2024 SD AI 年會
dpys
0
350
embedパッケージを深掘りする / Deep Dive into embed Package in Go
task4233
0
160
20240513 - 框裡框外_文學院學生如何在AI世代安身立命 @ 淡江大學
dpys
0
640
🌏丸い地球を効率的に平たくする 〜🗺️地図の幾何学とWeb地図技術〜
syotasasaki593876
0
120
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
3k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
172
50k
A better future with KSS
kneath
238
17k
Statistics for Hackers
jakevdp
797
220k
Optimizing for Happiness
mojombo
376
70k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Embracing the Ebb and Flow
colly
84
4.5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
We Have a Design System, Now What?
morganepeng
51
7.3k
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は処理を外部モジュール化する ブランチごとにデプロイできるようにテンプレートを記述する
ご静聴ありがとうございました!