Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAWS-UG 長野支部 勉強会 in 松本 IaC 関連最新情報

JAWS-UG 長野支部 勉強会 in 松本 IaC 関連最新情報

2023年7月7日に開催されたJAWS-UG 長野支部 勉強会の資料となります
https://jawsug-nagano.connpass.com/event/288961/

Hiroki Uchida

July 07, 2023
Tweet

More Decks by Hiroki Uchida

Other Decks in Technology

Transcript

  1. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. Hiroki Uchida Solution Architect アマゾン ウェブ サービス ジャパン合同会社 IaC 関連最新情報 JAWS - UG ⻑野 ⽀ 部 勉 強会 IN 松 本
  2. © 2023, Amazon Web Services, Inc. or its affiliates. 2

    ⾃⼰紹介 内⽥ ⼤樹 (うちだ ひろき) ソリューションアーキテクト @東京 主に⼤企業のお客様を担当し、お客様のAWS活⽤を 様々な形でご⽀援する役割。趣味は写真撮影。 好きなIaCのツール Ansible AWS CDK @nikuyoshi
  3. © 2023, Amazon Web Services, Inc. or its affiliates. アジェンダ

    •Infrastructure as Code とは •各種ツールのご紹介 •各種イベント
  4. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. Infrastructure as Code 4
  5. © 2023, Amazon Web Services, Inc. or its affiliates. Infrastructure

    as Codeとは︖ • IaC とは、インフラをコードで定義し運用するアプローチのこと。 そのようなアプローチを用いることで、 VCS※1 、CI/CD といった ソフトウェア開発手法もインフラストラクチャに適用できる。 開発者 Source Build Test Deploy Git git push • 構成定義 • 設定ファイル • ドキュメント ビルド ツール テスト ツール インフラストラクチャ 定義ツール ※1 VCS … Version Control Systemsの略。GitやSubversionといったバージョン管理のソフトウェアを指す • Terraform • CloudFormation • CDK サーバー構成 ツール • Ansible • Chef • Puppet 商用環境 開発環境
  6. © 2023, Amazon Web Services, Inc. or its affiliates. なぜ

    IaC なのか︖ • クラウドが台頭し、頻繁にリソースの作成、更新、削除が行われるようになり、 インフラストラクチャ、アプリケーションの変更管理を容易にするため。 開発者 作成、更新、削除 よくある悩み ・変更差分が分からず、リリースしづらい (or リリースできない) ・リリース準備、チェックに時間がかかり、 毎回1週間のリードタイムが発生 ・手作業によるヒューマンエラー 開発者 Source Build Test Deploy Git • 構成定義 • 設定ファイル • ドキュメント 構成差分の明確化 CI/CD、セキュリティ 自動監査ツール等を用い、 リードタイムの短縮 IaC適用前 IaC適用後 AWS Cloud AWS Cloud
  7. © 2023, Amazon Web Services, Inc. or its affiliates. IaC

    の歴史 2008 IaCと い う ⾔ 葉 の 初 出 Am azon EC2リ リ ー ス 1993 CFEngineリ リ ー ス 2005 Puppetリ リ ー ス 諸説ありますが、内⽥が調べた限りの情報を以下の図にまとめております。 APIでプログラマブルに扱えるサービスとしてAmazon EC2、⽇本のお客様に広く利⽤が加速した意味で東京リージョンのリリースも 含めて以下に記載しております。 2012 Ansibleリ リ ー ス 2006 2011 2009 Chefリ リ ー ス AW S 東 京 リ ー ジ ョ ン 開 設 日本でIaCが徐々に流行 2013 Dockerリ リ ー ス 2021 Terraform GA
  8. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    における IaC 関連サービス AWS CloudFormation AWS Cloud Development Kit (AWS CDK) テキスト形式 (YAML or JSON) で 宣言的に記述されたテンプレートから AWS リソースを作成 AWS の環境を一般のプログラミング言語*で 記述できるツールキット AWSTemplateFormatVersion: 2010-09-09 Description: Sample Parameters: KeyName: Description: "Sample key" Type: String Mappings: RegionMap: ap-northeast-1: "AMIC”: “ami-xxxxxxxxxx" Resources: Ec2Instance: Type: "AWS::EC2::Instance" Properties: SubnetId: "subnet-xxxxxxxxxx" SecurityGroupIds: - "sg-xxxxxxxxxx" KeyName: !Ref KeyName ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", AMI ]
  9. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    における IaC 関連サービス・ツール AWS CloudFormation AWS Cloud Development Kit (AWS CDK) テキスト形式 (YAML or JSON) で 宣言的に記述されたテンプレートから AWS リソースを作成 AWS の環境を一般のプログラミング言語*で 記述できるツールキット バックエンドでは CloudFormation を利用
  10. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. AWS Cloud Development Kit (CDK) 11
  11. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    Cloud Development Kit (CDK) プログラミング言語で AWSリソースを定義するフレームワーク 馴染みのある開発言語 オートコンプリート、 インラインドキュメント 再利用可能なクラスを 有効活用 Java
  12. © 2023, Amazon Web Services, Inc. or its affiliates. 主な構成要素

    • CDKはコアフレームワーク、コンストラクトライブラリ、CDK CLI の3つから構成 コアフレームワーク コンストラクトライブラリ AWS CDK CLI (AWS CDK Toolkit) App Stacks Resources Serverless App Integration / Foundational Services Containers CI/CD
  13. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    CDK の概念 https://docs.aws.amazon.com/cdk/v2/guide/home.html • アプリケーション全体 • 複数のAWSアカウント、リージョンに またがることが可能 App • CloudFormation スタックに対応 • デプロイ可能な最小単位 Stack • CDKの最も基本的なビルディングブロック • 1つまたは複数のAWSリソースを表現 • ユーザーにより定義・配布が可能 Construct
  14. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    Constructs Library • AWS CDK が標準で提供する Construct のライブラリ • Low-level constructs (L1) • CloudFormationリソースおよびプロパティと1:1で対応(自動生成される) • CfnXXX という名前 (例:s3.CfnBucket は AWS::S3::Bucket を意味) • 記載粒度はCloudFormationと同等 • High-level constructs (L2) • デフォルト値や便利なメソッドを定義したAWSリソースを表すクラス • 例)クラス s3 は メソッド s3.Bucket.addLifeCycleRule() を持つ • Patterns • 複数のリソースを含む一般的な構成パターンを事前に定義したもの • aws-ecs-patterns.LoadBalancedFargateService など
  15. © 2023, Amazon Web Services, Inc. or its affiliates. CloudFormation

    テンプレート Resources: MyBucket: Type: AWS::S3::Bucket MyUser: Type: AWS::IAM::User MyUserPolicy: Type: AWS::IAM::Policy Properties: PolicyDocument: Statement: - Action: - s3:GetObject* - s3:GetBucket* - s3:List* Effect: Allow Resource: - Fn::GetAtt: [ MyBucket, Arn ] - Fn::Sub: "${MyBucket.Arn}/*" Version: "2012-10-17" PolicyName: MyUserPolicy Users: - Ref: MyUser AWS CloudFormation template language 例: IAM User からの 読取専用アクセスを許可する S3 Bucket を作成
  16. © 2023, Amazon Web Services, Inc. or its affiliates. L1

    Constructs const bucket = new CfnBucket(this, 'MyBucket'); const user = new CfnUser(this, 'MyUser'); new CfnPolicy(this, 'MyUserPolicy', { policyName: 'MyUserPolicy', policyDocument: new PolicyDocument({ statements: [new PolicyStatement({ actions: [ 's3:GetObject*', 's3:GetBucket*', 's3:List*'], resources: [ bucket.bucketArn, `${bucket.bucketArn}/*`] })] }), users: [user.userName], }); AWS CloudFormation resources AWS CloudFormation template language ”L1” AWS CDK CloudFormation テンプレートとほぼ1:1対応 型チェックや補完、ループなどは使用可能 CloudFormation から 自動的に生成
  17. © 2023, Amazon Web Services, Inc. or its affiliates. CloudFormation

    から 自動的に生成 L2 Constructs const bucket = new s3.Bucket(this, 'MyBucket'); const user = new iam.User(this, 'MyUser'); bucket.grantRead(user); AWS CloudFormation resources AWS CloudFormation template language AWS Construct Library ”L1” ”L2” AWS CDK AWS CDK コントリビューターが作成 grant() メソッドにより IAM Policy を自動生成 コードから意図が明確に
  18. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. 各種イベント 19
  19. © 2023, Amazon Web Services, Inc. or its affiliates. 日本のCDK界隈、盛り上がってます

    AWS CDKのGitHubのリポジトリのスター数はGlobalで2番目 https://ossinsight.io/analyze/aws/aws-cdk#overview https://ossinsight.io/analyze/aws/aws-cdk#overview
  20. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    CDK Conference Japan 2023 1/2 2023年5月20日にAWS CDK Conference Japan 2023が開催されました。JAWS-UG CDK支部主催のイベントで、一年で一度のCDKの祭りです。物理で約100名、 リモートで約400名お集りいただきました。 https://jawsug-cdk.connpass.com/event/278205/presentation/
  21. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    CDK Conference Japan 2023 2/2 AWS社員として友岡さん、高野さんが登壇し、以下のセッションが大変好評 でした。実装時の参考情報としてご活用ください。 2023/05/20 AWS CDK CONFERENCE JAPAN ͋Δ͋Δ͓೰Έʹ౴͍͑ͨ © 2023, Amazon Web Services, Inc. or its affiliates. Twitter: #jawsug_cdk © 2023, Amazon Web Services, Inc. or its affiliates. AWS CDKͷ͋Δ͋Δ͓೰Έʹ౴͍͑ͨ ։ൃ࣌ͷҙࢥܾఆΛߴ଎Խ͢ΔͨΊʹ ༑Ԭ խࢤ Prototyping Engineer Amazon Web Services Japan G.K. 実践 AWS CDK 〜 いろいろな参照のカタチと使い分け 〜 © 2023, Amazon Web Services, Inc. or its affiliates. < #jawsug_cdk © 2023, Amazon Web Services, Inc. or its affiliates. 実践 AWS CDK Kono, Kenji いろいろな参照のカタチと使い分け A W S C D K C O N F E R E N C E J A P A N 2 0 2 3 Solutions Architect Amazon Web Services Japan G.K. 2023/5/20 https://speakerdeck.com/konokenj/reference-patterns-in-aws-cdk https://speakerdeck.com/tmokmss/answering-cdk-faqs
  22. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    Summit Tokyo 2023 4年ぶりの物理開催。開発者ブースにてCDK、CloudFormation、 BLEA ( Baseline Environment on AWS ) 等、各種IaC関連のご質問、 ご意⾒を多くいただきました。
  23. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    Dev Day 2023 Tokyo 「BLEA 開発チームが学んだ AWS CDK の開発プラクティス 」と題して SA ⾼野さんが発表しました。セキュリティ対応を楽にするアイデア、スタック 分割などのCDKにおける開発プラクティスがまとまっており、好評でした。 © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved. マルチスタックからシングルスタックに変更 1つの CDK App を複数のスタックで構成 CDK App chatbot-stack config-rules-stack iam-stack x5 実装の背景 • デプロイの影響範囲を局所化。ライフサイクル別にスタック分割 課題 • デプロイに時間がかかる • クロススタック参照多く、更新時に複雑な⼿順が必要 • Account Factory Customization (AFC) では1スタックのみデプロイ可能 BLEA v2 まで 原則として 1 CDK App = 1スタックで構成するように変更 • ガバナンスベースは AFC 対応のためシングルスタックに • ゲストシステムサンプルも原則シングルスタックに • リージョンが異なる場合やリソース数などの制約に当たる場合は例外 • スタックではなくコンストラクトを使⽤して構造化、ファイル分割 CDK App ct-guest-stack x1 BLEA v3
  24. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. Appendix 26
  25. © 2023, Amazon Web Services, Inc. or its affiliates. ©

    2023, Amazon Web Services, Inc. or its affiliates. AWS CDK の学習をはじめる 27
  26. © 2023, Amazon Web Services, Inc. or its affiliates. 前提知識を⾝につける

    TypeScript • TypeScriptの基礎から始めるAWS CDK開発入門 https://catalog.workshops.aws/typescript-and-cdk-for-beginner/ja-JP • サバイバル TypeScript https://typescriptbook.jp/ 28 構文や型、npmなど基本的なところを抑えればOK! 非同期処理 (Promise, async/await) やジェネリクスのような高度なプログラミングや React (jsx, tsx) のようなフロントエンド向けの詳細の理解は必要ありません
  27. © 2023, Amazon Web Services, Inc. or its affiliates. AWS

    CDK のリソース AWS CDK Developer Guide https://docs.aws.amazon.com/ja _jp/cdk/v2/guide/home.html AWS CDK のコンセプトや ベストプラクティスなど 開発に役立つ情報を記載 API Reference https://docs.aws.amazon.com/cd k/api/v2/docs/aws-construct- library.html API の仕様はこちらで確認 CDK Workshop https://cdkworkshop.com/ 実際にコードを書きながら CDK を学べるワークショップ TypeScript, Python, .NET, Java に 対応 29
  28. © 2023, Amazon Web Services, Inc. or its affiliates. CDK

    のベストプラクティス • AWS CDKでクラウドアプリケーションを開発するためのベストプラクティス • https://aws.amazon.com/jp/blogs/news/best-practices-for-developing-cloud-applications- with-aws-cdk/ 30