SlideShare une entreprise Scribd logo
1  sur  28
© 2022, Amazon Web Services, Inc. or its affiliates.
© 2022, Amazon Web Services, Inc. or its affiliates.
Baseline Environment on AWS (BLEA)
開発にあたって検討したこと
AWS CDK Conference Japan
大村 幸敬
Amazon Web Services Japan
Senior Solutions Architect
2022/04/09
© 2022, Amazon Web Services, Inc. or its affiliates.
大村 幸敬(おおむら ゆきたか)
部長 / シニア ソリューションアーキテクト
• これからクラウドを使いはじめる
エンタープライズ企業をサポート
• 運用系サービス & DevOps 系サービスをリード
• Baseline Environment on AWS (BLEA) 開発者
好きなAWSのサービス:
AWS Command Line Interface (CLI)
AWS Cloud Development Kit (CDK)
AWS Systems Manager Incident Manager
@yktko
2
© 2022, Amazon Web Services, Inc. or its affiliates.
私とCDK
https://qiita.com/advent-calendar/2021/aws-cdk
3
© 2022, Amazon Web Services, Inc. or its affiliates.
アジェンダ
1. Baseline Environment on AWS 開発の方向性
1. What is BLEA
2. BLEAの開発方針
2. これから CDK を使う方へのナレッジ
1. CDKを使うのは難しそう
2. CDKのL2 Constructがない / CFnを使いたい
3. やっぱりYAMLがいい
4. 手でやった方が楽
3. すでに CDK を使っている方へのナレッジ
1. cdk deploy の認証情報を持ちたくない
2. パラメータを切り替えて使うには
3. パイプラインをどうデザインするか
4. 複数のCDKプロジェクトをどう管理するか
4
© 2022, Amazon Web Services, Inc. or its affiliates.
本日の内容
話すこと
• BLEA 開発中に検討した、AWS CDK 開発における
設計方針、実装方式、開発者が知っておくべきこと
• これは BLEA 開発の目的で検討した内容であり
一般的なベストプラクティスはありません
考え方を共有することで
皆さんがよりよい選択をする一助になればと思っています
話さないこと
• AWS CDKそのものの詳しい解説
• BLEAそのものについての解説
5
© 2022, Amazon Web Services, Inc. or its affiliates.
© 2022, Amazon Web Services, Inc. or its affiliates.
Baseline Environment on AWS
開発の方向性
6
© 2022, Amazon Web Services, Inc. or its affiliates.
Baseline Environment on AWS (BLEA)
AWSのセキュリティベストプラクティスを実装した
オープンソースのサンプルテンプレート
特徴
• 基本的なセキュリティを設定するテンプレートと
ゲストシステムのサンプルテンプレートを提供
• AWSのセキュリティベストプラクティスに準拠
• AWS Cloud Development Kit (CDK) コード
参考となるスニペット、コメント、リファレンスを豊富に記載
• チームによる長期的な利用を想定
CDK標準ライブラリのみを使ったシンプルな実装
利用者が理解しやすいよう過度な作り込みを避ける
https://github.com/aws-samples/baseline-environment-on-aws
ガバナンス ベース
(基本的なセキュリティ)
ゲストシステム サンプル
AWS
Account
BLEAが提供するテンプレート
CDK
CDK
7
© 2022, Amazon Web Services, Inc. or its affiliates.
Q: なぜ BLEA は AWS CDK を使うのか?
• 記述量が少なくシンプルで理解しやすいコード(CloudFormation 比)
• 長期にわたる安全な運用には引き継ぎしやすいコードが必要
• テンプレートをブラックボックスにしない
• 開発上の利点が多い
• AWSのベストプラクティスがライブラリに含まれておりコードの記述量が少なく済む
• 一般のプログラミング言語(TypeScript)であるためオブジェクト参照が明快
• エディタによる強力なサジェストがあるため実装中の誤り混入を少なくできる
• 実績のある CloudFormation によりデプロイされる
• CDKの学習コンテンツとしての利用
• インフラエンジニアは TypeScript 開発未経験者であることも多いため、
環境構築も含めた 1st step ガイドやドキュメントを提供する
• よく利用する CDK コードの書き方やコメントやリファレンスを多く記載
• BLEA 独自クラスは極力作らず、CDK の基礎知識と標準 API リファレンスを読めば、
必要な部分をコピペしつつ開発を開始できるように実装
8
© 2022, Amazon Web Services, Inc. or its affiliates.
コードサンプル (ALB アクセスログの設定)
ALB のアクセスログ設定(やや特殊な書き方)
特殊な設定の理由(security best practice準拠)、
一般的な設定のやり方、およびリファレンス
ログ出力に必要な特殊権限とその書き方
(RegionInfo の使い方)
9
© 2022, Amazon Web Services, Inc. or its affiliates.
© 2022, Amazon Web Services, Inc. or its affiliates.
これからCDKを使う方へのナレッジ
10
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: CDKを使うのは難しそう
BLEAでの解決策:
• 開発環境を用意するまでの障壁をできるだけ小さくする
• 想定開発環境をVisualStudio Codeに限定
• 開発環境設定ファイルや初期手順を提供する
実際にいただいたユーザーの声:
• TypeScriptやPythonのコードを書いたことがない
• npmやlintなどアプリ開発系の知識がよくわからない
• なんか強い開発環境の整備が必要で複雑そう
• メモ帳とか、さ○○エディタとか、秀○でやりたい
https://bit.ly/3CUIxQY 11
© 2022, Amazon Web Services, Inc. or its affiliates.
参考: BLEAでのVSCode Extensions利用
VSCode
EditorConfig
Prettier
ESLint
VSCode
Extensions
BLEA での推奨テキストエディタ
各種ツールとの連携機能を有する
関連ファイル .vscode/extensions.json
テキストエディタの
インデントや改行コードなどを自動設定
関連ファイル .editorconfig
JavaScript, TypeScript などの
コードフォーマッター
関連ファイル .prettierrc.json
JavaScript, TypeScript に対し
静的チェック (Lint) を実行
関連ファイル .eslintrc.json
開発者間の設定差異による
無用な差分の発生を抑制
かっこの前後のスペースや改行位置など
開発者ごとの書き方の差異を吸収。
手動でフォーマットを調整する手間を削減
静的チェック (コードを実行しない構文解析)
により潜在的なバグを予防し
ベストプラクティスを適用
※ VSCode 以外のテキストエディタを使用する場合は、下記ツールとの連携をサポートするものをご選択ください
12
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: CDKの L2 Construct がない / CFnを使いたい
BLEAでの解決策:
• L1 Constructを積極的に使う
• CFnをインポートする
考え方
• CFnリソースがある = L1 Construct がある
• L1 Construct のコードでサジェストが使える
• = CFnをYAMLで書くよりエラー訂正が強力 / リファレンス参照が減る
• L1 Constructでコード書いてCFnテンプレートを生成して使うとか
• cloudformation-includeモジュールでCFnテンプレートや既存の環境を変更
せずCDKで管理できる
https://bit.ly/3LJERW2
https://bit.ly/3Jf77yg
13
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: やっぱりYAMLがいい
BLEAでの解決策:
• ロジックを書かずコンストラクタとメソッドだけ使う
• 独自の Construct を作らず標準ライブラリのみ使う
考え方
• CDKのコードはリソースの生成と相互参照がほとんど
• ロジックや継承などを使わなければYAMLと同様
• そのうえ、文字列だけで相互参照するYAMLに対し
メソッドやプロパティでアクセスする方が
見通しがよい
• そもそもロジックが複雑なコードは構成管理には不向き
(コードと実体の対応がわかりにくい)
14
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: 手でやった方が楽
BLEAでの解決策:
• 実施回数が少なく、手順がシンプルいなら手でやる
• 過度なカスタムリソースコード (Lambda) 作成はしない
考え方
• Organizations全体での有効化が簡易なサービス
• SecurityHub / GuardDuty / SystemsManager QuickSetup etc.
• Organizationsやアカウントにつき1回しかない操作
• カスタムリソースを作ってLambdaとAPIで実装してもよいが
メンテナンス負荷のほうが大きい
https://bit.ly/3jgsvbJ
15
© 2022, Amazon Web Services, Inc. or its affiliates.
© 2022, Amazon Web Services, Inc. or its affiliates.
すでにCDKを使っている方へのナレッジ
16
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: cdk deploy の認証情報を持ちたくない
BLEAでの解決策:
• AWS SSOを使う(credentials fileでなく)
設定方法
1. ~/.aws/configにSSOログイン用プロファイルを設定
2. aws sso login コマンドで AWS SSO画面でID/PW/MFAトークン
を入力してログイン
3. 以後cdkコマンドが利用可能
注: 2022年3月の v2.18.0 で、AWS SSOの認証情報が、CDKから直接利用可能になりました!
$ aws sso login
$ cdk deploy
GitHub
Local
Permanent
API Key
Target Account Target Account
AWS SSO
SSOを使うパターン creedentials fileを
使うパターン
$ cdk deploy
[profile mytarget]
sso_start_url = https://d-deadbeef00.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = 012345678912
sso_role_name = AWSAdministratorAccess
region = ap-northeast-1
~/.aws/config
$ cd usecases/base-ct-guest
$ npm run build
$ aws sso login --profile mytarget
(ここでブラウザが開くのでログイン)
$ npx cdk deploy -c environment=myenv --profile mytarget
Stack BLEA-BASE-ConfigRule (略)
実行例
https://bit.ly/3NXZcJ0 17
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: パラメータを切り替えて使うには
BLEAでの解決策:
1. cdk.json の contextに設定値グループを保持
2. cdk コマンドの –c (--context) オプションでグループを指定
3. CDK コードでパラメータを取得して利用
cdk.jsonの例
https://bit.ly/3JkMWyX
18
© 2022, Amazon Web Services, Inc. or its affiliates.
パラメータ挿入: BLEAでの考え方
Context
• デプロイ対象に紐づくパラメータ情報。これをメインで使う
• アカウントとリージョンを指定しない場合は環境変数に従う
• 開発環境などデプロイ先を限定したくない場合に使用
• デプロイ先アカウントとリージョン(env)を指定可能
• コンテキスト値とそのデプロイ先のセットを記録
• --profile のアカウントxリージョンと一致しない場合はエラーになる (fool proof)
環境変数 (Process.env)
• profileで指定したアカウントとリージョンの取得に使う
Parameters
• CFnテンプレートに渡すパラメータ
Synth後、デプロイ時に値を変えるのに使えるが通常は使わない
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/parameters.html
cdk.jsonの例
19
© 2022, Amazon Web Services, Inc. or its affiliates.
検討: パラメータについてあれこれ
• そもそもパラメータで切り替えるのがよいのか?
• コードの中に複雑な条件分岐が発生する可能性
• コード自体を環境ごとに分けてパラメータを埋め込む方が良い?
• パブリックに公開するコードにパラメータを載せられない
• BLEA開発環境用のパラメータをどこに置くか?
• cdk.context.json, ${HOME}/.cdk.json, SSM ParameterStore, S3...
• パラメータの型チェックができない & JSONは面倒
• 独自の設定ファイルを読み込む方式にするか?
• しかし実装が複雑に...
• CDKのデフォルトライブラリには(まだ)存在しない
https://bit.ly/3LOH1Ur
20
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: パイプラインをどうデザインするか
BLEAでの考え方 (with CDKPipelines)
21
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: パイプラインをどうデザインするか
BLEAでの考え方(まとめ)
• CI/CD実現のため手元PCからでなくパイプラインからデプロイ
• Dev環境は手元PCを使って任意のアカウントへ気軽にデプロイ
• Staging、Prod環境は既定アカウントへパイプラインでデプロイ
• ターゲットスタックの検証はDev環境で
パイプライン自体の検証はStaging環境のデプロイで行う
• そのためstagingとprodのパイプラインは同じものを別に構成
• CDKPipelineを使う(サンプル実装として)
• GitHubからStagingやProdへ直デプロイしない
• GitHubはパイプラインアカウントにのみ接続 (CodeStar Connection)
22
© 2022, Amazon Web Services, Inc. or its affiliates.
検討: パイプラインをどうデザインするか
取りうる選択肢
• ターゲットスタックのどんなテストをどこで行うのか
• Dev環境 / Staging環境
• Ownerは誰か(アカウント分割に影響)
• GitHub(リポジトリ) / パイプライン / ターゲットアカウント
• どこで cdk deploy を実行するか
• 手元PC / GitHub / パイプラインアカウント / ターゲットアカウント
• どこで CI (npm run test) を実行するか
• 手元PC / GitHub / パイプライン
• どこでパイプラインスタックのテストを行うのか
• Dev環境 / Staging環境
23
© 2022, Amazon Web Services, Inc. or its affiliates.
課題: 複数のCDKプロジェクトをどう管理するか
BLEAでの解決策:
• リポジトリは1つでサブディレクトリでユースケースごとに分ける
• パッケージ管理は NPM workspaces を使う
考え方:
• BLEAは1つのリポジトリで多様なパターンを提供したい
• 個々のユースケースは独立して使うのでCDKプロジェクトは別
• ユースケース内のバリエーションは異なるAppを用意
• node_moduleを1つだけにしたい(容量爆発対策)
検討:
• アプリコードインフラ系コードをどう分けるか問題
• チーム編成 / ライフサイクル / CI/CDと品質検証の仕組み
• 多くのCDKツールキットはルート直下に1プロジェクトを置くことを想定
24
© 2022, Amazon Web Services, Inc. or its affiliates.
その他の検討
• セキュリティグループやIAM Policyの循環参照
• スナップショットテストはやるとして、他に何をテストするか
• ALBが勝手にSecurityGroupを設定するのをやめさせたい
• Route53とACMはCDKで管理した方がいいのか
• CloudFrontとWAFはus-east-1で設定しないと
• etc…
25
© 2022, Amazon Web Services, Inc. or its affiliates.
Next step...
BLEA GitHub リポジトリ
https://github.com/aws-samples/baseline-environment-on-aws/blob/main/README_ja.md
AWS環境にセキュアなベースラインを提供するテンプレート
「Baseline Environment on AWS」のご紹介(解説ブログ)
https://aws.amazon.com/jp/blogs/news/announcing-baseline-environment-on-aws/
HowTo にいろいろ情報あります
手元環境構築から導入まで
詳しい手順あります
26
© 2022, Amazon Web Services, Inc. or its affiliates.
まとめ
27
1. Baseline Environment on AWS 開発の方向性
1. What is BLEA
2. BLEAの開発方針
2. これから CDK を使う方へのナレッジ
1. CDKを使うのは難しそう
2. CDKのL2 Constructがない / CFnを使いたい
3. やっぱりYAMLがいい
4. 手でやった方が楽
3. すでに CDK を使っている方へのナレッジ
1. cdk deploy の認証情報を持ちたくない
2. パラメータを切り替えて使うには
3. パイプラインをどうデザインするか
4. 複数のCDKプロジェクトをどう管理するか
© 2022, Amazon Web Services, Inc. or its affiliates.
Thank you!
© 2022, Amazon Web Services, Inc. or its affiliates.
大村 幸敬 (Yukitaka Ohmura)
ご質問がありましたら、Twitterで!
@yktko または #jawsug #cdkconf へ

Contenu connexe

Tendances

Tendances (20)

20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation
 
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct Connect
 
20211109 bleaの使い方(基本編)
20211109 bleaの使い方(基本編)20211109 bleaの使い方(基本編)
20211109 bleaの使い方(基本編)
 
20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS
 
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service20210216 AWS Black Belt Online Seminar AWS Database Migration Service
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
 
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
20190129 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
 
AWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormationAWS Black Belt Online Seminar 2016 AWS CloudFormation
AWS Black Belt Online Seminar 2016 AWS CloudFormation
 
20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本20210526 AWS Expert Online マルチアカウント管理の基本
20210526 AWS Expert Online マルチアカウント管理の基本
 
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
 
20190514 AWS Black Belt Online Seminar Amazon API Gateway
20190514 AWS Black Belt Online Seminar Amazon API Gateway 20190514 AWS Black Belt Online Seminar Amazon API Gateway
20190514 AWS Black Belt Online Seminar Amazon API Gateway
 
20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions
 
20200218 AWS Black Belt Online Seminar Next Generation Redshift
20200218 AWS Black Belt Online Seminar Next Generation Redshift20200218 AWS Black Belt Online Seminar Next Generation Redshift
20200218 AWS Black Belt Online Seminar Next Generation Redshift
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
 
20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue20190806 AWS Black Belt Online Seminar AWS Glue
20190806 AWS Black Belt Online Seminar AWS Glue
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
 

Similaire à 20220409 AWS BLEA 開発にあたって検討したこと

Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
理弘 山崎
 

Similaire à 20220409 AWS BLEA 開発にあたって検討したこと (20)

Gaming cicd-pipeline gaming-technight-2
Gaming cicd-pipeline gaming-technight-2Gaming cicd-pipeline gaming-technight-2
Gaming cicd-pipeline gaming-technight-2
 
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
セキュリティ基準、標準、規制 との付き合い方
セキュリティ基準、標準、規制との付き合い方セキュリティ基準、標準、規制との付き合い方
セキュリティ基準、標準、規制 との付き合い方
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
AWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティスAWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティス
 
AWS と Denodo で実現するデータ活用基盤 - データ民主化を加速するクラウド活用のポイント
AWS と Denodo で実現するデータ活用基盤 - データ民主化を加速するクラウド活用のポイントAWS と Denodo で実現するデータ活用基盤 - データ民主化を加速するクラウド活用のポイント
AWS と Denodo で実現するデータ活用基盤 - データ民主化を加速するクラウド活用のポイント
 
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
AWS の IoT 向けサービス
AWS の IoT 向けサービスAWS の IoT 向けサービス
AWS の IoT 向けサービス
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート01_2021年上半期 AWS IoT サービスアップデート
01_2021年上半期 AWS IoT サービスアップデート
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
CData General Proposal
CData General ProposalCData General Proposal
CData General Proposal
 

Plus de Amazon Web Services Japan

Plus de Amazon Web Services Japan (20)

202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
202205 AWS Black Belt Online Seminar Amazon FSx for OpenZFS
 
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device Defender202204 AWS Black Belt Online Seminar AWS IoT Device Defender
202204 AWS Black Belt Online Seminar AWS IoT Device Defender
 
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
202204 AWS Black Belt Online Seminar Amazon Connect を活用したオンコール対応の実現
 
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
202204 AWS Black Belt Online Seminar Amazon Connect Salesforce連携(第1回 CTI Adap...
 
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデートAmazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
 
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
 
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDD
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
 
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
 
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
 
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
 
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
 
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
 
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
 
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operations20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
 
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
 

Dernier

Dernier (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

20220409 AWS BLEA 開発にあたって検討したこと

  • 1. © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. Baseline Environment on AWS (BLEA) 開発にあたって検討したこと AWS CDK Conference Japan 大村 幸敬 Amazon Web Services Japan Senior Solutions Architect 2022/04/09
  • 2. © 2022, Amazon Web Services, Inc. or its affiliates. 大村 幸敬(おおむら ゆきたか) 部長 / シニア ソリューションアーキテクト • これからクラウドを使いはじめる エンタープライズ企業をサポート • 運用系サービス & DevOps 系サービスをリード • Baseline Environment on AWS (BLEA) 開発者 好きなAWSのサービス: AWS Command Line Interface (CLI) AWS Cloud Development Kit (CDK) AWS Systems Manager Incident Manager @yktko 2
  • 3. © 2022, Amazon Web Services, Inc. or its affiliates. 私とCDK https://qiita.com/advent-calendar/2021/aws-cdk 3
  • 4. © 2022, Amazon Web Services, Inc. or its affiliates. アジェンダ 1. Baseline Environment on AWS 開発の方向性 1. What is BLEA 2. BLEAの開発方針 2. これから CDK を使う方へのナレッジ 1. CDKを使うのは難しそう 2. CDKのL2 Constructがない / CFnを使いたい 3. やっぱりYAMLがいい 4. 手でやった方が楽 3. すでに CDK を使っている方へのナレッジ 1. cdk deploy の認証情報を持ちたくない 2. パラメータを切り替えて使うには 3. パイプラインをどうデザインするか 4. 複数のCDKプロジェクトをどう管理するか 4
  • 5. © 2022, Amazon Web Services, Inc. or its affiliates. 本日の内容 話すこと • BLEA 開発中に検討した、AWS CDK 開発における 設計方針、実装方式、開発者が知っておくべきこと • これは BLEA 開発の目的で検討した内容であり 一般的なベストプラクティスはありません 考え方を共有することで 皆さんがよりよい選択をする一助になればと思っています 話さないこと • AWS CDKそのものの詳しい解説 • BLEAそのものについての解説 5
  • 6. © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. Baseline Environment on AWS 開発の方向性 6
  • 7. © 2022, Amazon Web Services, Inc. or its affiliates. Baseline Environment on AWS (BLEA) AWSのセキュリティベストプラクティスを実装した オープンソースのサンプルテンプレート 特徴 • 基本的なセキュリティを設定するテンプレートと ゲストシステムのサンプルテンプレートを提供 • AWSのセキュリティベストプラクティスに準拠 • AWS Cloud Development Kit (CDK) コード 参考となるスニペット、コメント、リファレンスを豊富に記載 • チームによる長期的な利用を想定 CDK標準ライブラリのみを使ったシンプルな実装 利用者が理解しやすいよう過度な作り込みを避ける https://github.com/aws-samples/baseline-environment-on-aws ガバナンス ベース (基本的なセキュリティ) ゲストシステム サンプル AWS Account BLEAが提供するテンプレート CDK CDK 7
  • 8. © 2022, Amazon Web Services, Inc. or its affiliates. Q: なぜ BLEA は AWS CDK を使うのか? • 記述量が少なくシンプルで理解しやすいコード(CloudFormation 比) • 長期にわたる安全な運用には引き継ぎしやすいコードが必要 • テンプレートをブラックボックスにしない • 開発上の利点が多い • AWSのベストプラクティスがライブラリに含まれておりコードの記述量が少なく済む • 一般のプログラミング言語(TypeScript)であるためオブジェクト参照が明快 • エディタによる強力なサジェストがあるため実装中の誤り混入を少なくできる • 実績のある CloudFormation によりデプロイされる • CDKの学習コンテンツとしての利用 • インフラエンジニアは TypeScript 開発未経験者であることも多いため、 環境構築も含めた 1st step ガイドやドキュメントを提供する • よく利用する CDK コードの書き方やコメントやリファレンスを多く記載 • BLEA 独自クラスは極力作らず、CDK の基礎知識と標準 API リファレンスを読めば、 必要な部分をコピペしつつ開発を開始できるように実装 8
  • 9. © 2022, Amazon Web Services, Inc. or its affiliates. コードサンプル (ALB アクセスログの設定) ALB のアクセスログ設定(やや特殊な書き方) 特殊な設定の理由(security best practice準拠)、 一般的な設定のやり方、およびリファレンス ログ出力に必要な特殊権限とその書き方 (RegionInfo の使い方) 9
  • 10. © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. これからCDKを使う方へのナレッジ 10
  • 11. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: CDKを使うのは難しそう BLEAでの解決策: • 開発環境を用意するまでの障壁をできるだけ小さくする • 想定開発環境をVisualStudio Codeに限定 • 開発環境設定ファイルや初期手順を提供する 実際にいただいたユーザーの声: • TypeScriptやPythonのコードを書いたことがない • npmやlintなどアプリ開発系の知識がよくわからない • なんか強い開発環境の整備が必要で複雑そう • メモ帳とか、さ○○エディタとか、秀○でやりたい https://bit.ly/3CUIxQY 11
  • 12. © 2022, Amazon Web Services, Inc. or its affiliates. 参考: BLEAでのVSCode Extensions利用 VSCode EditorConfig Prettier ESLint VSCode Extensions BLEA での推奨テキストエディタ 各種ツールとの連携機能を有する 関連ファイル .vscode/extensions.json テキストエディタの インデントや改行コードなどを自動設定 関連ファイル .editorconfig JavaScript, TypeScript などの コードフォーマッター 関連ファイル .prettierrc.json JavaScript, TypeScript に対し 静的チェック (Lint) を実行 関連ファイル .eslintrc.json 開発者間の設定差異による 無用な差分の発生を抑制 かっこの前後のスペースや改行位置など 開発者ごとの書き方の差異を吸収。 手動でフォーマットを調整する手間を削減 静的チェック (コードを実行しない構文解析) により潜在的なバグを予防し ベストプラクティスを適用 ※ VSCode 以外のテキストエディタを使用する場合は、下記ツールとの連携をサポートするものをご選択ください 12
  • 13. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: CDKの L2 Construct がない / CFnを使いたい BLEAでの解決策: • L1 Constructを積極的に使う • CFnをインポートする 考え方 • CFnリソースがある = L1 Construct がある • L1 Construct のコードでサジェストが使える • = CFnをYAMLで書くよりエラー訂正が強力 / リファレンス参照が減る • L1 Constructでコード書いてCFnテンプレートを生成して使うとか • cloudformation-includeモジュールでCFnテンプレートや既存の環境を変更 せずCDKで管理できる https://bit.ly/3LJERW2 https://bit.ly/3Jf77yg 13
  • 14. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: やっぱりYAMLがいい BLEAでの解決策: • ロジックを書かずコンストラクタとメソッドだけ使う • 独自の Construct を作らず標準ライブラリのみ使う 考え方 • CDKのコードはリソースの生成と相互参照がほとんど • ロジックや継承などを使わなければYAMLと同様 • そのうえ、文字列だけで相互参照するYAMLに対し メソッドやプロパティでアクセスする方が 見通しがよい • そもそもロジックが複雑なコードは構成管理には不向き (コードと実体の対応がわかりにくい) 14
  • 15. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: 手でやった方が楽 BLEAでの解決策: • 実施回数が少なく、手順がシンプルいなら手でやる • 過度なカスタムリソースコード (Lambda) 作成はしない 考え方 • Organizations全体での有効化が簡易なサービス • SecurityHub / GuardDuty / SystemsManager QuickSetup etc. • Organizationsやアカウントにつき1回しかない操作 • カスタムリソースを作ってLambdaとAPIで実装してもよいが メンテナンス負荷のほうが大きい https://bit.ly/3jgsvbJ 15
  • 16. © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. すでにCDKを使っている方へのナレッジ 16
  • 17. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: cdk deploy の認証情報を持ちたくない BLEAでの解決策: • AWS SSOを使う(credentials fileでなく) 設定方法 1. ~/.aws/configにSSOログイン用プロファイルを設定 2. aws sso login コマンドで AWS SSO画面でID/PW/MFAトークン を入力してログイン 3. 以後cdkコマンドが利用可能 注: 2022年3月の v2.18.0 で、AWS SSOの認証情報が、CDKから直接利用可能になりました! $ aws sso login $ cdk deploy GitHub Local Permanent API Key Target Account Target Account AWS SSO SSOを使うパターン creedentials fileを 使うパターン $ cdk deploy [profile mytarget] sso_start_url = https://d-deadbeef00.awsapps.com/start sso_region = ap-northeast-1 sso_account_id = 012345678912 sso_role_name = AWSAdministratorAccess region = ap-northeast-1 ~/.aws/config $ cd usecases/base-ct-guest $ npm run build $ aws sso login --profile mytarget (ここでブラウザが開くのでログイン) $ npx cdk deploy -c environment=myenv --profile mytarget Stack BLEA-BASE-ConfigRule (略) 実行例 https://bit.ly/3NXZcJ0 17
  • 18. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: パラメータを切り替えて使うには BLEAでの解決策: 1. cdk.json の contextに設定値グループを保持 2. cdk コマンドの –c (--context) オプションでグループを指定 3. CDK コードでパラメータを取得して利用 cdk.jsonの例 https://bit.ly/3JkMWyX 18
  • 19. © 2022, Amazon Web Services, Inc. or its affiliates. パラメータ挿入: BLEAでの考え方 Context • デプロイ対象に紐づくパラメータ情報。これをメインで使う • アカウントとリージョンを指定しない場合は環境変数に従う • 開発環境などデプロイ先を限定したくない場合に使用 • デプロイ先アカウントとリージョン(env)を指定可能 • コンテキスト値とそのデプロイ先のセットを記録 • --profile のアカウントxリージョンと一致しない場合はエラーになる (fool proof) 環境変数 (Process.env) • profileで指定したアカウントとリージョンの取得に使う Parameters • CFnテンプレートに渡すパラメータ Synth後、デプロイ時に値を変えるのに使えるが通常は使わない https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/parameters.html cdk.jsonの例 19
  • 20. © 2022, Amazon Web Services, Inc. or its affiliates. 検討: パラメータについてあれこれ • そもそもパラメータで切り替えるのがよいのか? • コードの中に複雑な条件分岐が発生する可能性 • コード自体を環境ごとに分けてパラメータを埋め込む方が良い? • パブリックに公開するコードにパラメータを載せられない • BLEA開発環境用のパラメータをどこに置くか? • cdk.context.json, ${HOME}/.cdk.json, SSM ParameterStore, S3... • パラメータの型チェックができない & JSONは面倒 • 独自の設定ファイルを読み込む方式にするか? • しかし実装が複雑に... • CDKのデフォルトライブラリには(まだ)存在しない https://bit.ly/3LOH1Ur 20
  • 21. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: パイプラインをどうデザインするか BLEAでの考え方 (with CDKPipelines) 21
  • 22. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: パイプラインをどうデザインするか BLEAでの考え方(まとめ) • CI/CD実現のため手元PCからでなくパイプラインからデプロイ • Dev環境は手元PCを使って任意のアカウントへ気軽にデプロイ • Staging、Prod環境は既定アカウントへパイプラインでデプロイ • ターゲットスタックの検証はDev環境で パイプライン自体の検証はStaging環境のデプロイで行う • そのためstagingとprodのパイプラインは同じものを別に構成 • CDKPipelineを使う(サンプル実装として) • GitHubからStagingやProdへ直デプロイしない • GitHubはパイプラインアカウントにのみ接続 (CodeStar Connection) 22
  • 23. © 2022, Amazon Web Services, Inc. or its affiliates. 検討: パイプラインをどうデザインするか 取りうる選択肢 • ターゲットスタックのどんなテストをどこで行うのか • Dev環境 / Staging環境 • Ownerは誰か(アカウント分割に影響) • GitHub(リポジトリ) / パイプライン / ターゲットアカウント • どこで cdk deploy を実行するか • 手元PC / GitHub / パイプラインアカウント / ターゲットアカウント • どこで CI (npm run test) を実行するか • 手元PC / GitHub / パイプライン • どこでパイプラインスタックのテストを行うのか • Dev環境 / Staging環境 23
  • 24. © 2022, Amazon Web Services, Inc. or its affiliates. 課題: 複数のCDKプロジェクトをどう管理するか BLEAでの解決策: • リポジトリは1つでサブディレクトリでユースケースごとに分ける • パッケージ管理は NPM workspaces を使う 考え方: • BLEAは1つのリポジトリで多様なパターンを提供したい • 個々のユースケースは独立して使うのでCDKプロジェクトは別 • ユースケース内のバリエーションは異なるAppを用意 • node_moduleを1つだけにしたい(容量爆発対策) 検討: • アプリコードインフラ系コードをどう分けるか問題 • チーム編成 / ライフサイクル / CI/CDと品質検証の仕組み • 多くのCDKツールキットはルート直下に1プロジェクトを置くことを想定 24
  • 25. © 2022, Amazon Web Services, Inc. or its affiliates. その他の検討 • セキュリティグループやIAM Policyの循環参照 • スナップショットテストはやるとして、他に何をテストするか • ALBが勝手にSecurityGroupを設定するのをやめさせたい • Route53とACMはCDKで管理した方がいいのか • CloudFrontとWAFはus-east-1で設定しないと • etc… 25
  • 26. © 2022, Amazon Web Services, Inc. or its affiliates. Next step... BLEA GitHub リポジトリ https://github.com/aws-samples/baseline-environment-on-aws/blob/main/README_ja.md AWS環境にセキュアなベースラインを提供するテンプレート 「Baseline Environment on AWS」のご紹介(解説ブログ) https://aws.amazon.com/jp/blogs/news/announcing-baseline-environment-on-aws/ HowTo にいろいろ情報あります 手元環境構築から導入まで 詳しい手順あります 26
  • 27. © 2022, Amazon Web Services, Inc. or its affiliates. まとめ 27 1. Baseline Environment on AWS 開発の方向性 1. What is BLEA 2. BLEAの開発方針 2. これから CDK を使う方へのナレッジ 1. CDKを使うのは難しそう 2. CDKのL2 Constructがない / CFnを使いたい 3. やっぱりYAMLがいい 4. 手でやった方が楽 3. すでに CDK を使っている方へのナレッジ 1. cdk deploy の認証情報を持ちたくない 2. パラメータを切り替えて使うには 3. パイプラインをどうデザインするか 4. 複数のCDKプロジェクトをどう管理するか
  • 28. © 2022, Amazon Web Services, Inc. or its affiliates. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. 大村 幸敬 (Yukitaka Ohmura) ご質問がありましたら、Twitterで! @yktko または #jawsug #cdkconf へ

Notes de l'éditeur

  1. 私はソリューションアーキテクトの大村と申します。 AWSを使いはじめるお客様の最初の立ち上げをサポートしています。AWSの運用系サービスのスペシャリストとしても活動しており、Baseline environment on aws の開発をおこなっています。よろしくお願いいたします。
  2. (読む)
  3. それではなぜBLEAがCDKを使うのか、見ていきましょう。一番のポイントはコードの記述量が少なく、シンプルにできるからです。 BELAでは、初期構築だけでなく、長期的にコードによる管理を行なっていくために、コードを引き継ぎやすい状態に維持することが重要と考えています。 テンプレートをブラックボックするにすることなく、チームの誰もが中身を理解できるようにするには、コードの量をできるだけ少なく、複雑なロジックにしないことが必要です。そのためにCDKが適していると考えました。 そして、CDKは開発が行いやすいです。特にエディタによる強力なサジェストによって、実装中に誤りが混入する可能性を大きく減らせます。 また情報の参照が明快にかけます。その上で、デプロイメントは実績のあるCFnが使えることが強みです。 最後にBLEAはCDKの学習用コンテンツとしても利用できると考えています。 コードによる管理はまだ日本で広く広まっているとは言えないと考えています。BLEAを使って多くのエンジニアがコードによる管理を行えるようになって欲しい。 そのためコードをシンプルに、解説を多く、できるだけ複雑な実装はしない方針で開発しています。
  4. コードのサンプルです。雰囲気だけでもつかんでみてください。 ALBのアクセスログの設定ですが、実はセキュリティのベストプラクティスに従うために少しカスタマイズが必要です。 そのため、やや特殊なALBの設定方法を書いており、かつなぜその設定が必要なのか、リファレンスとともに解説を記載しています。 そしてALBのログ出力には、実は特殊な権限設定が必要なのですが、その書き方もこの例で学べるようにしています。 よく使われる構文がこの中に入っていることがご理解いただけると思います。
  5. さて、セッションの最後にみなさんのNext Stepをご案内させてください。 BLEAのコードと情報はGitHubリポジトリに上がっています。日本語のドキュメントもあり、手元の環境構築から導入まで、詳しい手順があります。 また、CDK開発にあたってのHowToも多く記載しています。 みなさんにBLEAを使ってセキュアな環境を構築し、また、CDKの利用方法を学んでいただければと思っています。 ぜひお試しいください。そして開発は私たち日本のSAが行なっています。ぜひフィードバックをいただければと思います。