Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AWS社員による怒涛のLTチャレンジ! Infrastructure as Codeに疲れたのでなんとかできないかCDKで色々やってみる

大村 幸敬 / Yukitaka Ohmura
JAWS DAYS 2021 [Track_E][17:00-18:00]AWS社員による怒涛のLTチャレンジ! で使用した資料です。

  • Be the first to comment

  • Be the first to like this

AWS社員による怒涛のLTチャレンジ! Infrastructure as Codeに疲れたのでなんとかできないかCDKで色々やってみる

  1. 1. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Web Services Japan Solutions Architect 大村幸敬 2021/03/20 Infrastructure as Code に疲れたので なんとかできないかCDKで色々やってみる JAWS DAYS 2021 AWS社員による怒涛のLTチャレンジ!
  2. 2. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 大村 幸敬 (おおむら ゆきたか) Twitter: yktko@ ソリューションアーキテクト • これからクラウドを使いはじめる エンタープライズ企業をサポート • 運用系サービス & DevOps系サービス 好きなAWSのサービス: AWS CLI, AWS CDK
  3. 3. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 発端:村主さんのJAWS DAYS 2019/2020の発表 「Infrastructure as Codeに疲れた」でググってください とても共感しました https://jawsdays2019.jaws-ug.jp/session/1119/ Mediumへのリンク
  4. 4. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 「僕たちが本来やりたかったこと」を改めて考えてみる • やりたいことはビジネス • やらなければいけなかったのは… • 無→IAMユーザ作成→基本のセキュリティ設定 →NW作成→APサーバ作成→DB作成 →監視作成→部分的な変更→部分的な変更→..... • この一連の変更作業を速く正確に行いたい • why遅い> 変更にかかる事前確認の時間が長い+作業自体が遅い • why確認> 変更して壊れるのが怖い • why怖い> 変更の影響がわからない • why影響> 設定の詳細がわからない+設定をテストできない • whyテストできない> 同じ環境を速く正確に作れない • 加えて • 速く、にはドキュメントやコードを書く時間も含む • 自分以外の人でも早く、速くやれるようにしたい
  5. 5. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 「僕たちが本来やりたかったこと」のために • Working Backwards • ツールやプラクティスに固執しない • 実現したいことから考える • そのために適切な時に適切な手段を都度選択して使う • 「実現したいこと」は状況によって変わるので注意 • たとえば : デフォルトではなくベストプラクティスな設計を、 速く、正確に展開したい。 かつその構成情報を他の人が理解できるように
  6. 6. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. どんな手段があるか • 特性に合わせて選択 • 状態を 記述&実行する CDK / CFn / Terraform.... • 手順を 記述&実行する CLI / API(SDK) / 手順書... • 記述…できるだけ少なくシンプルに • コードも文章も書けば書くほど理解しにくくなる • 条件によって動きが変わるコードは 構成情報の把握を難しくする(構成と1:1のほうがよい) • 自社固有の考え方は部外者への説明が大変 社外で一般的に使われている情報でできるだけ済ます
  7. 7. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKでなんとかできないか
  8. 8. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 開発を高速に • リファレンスの参照回数と試行錯誤が格段に少なくなる • 型定義(TypeScript)とエディタによるサジェスト • リソース間の依存関係把握が楽(オブジェクト指向) • CDK diffとテストによるチェック • 記述の絶対量が小さい • 最低限のパラメータ指定でリソースを作れる • つまり他人のコードを読むのも楽 • 一括タグ付けとかの便利機能 • 開発者を集めやすい • アプリ開発者もとっつきやすい
  9. 9. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. S3バケットのコード サジェスト: 必須プロパティ(?なし) オプションプロパティ(?あり) サジェスト: 型がわかる 文字列でなくEnumsで指定 L2 Constructは 少ないプロパティで 複数のリソースを まとめて構成可能 VPC作成のコード 複雑なものは コンストラクタでなく メソッドで追加する
  10. 10. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKで作成したリソース全てに決まったタグをつけるコード (CFnで対応しているもののみ) たとえばこの環境では93個の リソースに"Environment" タグを一括セットできた
  11. 11. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 小ネタ: AWS SSOでログインして CDKをデプロイ $ aws sso login --profile=sso-ct-dev1 Attempting to automatically open the SSO authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-1.amazonaws.com/ Then enter the code: XXXX-XXXX (ここで下記の手順をブラウザで操作) Successully logged into Start URL: https://d-XXXXXXXXX.awsapps.com/start#/ $ cdk bootstrap -c environment=dev --profile ct-dev1 ⏳ Bootstrapping environment aws://xxxxxxxxx/ap-northeast-1... ✅ Environment aws://xxxxxxxx/ap-northeast-1 bootstrapped (no changes). 参考(https://chariosan.com/2021/03/14/aws-sso_aws2-wrap_cdk/) • アクセスキー/シークレットキーを手元に保存しなくてよい • AWS CLIv2とaws2-wrapを使う
  12. 12. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 記述をわかりやすく • 設定値と使う場所の見通しをよくする • Constructの定義とパラメータ値を離さない、過度にコンフィグ化しない、条件分岐し ない • 本当に同じもの以外はコードを使いまわさない • 独自コードの再利用は必ずしも善ではない • 開発と本番で「全く同じでなければいけない」場合のみ同じインスタンスにする • 今は同じだが変わる可能性があるならコピペでもいいじゃない • 抽象化、条件分岐、ループは極力使わない • コードが実装をそのまま表現しているようにする • 「CDKコードをみてWell-Architectedレビューできるか?」 • 実装の詳細は生成したCFnテンプレートで確認 • CDKは「CFnテンプレートを、少ない記述でエディタサポートをフルに使って実装する ためのツール」と割り切る
  13. 13. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Contextを指定して環境ごとに違う パラメータを渡す例(やりすぎ注意) -c でContextを指定 cdk.json 参照のしかた デプロイのしかた SecretsManagerにパスワード を生成しつつRDSに設定 Aurora PostgreSQLを作るコード デプロイ後も動的に変化させたいものは ParameterStore/SecretsManagerを使う
  14. 14. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 手で触ってしまってもいい • CDK/CFn管理対象リソースを触ったら 1. CFn Drift Detectionで検出 2. パラメータをCDKに反映(サジェスト使えば楽) 3. cdk diffで差分を確認⇨適用 • 手で作ったリソースはどうするか • Former2でテンプレート生成 https://former2.com/ • CfnInclude or CDKコード書き起こしてリソース再作成 (既存リソースをインポートするより確実で結果的に楽) https://aws.amazon.com/jp/blogs/news/migrating-cloudformation-templates-to-the-aws-cloud-development-kit/ • CDKで書く方が大変なものもある • StepFunctionsとか • マネコンで作ってJSONそのまま持ってくるでもいいじゃない
  15. 15. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKにこだわらない • CDK L2(ハイレベル)ライブラリで無理に頑張らない • grant() は便利だけど、スタックまたいでると依存関係が更新されないとか • 普通にポリシーを指定でもいいじゃない。ARN参照でもいいじゃない。 • 無理にオブジェクト指向っぽく汎用的に作らなくていい。再利用性よりわかりやすさ。 • CDK L1(ローレベル)ライブラリの利用を躊躇しない • CFnと同じ設定が必要だが、それでも型定義やエディタサジェストがあるのは強力 • 構成ではなく手続きが必要ならCDKの一発構築は諦めてCLI+手順書でもいい • バックアップ取得作業とかデプロイ作業とかってCDKでやるもんじゃないし • マネコンのほうが楽なら手動操作でもいい • 手順書を作ればいい。せいぜい2-3クリック。 • SecurityHubやSSM QuickSetupをOrganizations全体に適用する場合など • DNS設定とかACMの証明書。開発と本番でどうせ違うし、世の中に1個しか作れない。 • 手で作ったものをCDKのfromLookup()メソッドで引っ張れば普通に使える
  16. 16. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. L1(CFn)リソースをCDKで作る例 CFnと同様全てのプロパティの 指定が必要 サジェストに必須パラメータが 出てくる
  17. 17. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 使えるのはCFnだけじゃない • cdktf • Define infrastructure resources using programming constructs and provision them using HashiCorp Terraform. • cdk8s • Define Kubernetes native apps and abstractions using object-oriented programming.
  18. 18. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まとめ:CDKでなんとかなりそうなこと • 開発を高速に • 記述をわかりやすく • 手で触ってもフィードバックしやすい • CDKにこだわらない • CFnだけじゃない
  19. 19. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まだ疲れることはあるけどね • AWSサービスの知識とCFnの理解は結局必要 • 新しくプログラミング言語覚えるの大変 • リファレンス英語だけ… • OSレイヤの管理は結局Ansible?
  20. 20. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. IaCに疲れても Happy coding with CDK!
  21. 21. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

×