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.4k
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
Server Less Code More - コードを書かない時代に生きるサーバーレスデザイン / server-less-code-more
gawa
5
2.7k
[JAWS-UG TOHOKU] AI エージェント作って・使って・楽しんで ~Bedrock Engineer で AI エージェントを体験しよう~ / create, use and enjoy AI agents
gawa
6
730
AI Agent that supports ”YOU” / introducing-bedrock-engineer-en
gawa
2
800
開発エージェントの作り手から見る開発エージェントの利用テクニック / ai-coding-dojyo-bedrock-engineer
gawa
3
790
開発 AI エージェントBedrock Engineer 開発秘話 / bedrock-engineer-dev-stroy
gawa
7
920
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
2.6k
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
18
7.9k
生成 AI による新しい UI/UX 〜サーバーレスで実現する Generative UI の世界〜 / generative ui with serverless
gawa
13
7.5k
生成AIによる新しいUI/UX ~Generative UI の世界を感じよう~ / introducing-generative-ui
gawa
6
3.3k
Other Decks in Technology
See All in Technology
Prox Industries株式会社 会社紹介資料
proxindustries
0
110
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
SchooでVue.js/Nuxtを技術選定している理由
yamanoku
3
280
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
360
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
250
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
640
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
620
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
160
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
300
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
5
600
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
380
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
800
Featured
See All Featured
Amusing Abliteration
ianozsvald
0
110
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Odyssey Design
rkendrick25
PRO
1
500
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
210
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
The Pragmatic Product Professional
lauravandoore
37
7.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Context Engineering - Making Every Token Count
addyosmani
9
670
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
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は処理を外部モジュール化する ブランチごとにデプロイできるようにテンプレートを記述する
ご静聴ありがとうございました!