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

AWS ハンズオン研修 2026

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for CyberAgent CyberAgent PRO
November 09, 2026
6

AWS ハンズオン研修 2026

Avatar for CyberAgent

CyberAgent PRO

November 09, 2026

More Decks by CyberAgent

Transcript

  1. 茨木 啓瑚(いばらき けいご) • 所属 ◦ 株式会社 WinTicket • 業務内容

    ◦ メディアアセット管理× ML 促進基盤の構築 • 横軸 ◦ AWS Community Builder 2026 AI Engineer @oyasumi_pants 4
  2. 本日の目標 • チーム開発のインフラ構築を “スムーズに” 行えるようにする • AWS リソースに対する知識的な “インデックス” を張る

    ※ 実際の開発で様々な AWS リソースに触れられるように • “IaC(Terraform)” を通じて AWS リソースを構築できるようになる 6
  3. Homebrew のインストール(for Mac) ホームページからインストール インストール $ /bin/bash -c "$(curl -fsSL

    https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 確認 $ brew -v > Homebrew 4.4.28 https://brew.sh/ja/ 9
  4. AWS CLI • AWS Command Line Interface (AWS CLI) •

    AWS のサービスを CLI で管理するための統合ツール • AWS のリソースの確認・作成・削除ができます aws コマンド を打てるように! 10
  5. AWS CLI のインストール (Mac) • AWS CLI の最新バージョンのインストールまたは更新 インストール $

    curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" $ sudo installer -pkg AWSCLIV2.pkg -target / (Homebrew が入っていれば...) $ brew install awscli 確認 $ which aws $ aws --version 11
  6. AWS CLI のインストール(Win) • AWS CLI の最新バージョンのインストールまたは更新 インストール C:\> msiexec.exe

    /i https://awscli.amazonaws.com/AWSCLIV2.msi C:\> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn 確認 C:\> aws --version 12
  7. AWS アカウントの準備 • 自分の AWS アカウントで進める前提です • ルートユーザーではなく、AdministratorAccess を付けた IAM

    ユーザーのアクセスキーを使ってください • IAM ユーザーの作り方は 公式ドキュメント を参照してください 13
  8. AWS CLI の認証設定(アクセスキー) IAM ユーザーのアクセスキーで設定する 設定 $ aws configure --profile

    default > AWS Access Key ID: AKIAXXXXXXXXXXXXXXXX > AWS Secret Access Key: **** > Default region name: ap-northeast-1 確認 $ aws sts get-caller-identity --profile default > "Account": "123456789012" ※ ルートユーザーのアクセスキーは使わない。発行したキーはリポジトリに commit しない https://docs.aws.amazon.com/ja_ jp/cli/latest/userguide/cli-authentication-user.html 14
  9. tfstate 用 S3 バケットの作成 Terraform の state を置くバケットを先に作る 作成 $

    aws s3 mb s3://myproject-terraform-state \ --region ap-northeast-1 --profile default > make_bucket: myproject-terraform-state ※ バケット名は全世界で一意。myproject は自分の識別子に置き換え、後の make setup の BUCKET_PREFIX と揃える ※ 作成できたかは次の aws s3 ls で確認する https://docs.aws.amazon.com/ja_ jp/cli/latest/reference/s3/mb.html 15
  10. AWS CLI を実行する 4. AWS CLI の実行 option: profile, region,

    etc... ※ default 以外の profile を使うときは、環境変数 か --profile で指定する AWS_PROFILE command: s3, ec2, iam, etc... $ aws s3 ls --profile=default > 2026-04-10 00:02:39 myproject-terraform-state 今回はバケットの 情報が出れば OK 16
  11. Terraform のインストール(Mac) brew 経由で install する インストール $ brew tap

    hashicorp/tap $ brew install hashicorp/tap/terraform 確認 $ terraform -version > Terraform v1.14.0 https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli 17
  12. Terraform のインストール(Win) binary package 経由で install する 確認 C:\> terraform

    -version > Terraform v1.14.0 https://developer.hashicorp.com/terraform/install 18
  13. Docker CLI のインストール(Mac) Rancher Desktop 経由でインストール インストール $ brew install

    --cask rancher 確認 $ docker -v > Docker version 28.x.x ... ※ 初回起動時: Container Engine → dockerd (moby) を選択、Kubernetes は無効で OK ※ Docker Desktop を使う場合はライセンス条件を確認してください https://rancherdesktop.io/ 19
  14. Docker コマンドの検証 アプリケーションを起動後 確認 $ docker -v > Docker version

    28.0.4, build b8034c0 https://docs.rancherdesktop.io/getting-started/installation/ 21
  15. Docker Desktop について • Docker Desktop は条件によっては “ライセンス料金” が発生します •

    会社で使う場合は下記ページの契約条件(従業員数・売上規模)を確認してください https://www.docker.com/ja-jp/pricing/ 22
  16. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 25
  17. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 26
  18. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 28
  19. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 30
  20. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 31
  21. VPC - Virtual Private Cloud VPC とは? • AWS クラウド上のプライベートネットワーク空間

    • 論理的なネットワーク分離が可能 • ネットワーク環境のコントロールが可能 https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 32
  22. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 34
  23. Subnet Subnet とは? • Subnet は VPC 内の区切られた IP アドレスの範囲

    • Public Subnet はインターネットへの直接アクセスが 可能 • Private Subnet はインターネットから直接アクセスが 不可能 • 多層アプリケーションのセキュリティ設計で重要 35
  24. Subnet 10.0.0.0/16 図解 10.0.1.0/24 VPC の中にサブネットを切り その中で EC2 が動く パブリック

    サブネット https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 36
  25. インターネットへの接続 10.0.0.0/16 図解 サブネットからインターネッ トへのルーティングを定義 インターネットや VPC 外の AWS リソースへの

    アクセスが可能になる 10.0.1.0/24 パブリック サブネット https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 39
  26. NAT Gateway NAT Gateway とは • プライベートサブネット内のリソースがインターネットにアクセ スするための経路 • 送信トラフィックのみを許可し、外部からの接続はブロックする

    • プライベートサブネット内のサーバーがパッチダウンロードや API アクセスなどでインターネット接続が必要な場合に使用 40
  27. インターネットへの接続 10.0.0.0/16 図解 OS のアップデートや アプリケーションのダウンロードなど プライベートサブネットから インターネットへの接続を可能にする DB など直接インターネットから

    アクセスできないようにする 10.0.2.0/24 10.0.1.0/24 NAT Gateway プライベート パブリック サブネット サブネット https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 41
  28. VPC Endpoint(appendix) VPC Endpoint とは • AWS サービスにプライベートに接続するためのゲートウェイ • インターネットを経由せずに

    S3 や DynamoDB などのサービ スにアクセスできる • セキュリティ強化とデータ転送コスト削減の可能性がある 42
  29. VPC Endpoint(appendix) VPC Endpoint とは • VPC Endpoint は、グローバ ル

    IP を持つ AWS サービスに VPC Endpoint 対して、VPC 内部から直接アク セスするための出口 NAT Gateway との使い分けを調査しよう https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 43
  30. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 44
  31. Security Group Security Group とは • インスタンスレベルのファイアウォール • ステートフルで、許可ルールのみ設定可能 •

    セキュリティグループを初めて作成した場合、インバウンドルール がない(=インバウンドトラフィックが許可されない)ので注意 https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 45
  32. Network ACL Network ACL とは • Network Access Control List

    の略称 • サブネットレベルのファイアウォール • ステートレスで、許可と拒否の両方のルールを設定可能 https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 46
  33. インターネットへの接続 10.0.0.0/16 図解 10.0.2.0/24 10.0.1.0/24 セキュリティグループは インスタンスレベルでの ファイアウォール 例えば 3306

    ポートへの TCP インバウンド通信を許可など プライベート パブリック サブネット サブネット NACL はサブネットレベルでの ファイアウォール 47
  34. SG vs Network ACL Security Group Network ACL サーバーレベルで効果 サブネットレベルで効果

    Allow のみを IN・OUT で指定可能 Allow/Deny を IN・OUT で指定可能 ステートフルなので 戻りのトラフィックを考慮しなくて良い ステートレスなので 戻りのトラフィックも明示的に設定 全てのルールを適用 番号の順序通りに適用 インスタンス管理者が Security Group を適用すればその管理下になる Subnet 内の全てのインスタンスが ACL の管理下に入る https://aws.amazon.com/jp/blogs/news/webinar-bb-amazonvpc-2020/ 48
  35. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 49
  36. ELB - Elastic Load Balancing ELB とは • スケーラビリティ・アベイラビリティを兼ね備えたロードバランサー •

    ELB 自体がオートスケール可能 • マネージド運用が可能で、従量課金で利用可能 • Auto Scaling や Route53 などの他サービスと連携可能 https://www.youtube.com/watch?v=gKCK0RDAhnw 50
  37. ELB - Elastic Load Balancing 負荷分散 EC2 Elastic Load Balancing

    https://www.youtube.com/watch?v=gKCK0RDAhnw EC2 EC2 51
  38. ELB - Elastic Load Balancing 負荷分散 バックエンドのサービスの リクエスト数やコネクション数が 均等になるように負荷分散 EC2

    負荷が高まったら インスタンスを 追加 リクエスト数が 増加 Elastic Load Balancing EC2 EC2 https://www.youtube.com/watch?v=gKCK0RDAhnw 52
  39. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 53
  40. Route53 Route53 とは • スケーラブルな DNS サービス • ドメイン名の登録・権威 DNS

    サービス・DNS リゾルバー・Disaster recovery 等を提供する • 複数のルーティングポリシーを提供(シンプル・加重・地理的) https://www.youtube.com/watch?v=Yi-e5O_ jd6o 54
  41. DNS - Domain Name System • FQDN に対する IP アドレスなどの情報を取得する仕組み

    • DNS から情報取得することを「 名前解決 (Name Resolution) 」と呼ぶ • 各ネームサーバーが管理する名前空間を「 ゾーン (Zone) 」と呼ぶ www.example.com. Fully Qualified Domain Name 完全修飾ドメイン名 .com を管理する .(ルート) を管理する ネームサーバー generic Top-Level Domain (.com, .net, .org ...etc) ネームサーバーへ www.example.com. www.example.com. 192.0.2.3 .example.com を管理する .com.(gTLD) を管理する ネームサーバー ネームサーバーへ www.example.com. 192.0.2.3 .example.com. を管理する ネームサーバー フルサービスリゾルバー https://www.youtube.com/watch?v=Yi-e5O_ jd6o 55
  42. 権限委譲(Delegation) • 親ゾーンから子ゾーンのネームサーバーを FQDN で指し示すことで権限を委譲 権限委譲先のネームサーバーを FQDN で指し示す 親ゾーン example.com.

    01.example.com. Delegation (権限委譲) 3600 IN NS ns-01.awsdns-01.co.uk ns-02.awsdns-02.net ns-03.awsdns-03.org ns-04.awsdns-04.com 3600 IN NS ns-01.awsdns-01.co.uk ns-02.awsdns-02.net ns-03.awsdns-03.org ns-04.awsdns-04.com ns1.example.com. ns2.example.com. 子ゾーン 01.example.com. 01.example.com. ns1.example.com. ns2.example.com. 56
  43. A レコードと エイリアスレコード 子ゾーン 01.example.com. レコード名 TTL/タイプ 値/ルーティング先 01.example.com. 3600

    NS ns-01.awsdns-01.co.uk ns-02.awsdns-02.net ns-03.awsdns-03.org ns-04.awsdns-04.com app.01.example.com. 300 A 192.0.2.100 alb.01.example.com. - dualstack.my-app-alb-12 34.elb.amazonaws.com. A レコード 標準的な DNS の機能で 固定の IP に向けるためのレコード A エイリアス レコード Route53 の機能で ELB などの AWS リソースに向けることが可能 57
  44. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 58
  45. エッジサービス インターネットの利用区間を なるべく短く より長い区間を AWS global network で AWS global

    network エンドユーザーの近くで DNS 名前解決、コンテンツ配信 https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-cloudfront-deep-dive-2020/ 60
  46. CloudFront • ユーザーを一番近いエッジロケーションに誘導することで 配信を高速化 • エッジサーバーでコンテンツのキャッシングを行い オリジンの負荷をオフロード クライアント 1. HTTP

    のリクエスト 高速化 5. コンテンツの取得 2. HTTP のリクエスト 6. HTTP のリクエスト 3. コンテンツの取得 7. コンテンツの取得 レスポンス CloudFront 4. コンテンツをキャッシュ オリジンサーバー 負荷軽減 https://aws.amazon.com/jp/blogs/news/webinar-bb-amazon-cloudfront-deep-dive-2020/ 61
  47. 取り扱うサービスの紹介 Network, CDN サービス VPC Subnet Route Table Internet Gateway

    NAT Gateway Network ACL Elastic Load Balancing Route53 CloudFront API Gateway Security Group 62
  48. API Gateway が扱う API API Gateway は REST 系(REST・HTTP)と WebSocket

    の API を扱える REST • REST = Representational State Transfer • 単一 HTTP メッセージで 1 つの操作に対する情報を含む • 扱う情報を URI で表現する「リソース」として定義し、それらを HTTP メソッド(PUT, GET, POST, DELETE, …)の表現で操作 WebSocket API Gateway • HTTP の上で、クライアントとサーバー間の双方向通信を実現す るための通信仕様 • 1 つのコネクションで継続的なデータ送受信が可能 • URI スキームはセキュア WebSocket 用の「wss://~」を利用 https://d1.awsstatic.com/webinars/jp/pdf/services/20190514_AWS-Blackbelt_APIGateway_rev.pdf 64
  49. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 65
  50. ECS - Elastic Container Service ECS とは • AWS のコンテナオーケストレーションサービス

    • EC2 または Fargate で実行可能 • AWS 独自のコンテナ管理を行う 71
  51. EKS - Elastic Kubernetes Service EKS とは • Kubernetes を実行するためのマネージドサービス

    • セキュリティ、ネットワーク、ストレージなど、様々な AWS サービスと連携可能 • アップストリーム版の Kubernetes との準拠性が認証済み 72
  52. EC2 - Elastic Compute Cloud EC2 とは • 仮想サーバーを構築・管理するサービス •

    OS からアプリまで全て管理可能 • EC2 は柔軟性が高いが管理コストも高い 74
  53. サーバーレスとは? サーバーの管理が不要 (準備、OS 保守、etc) 柔軟なスケーリング (拡張/縮退) ユーザーの責任領域を 小さくしそこだけに注力 十二分に考慮された 高可用性

    アイドル時の リソース確保が不要 実際の処理負荷に応じて 自動で拡張/縮退 高生産性 マネージド 業務注力 スケーラビリティ (機会損失防止) マネージド 自動リソース管理 変更容易性 エンジニア 意識改革 リアルタイム (付加価値/機能差別化) コスト最適化 https://www.slideshare.net/slideshow/20201118-aws-black-belt-online-seminar/239325435 76
  54. ECS, EKS × EC2, Fargate ECS on Fargate コンテナ オーケストレーター

    (コントロールプレーン) ECS EKS EC2 Fargate コンテナの実行環境 (データプレーン) 77
  55. ECS, EKS × EC2, Fargate EKS on EC2 コンテナ オーケストレーター

    (コントロールプレーン) ECS EKS EC2 Fargate コンテナの実行環境 (データプレーン) 78
  56. ECS/EKS におけるコンテナ実行環境 ECS on Fargate ECS on EC2 EKS on

    EC2 (セルフマネージド型ノード) EKS on EC2 (マネージド型ノードグループ) EKS on Fargate 抽象度のレベル アプリケーションコンテナ アプリケーションコンテナ アプリケーションコンテナ ホストのスケジューリング ホストのスケジューリング ホストのスケジューリング コンテナエージェントの設定 コンテナエージェントの設定 コンテナエージェントの設定 ホストの OS / ライブラリ選定 ホストの OS / ライブラリ選定 ホストの OS / ライブラリ選定 自分たちで管理するレイヤー https://aws.amazon.com/jp/blogs/news/aws-black-belt-online-seminar-con202-ecs-fargate-overview/ AWS が提供するレイヤー 79
  57. ECS on Fargate 構成要素 Docker イメージ コンテナ Docker イメージ コンテナ

    タスク定義 • タスク定義に基づき 起動されるコンテナ群 • タスク内コンテナは 同一ホスト上で実行 タスク 参照 サービス タスク定義を構成するコンテナ群定義 • コンテナ定義 • 要求 CPU, メモリ • タスクに割り当てる IAM ロール • etc... クラスター • 実行環境の境界 • IAM 権限の境界(クラスターに対する操作) • スケジュールされたタスクの実行を設定可能 https://www.youtube.com/watch?v=stpz_SNiWmA&t=0s • • • • タスク実行コピー数(n 個)を定義 起動後、タスク実行コピーを維持 ELB と連携 起動タイプ(EC2/Fargate)を設定 80
  58. Lambda と他の実行環境 EC2 Fargate Lambda アプリケーションコード AMI(+ User data) -

    サーバー/OS の設定 - ミドルウェア - ランタイム アプリケーションコンテナ コンテナイメージ アプリケーションコード 仮想マシン基盤 コンテナ 実行環境 自分たちで管理するレイヤー アプリケーション 実行環境 AWS が提供するレイヤー https://pages.awscloud.com/rs/112-TZM-766/images/BOS35_AWS-Builders-Online-Series_2022-Q1_Presentation-Deck.pdf 83
  59. コンテナ or Lambda の判断 はい アプリ 管理単位 は? 短期実行 max

    15 分 または 非同期処理 いいえ プラット フォーム コンテナ はい はい 10GB 以下 のメモリ いいえ CPU 処理 のみ いいえ はい ステート レス処理 Lambda バースト 制限内 いいえ Lambda https://pages.awscloud.com/rs/112-TZM-766/images/BOS35_AWS-Builders-Online-Series_2022-Q1_Presentation-Deck.pdf 84
  60. Lambda Durable Functions Durable Functions とは? • Lambda 関数内でチェックポイントとリプレイにより耐久実行を実現 •

    steps(自動再試行)と waits(課金なしで最大 1 年停止)の 2 つの仕組み • コールバックや条件待機で外部イベント(人的承認等)にも対応 • Durable execution SDK を追加するだけで既存の Lambda 関数を拡張可能 https://aws.amazon.com/jp/blogs/news/build-multi-step-applications-and-ai-workflows-with-aws-lambda-durable-functions/ 87
  61. ECR - Elastic Container Registry ECR とは • Docker コンテナイメージを保存・管理するマネージドサービス

    • プライベートリポジトリとしてイメージの共有やバージョン管理に使用できる • Docker CLI を利用することが可能 https://aws.amazon.com/jp/blogs/news/aws-blackaws-black-belt-online-seminar-con241/ 88
  62. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 89
  63. RDS - Relational Database Service RDS とは • マネージドなリレーショナルデータベースサービス •

    PostgreSQL、MySQL、MariaDB、Oracle、SQL Server、 Db2 などをクラウド上で簡単に使い始めることができる • バックアップ、自動パッチ適用、スケーリング、監視などの管理作 業が自動化されている https://aws.amazon.com/jp/rds/ 93
  64. Aurora Aurora とは • MySQL, PostgreSQL と互換性があり、低コストでハイパフォーマンスを発揮 することが可能 • 一瞬で数十万件のトランザクションまでスケールアップできる

    Aurora Serverless, Aurora I/O-Optimized によるコスト予測, Amazon Redshift とのゼロ ETL 統合によるリアルタイム分析など、拡張機能も充実 https://aws.amazon.com/jp/blogs/news/data-modernization-day-japan3-20220901/ 94
  65. Aurora 構成要素 Availability Zone1 Availability Zone2 Availability Zone3 SQL SQL

    SQL Transactions Transactions Transactions Caching Caching Caching • Amazon Aurora DB クラスター ◦ Amazon Aurora の管理単位 Shared storage volume ◦ プライマリインスタンス、レプリカ、クラスターボ リュームの総称 Availability Zone1 Availability Zone2 Availability Zone3 SQL SQL SQL • プライマリ DB インスタンス(Writer) SQL Transactions ◦ 読み込み、書き込みを行うマスターインスタンス Caching Transactions Caching Transactions Caching Transactions Caching SQL • Aurora レプリカ(Reader) Transactions ◦ 読み込みをスケールアウトさせるレプリカ(15 台まで) Caching Shared storage volume Shared storage volume • クラスターボリューム (Aurora ストレージ) ◦ 3 つの AZ 間でレプリケートされる仮想ボリューム ◦ プライマリインスタンスもレプリカも同じものを使用 https://aws.amazon.com/jp/blogs/news/data-modernization-day-japan3-20220901/ 95
  66. RDS Proxy 全体像 アプリケーション RDS Proxy RDS 接続プーリング Fargate シームレス

    フェイルオーバー RDS アプリケーション セキュリティの向上 Aurora Lambda IAM Secrets Manager https://www.youtube.com/watch?v=rwkRMmHC0zo 97
  67. ElastiCache ElastiCache とは • Redis, Memcached, Valkey を提供するマネージドキャッシングサービス • DB

    の前にキャッシュを置くことで、読み取り負荷を軽減し、レスポンス時間 を短縮できる • セッション管理、リアルタイムランキング、キューなどにも使用可能 https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-ElastiCache_0228_v1.pdf 99
  68. DynamoDB DynamoDB とは • フルマネージド NoSQL データベースサービス • スケーラビリティに優れ、数 ms

    の応答時間を維持しながら無制限に拡張可能 • キーバリュー形式で柔軟なデータモデルを実現 • サーバーレスアプリケーションとの親和性も高い https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-DynamoDB-How-it-works_1231_v1.pdf 100
  69. DynamoDB のアーキテクチャ 書き込みリクエスト 読み込みリクエスト ランダム負荷分散 書き込みリクエスト パーティショニング プライマリ サーバー リード

    レプリカ お互いに独立している 整合性が担保できない プライマリサーバーで処理し、更新を反映 多数のサーバーで分散処理 101
  70. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 102
  71. IAM - Identity and Access Management IAM とは • AWS

    リソースへのアクセス管理サービス • プリンシパル, ポリシーを通じて誰が何にアクセスできるかを制御 • 必要最小限の権限のみを付与する最小権限の原則を適用することが セキュリティのベストプラクティス https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-iam-part1-2019/ 105
  72. IAM - Identity and Access Management IAM とは プリンシパル 認証

    リクエスト ユーザー(グループ) 認可 アクション オペレーション ID ベースポリシー AWS リソース CreateUser DeleteUser GetUser Permissions CreatePolicy Permissions Authentication AttachRolePolicy IAM … アクション ロール リソース リソースベースポリシー RunInstances StartInstances Instances StopInstances プリンシパル CreateVpcEndpoint … AWS STS 環境データ S3 Lambda EC2 リソースデータ CreateBucket アプリケーション Endpoints ListBucket その他ポリシー GetObject DeleteObject (permissions boundary, service control policy, MFA Token S3 … access control list) https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-iam-part1-2019/ Bucket with Objects 106
  73. Secrets Manager Secrets Manager とは • API キーやパスワード、DB 接続情報などの機密情報を安全に保存 ・管理できるサービス

    • ローテーションやアクセス制御もサポートしている • 安全に情報を保管し、IAM によるアクセス制御や自動ローテーショ ンによってセキュリティと運用効率を両立 107
  74. WAF WAF とは • WAF(Web Application Firewall)はウェブアプリケー ションを保護するファイアウォール • SQL

    インジェクションや XSS などの一般的なウェブ攻撃から アプリケーションを守る(IP ベースのブロックも可能) 108
  75. ACM - AWS Certificate Manager ACM とは • SSL/TLS 証明書の管理サービス

    • 証明書の発行、管理、更新を無料で簡単に行える • CloudFront、ALB などのサービスと統合されている 109
  76. Cognito ユーザープール ID プール Sign in Sign in with Username

    Password Submit Cognito トークン (JWT) アプリ API 独自のユーザーディレクトリに加え、 外部 ID プロバイダーでのログインに基づき、 アプリへのアクセスに利用できるトークンを提供 https://www.youtube.com/watch?v=vWfTe5MHOIk Corporate ID AWS 一時 クレデンシャル AWS API Cognito ユーザープールに加え、 外部 ID プロバイダーでのログインに基づき、 AWS にアクセスできるクレデンシャルを提供 111
  77. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 112
  78. S3 - Simple Storage Service S3 とは • 高耐久性・高可用性のオブジェクトストレージサービス •

    ファイルのバックアップ、静的ウェブサイトホスティング、データ レイク構築、アプリケーションのデータストア等に使用可能 • 99.999999999% の耐久性を持ち、アクセス頻度に合わせたスト レージクラスを選択できる 115
  79. S3 - Simple Storage Service データ保護・移行 業務サーバー Web サービスの コンテンツオフロード

    データレイク 取り込み 分析 可視化 加工 CDN S3 バケット Web サーバー バックアップ先 • アーカイブ、バックアップ • データ移行 元データ 活用データ • データ分析基盤 • 機械学習・IoT 非構造化 データ • 動画サイト • EC サイト https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-S3-Usecases_0131_v1.pdf 116
  80. S3 Vectors S3 Vectors とは? • ベクトルバケットにベクトルを保存し、類似検索(k-NN)が可能 • 専用ベクトル DB

    不要で運用・コスト負担を大幅削減 • メタデータフィルタリング付きのセマンティック検索が可能 • 既存の S3 機能(IAM, CloudTrail, 暗号化等)をそのまま活用 https://aws.amazon.com/jp/s3/features/vectors/ 117
  81. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 119
  82. SQS - Simple Queue Service SQS とは • フルマネージドのメッセージキューイングサービス •

    マイクロサービス間の疎結合を実現し、システムの耐障害性と拡張性を向上させる • 非同期処理が必要な場合や、システム間の通信をオフロードしたい場合に有効 • トラフィックのスパイク時にもデータを失うことなく処理を継続できる 122
  83. SQS - Simple Queue Service プロデューサー コンシューマー キューにメッセージを 送信するアプリケーション キューのメッセージを

    取得するアプリケーション プロデューサー メッセージ キュー コンシューマー メッセージ キュー プロデューサーが生成するデータ メッセージをキューイングする 分散キュー https://d1.awsstatic.com/webinars/jp/pdf/services/20190717_AWS-BlackBelt_AmazonSQS.pdf 123
  84. SQS の利用ケース ユースケース 1. バッファリングとバッチ化 2. ワークキュー 一時的なリクエスト増の均一化 プロデューサーとコンシューマーの 処理の依存関係を低減

    3. リクエストのオフロード 4. ターゲットのファンアウト 重い処理の切り出しによる応答性能の改善 Amazon SNS との組み合わせによる 処理の並列化 https://d1.awsstatic.com/webinars/jp/pdf/services/20190717_AWS-BlackBelt_AmazonSQS.pdf 124
  85. Step Functions Step Functions とは • ワークフローを視覚的に構築・実行するサービス • 複数の AWS

    サービスを組み合わせて複雑なビジネスロジックを実装可能 • エラー処理, 再試行ロジック, 並列処理などもサポート 125
  86. Step Functions • 分散アプリケーション・マイクロサービス Star t FetchAnOrder 全体を「 ステートマシン 」と呼ばれる仕組

    RegionChoice みでオーケストレートできる CreateOrderA • 定義したステートマシンは マネジメント コンソールから「 ワークフロー 」という形 式で可視化できる OrderOK CreateOrderB DatabaseError ProcessOrder UnservedRegion NoOrderPossible End https://d1.awsstatic.com/webinars/jp/pdf/services/20190522_AWS-Blackbelt_StepFunctions.pdf 126
  87. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 128
  88. システムの状態把握に必要な要素 ログ What:タイムスタンプが記録 された、時間の経過とともに起 こったイベントの記録 Why: 予測不可能な振る舞いを 発見するのに役立つ CloudWatch Logs

    メトリクス CloudWatch Metrics トレース AWS X-Ray What:時間間隔で 計測されたデータの 数値表現 Why: 傾向の把 握、予測 に役立つ What:関連する一連の分 散イベントの表現 Why: リクエストの流れ とリクエストの構造の両方 を可視化 することで因果関 係の追跡に役立つ 132
  89. CloudWatch の全体像 Application Monitoring [外形監視] CW Synthetics [リアルユーザーモニタリング] CW RUM

    [SLI/SLO・サービスマップ] Application Signals Insights [インターネット監視] CW Internet Monitor [トレース] CW ServiceLens [構造化ログによるメトリクス] CW Container Insights / Contributor Insights [Lambda 拡張機能によるメトリクス] Lambda Insights [アプリケーションコンポーネントのメトリクス] Application Insights [アラーム] CW Alarms [メトリクス] CW Metrics Infrastructure [ログ] CW Logs EC2 AWS サービス CW Agent [リアルタイムメトリクス分析] CW Metrics Insights [タグベース視覚化] CW Metrics Explorer [メトリクスストリーム] CW Metric Streams [ダッシュボードに統合] CW Dashboard Amazon Kinesis Data Firehose パートナー サービス、 S3/Redshift [ログ分析] CW Logs Insights [イベント] Amazon EventBridge / Amazon EventBridge Scheduler https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AmazonCloudWatch_0330_v1.pdf 133
  90. CloudTrail CloudTrail とは • AWS アカウントのガバナンス、コンプライアンス、リスク監査を支援するサービス • AWS アカウント内の API

    コールをログとして記録し、誰が何をいつ行ったかを追跡できる • 不正アクセスや意図しない変更の検出、コンプライアンス要件の遵守確認などに活用できる 134
  91. API リクエストの証跡取得 API インターフェース 認証・認可 IAM AWS サービスの API エンドポイント

    API リクエスト 証跡取得 CloudTrail https://d1.awsstatic.com/webinars/jp/pdf/services/20210119_AWSBlackbelt_CloudTrail.pdf 135
  92. Cost Explorer Cost Explorer とは • コストと使用量を視覚的に分析できる AWS のツール •

    サービス別・API 別など多様なフィルタでコストを確認可能 • 将来のコスト予測や予算の管理にも活用できる 136
  93. Cost Explorer を使ってみよう 2. Billing and Cost Management から Cost

    Explorer へ コストサマリー の確認 コストモニター の設定が可能 Cost Explorer へ移動 138
  94. Cost Explorer を使ってみよう 4. (appendix) 特定のサービスのコストを API 粒度でも閲覧可能 同じ VPC

    の括りでも コストの掛かり方が異なる ディメンションを API オペレーションにして 特定のサービスを指定 140
  95. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 141
  96. CodePipeline CodePipeline とは • 素早く信頼性の高いアプリケーション更新のための継続的デリバ リーサービスを提供 • ソフトウェアリリースプロセスをモデル化することで可視化 • コードが変更されるとコードのビルド,

    テスト, デプロイを実施 • AWS サービスやサードパーティーのツールと統合 https://d1.awsstatic.com/webinars/jp/pdf/services/20201111_BlackBelt_AWS%20CodeStar_AWS_CodePipeline.pdf 144
  97. サポートしているプロバイダー Source • Amazon S3 • Amazon ECR • AWS

    CodeCommit • GitHub • GitHub Enterprise Server • Bitbucket • GitLab Build • AWS CodeBuild • Commands • Jenkins • CloudBees / TeamCity • • • • • • • • Test Deploy AWS CodeBuild AWS Device Farm BlazeMeter Jenkins Ghost Inspector Micro Focus StormRunner Load Nouvola Runscope • Amazon S3 • AWS CloudFormation • AWS CodeDeploy • Amazon ECS(Blue/Green) • Amazon EKS / EC2 • AWS Elastic Beanstalk • AWS AppConfig • AWS Service Catalog Approval Invoke • Manual • • • • AWS Lambda AWS Step Functions AWS CodePipeline Amazon Inspector https://docs.aws.amazon.com/ja_ jp/codepipeline/latest/userguide/actions-valid-providers.html 145
  98. 様々な AWS リソースを知ろう 目次 1. 構成図で全体を把握する 6. Storage 2. Network,

    CDN 7. Application Integration 3. Compute, Containers 8. Management & Governance 4. Database 9. Developer Tools 5. Security, Identity & Compliance 10. Artificial Intelligence 147
  99. Bedrock Bedrock とは • 基盤モデルを活用した生成 AI アプリケーションを簡単に構築、拡張できる • API を経由して様々な基盤モデルにアクセス、インフラ管理は不要

    • データセキュリティやコンプライアンスを実現 • エージェント機能、RAG 機能、非公開でのモデルのカスタマイズなど基盤モデル の効果を高める様々な機能を提供 https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2024_Amazon-Bedrock-Overview_v1.pdf 149
  100. SageMaker SageMaker とは • 全ての開発者とデータサイエンティストに 機械学習モデルの構築、トレー ニング、デプロイ手段を提供 • 機械学習のワークフロー全体をカバーする完全マネージド型サービス •

    データのラベル付け、アルゴリズムの選択とトレーニング、デプロイの調整 と最適化を行い実行 https://d1.awsstatic.com/webinars/jp/pdf/services/20190206_AWS_BlackBelt_SageMaker_part1.pdf 150
  101. Amazon Bedrock AgentCore AgentCore とは? • AI エージェントの構築・デプロイ・スケーリングを提供 • Runtime、Gateway、Memory

    などの複数コンポーネント • 任意のフレームワーク(LangChain 等)のエージェントをデプロイ可能 https://aws.amazon.com/jp/bedrock/agentcore/ 151
  102. AgentCore のコンポーネント Runtime Gateway Identity エージェント実行環境 ツール接続・MCP 変換 認証認可の管理 Memory

    Policy Evaluations 会話記憶(短期・長期) 行動制御(Preview) 品質モニタリング(Preview) Observability Code Interpreter Browser 運用監視・トレース サンドボックスコード実行 サーバーレス Web 操作 https://aws.amazon.com/jp/bedrock/agentcore/ 152
  103. IaC(Infrastructure as Code) とは? • 安全で一貫性のある展開 ◦ コード化による信頼性、再利用性と共有性、予測可能な管理 • 標準化されたワークフロー

    ◦ 直感的な記述、チーム間の統一、依存関係の自動管理 • インフラの追跡管理 ◦ 状態ファイルによる正確な把握、安全な変更管理、迅速な復旧と再現 155
  104. Terraform とは? • マルチプロバイダー対応 ◦ AWS, Google Cloud, Azure etc...

    • 統一された管理方法 ◦ モジュール化による再利用、プロバイダー間のリソースを組み合わせ可能 • 効率的なデプロイメントフロー ◦ Initialize → Plan → Apply のサイクル 156
  105. Terraform のライフサイクル 1 Scope 2 プロジェクトに必要なインフラの特定 3 Initialize 必要なプラグイン等のインストール 5

    Author インフラの構成を記述 4 Plan 記述した構成の変更をプレビュー Apply 計画された変更を実行 https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code 157
  106. 早速 Terraform を触ってみる 1. Terraform で nginx コンテナを立ち上げる 2. Terraform

    の基本を学ぶ https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code 158
  107. terraform init environments/xxx/nginx で実行 $ cd environments/xxx/nginx $ terraform init

    1. プロバイダーのダウンロードとインストール 2. バックエンドの初期化 3. モジュールのダウンロード 162
  108. terraform init(初期化) Initializing the backend... modules/nginx/nginx.tf が使用される Initializing modules... -

    nginx in ../../../modules/nginx Initializing provider plugins... - Finding kreuzwerker/docker versions matching "~> 4.0.0"... - Installing kreuzwerker/docker v4.0.0... … Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. … Terraform has been successfully initialized! 自動生成され、 選定したプロバイダーの情報を記録 You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. … 163
  109. terraform plan environments/xxx/nginx で実行 $ terraform plan 記述した構成の変更をプレビュー ※ Rancher

    Desktop の場合は -var="docker_host=unix://$HOME/.rd/docker.sock" を付ける 164
  110. terraform plan(計画) Terraform used the selected providers to generate the

    following execution plan. Resource actions are indicated with the following symbols: “nginx” module の + create “nginx” という名前の “docker_container” resource を構築 Terraform will perform the following actions: # module.nginx.docker_container.nginx will be created + resource "docker_container" "nginx" { + attach = false … } # module.nginx.docker_image.nginx will be created + resource "docker_image" "nginx" { + id = (known after apply) “nginx” module の “nginx” という名前の … “docker_image” resource を構築 } Plan: 2 to add, 0 to change, 0 to destroy. 165
  111. terraform apply environments/xxx/nginx で実行 承認フローをスキップ --auto-approve は無くても OK $ terraform

    apply --auto-approve 計画された変更を実行 ※ Rancher Desktop の場合は -var="docker_host=unix://$HOME/.rd/docker.sock" を付ける 166
  112. terraform apply(実行) Terraform used the selected providers to generate the

    following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # module.nginx.docker_container.nginx will be created plan と同じように作成するステップが走る + resource "docker_container" "nginx" { + attach = false … } # module.nginx.docker_image.nginx will be created + resource "docker_image" "nginx" { 本来は承認ステップが入る + id = (known after apply) ... } Plan: 2 to add, 0 to change, 0 to destroy. module.nginx.docker_image.nginx: Creating... module.nginx.docker_image.nginx: Creation complete after 6s 対象のリソースが作成される [id=sha256:2c9168b3c9a84851f91e03534dc4136951e9f581ab3ac8ee38b28b49ad57ba38nginx] module.nginx.docker_container.nginx: Creating... module.nginx.docker_container.nginx: Creation complete after 1s [id=9eee7200841c6b8b54153f20ce4f9eb1afffad6ba2d3f2c4c33d9aff6ebf8ed1] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. 167
  113. terraform destroy environments/xxx/nginx で実行 承認フローをスキップ --auto-approve は無くても OK $ terraform

    destroy --auto-approve 構築されたリソースを削除 ※ Rancher Desktop の場合は -var="docker_host=unix://$HOME/.rd/docker.sock" を付ける 168
  114. terraform destroy(破壊) ... Terraform used the selected providers to generate

    the following execution plan. Resource actions are indicated with the following symbols: - destroy Terraform will perform the following actions: リソースを破壊する際にどうなるかの記載 # module.nginx.docker_container.nginx will be destroyed - resource "docker_container" "nginx" { - attach = false -> null … } # module.nginx.docker_image.nginx will be destroyed 本来は承認ステップが入る - resource "docker_image" "nginx" { - id = "sha256:2c9168b3c9a84851f91e03534dc4136951e9f581ab3ac8ee38b28b49ad57ba38nginx" -> null … } Plan: 0 to add, 0 to change, 2 to destroy. module.nginx.docker_container.nginx: Destroying... [id=9eee7200841c6b8b54153f20ce4f9eb1afffad6ba2d3f2c4c33d9aff6ebf8ed1] 対象のリソースが破棄される module.nginx.docker_container.nginx: Destruction complete after 0s … [id=sha256:2c9168b3c9a84851f91e03534dc4136951e9f581ab3ac8ee38b28b49ad57ba38nginx] module.nginx.docker_image.nginx: Destruction complete after 0s Destroy complete! Resources: 2 destroyed. 169
  115. tfstate について(apply 後) environments/xxx/nginx/terraform.tfstate { "version": 4, "terraform_version": "1.14.0", …

    “docker_container” が "resources": [ { ある “状態” が記載される "module": "module.nginx", "type": "docker_container", "name": "nginx", "provider": "provider[\"registry.terraform.io/kreuzwerker/docker\"]", ... “docker_image” が }, { ある “状態” が記載される "module": "module.nginx", "type": "docker_image", "name": "nginx", "provider": "provider[\"registry.terraform.io/kreuzwerker/docker\"]", ... } ], "check_results": null } を参照 171
  116. Terraform module について modules/nginx を参照 module は 再利用可能 な Terraform

    の コードパッケージ module resource resource variable provider “docker_container” “docker_image” “environment” “container_ports” “kreuzwerker/docker” 172
  117. Terraform module について environments/xxx/nginx/main.tf を参照 module "nginx" { source =

    "../../../modules/nginx" tfstate にあった module.name は “nginx” environment = var.environment container_ports = var.container_ports providers = { docker = docker } } 今回の “xxx”, “yyy” のように 複数の環境から module を 再利用できる main.tf 173
  118. Variables(変数)について modules/nginx/variable.tf を参照 variable "environment" { description = "Environment name."

    } 環境を示すための “environment” 変数 variable "container_ports" { type = object({ internal = number external = number コンテナポートを示すための “container_ports” 変数 }) description = "Ports mapping for the Docker container." } variable.tf 174
  119. Variables(変数)について environments/xxx/nginx/variable.tf を参照 variable "environment" { default = "xxx" }

    module 使用側で変数の値を “xxx” という名前で定義 variable "container_ports" { default = { internal = 80 external = 8000 module 使用側で変数の値を “80”, “8000” でポートを定義 } } variable.tf 175
  120. Variables(変数)について environments/xxx/nginx/main.tf を参照 module "nginx" { source = "../../../modules/nginx" module

    が受け付ける変数に variables で定義した “environment” を代入 environment = var.environment container_ports = var.container_ports providers = { module が受け付ける変数に variables で定義した “container_ports” を代入 docker = docker } } main.tf 176
  121. terraform ブロック environments/xxx/nginx/provider.tf を参照 terraform { required_providers { 必要なプロバイダー(“docker”) とバージョンの指定

    docker = { source = "kreuzwerker/docker" version = "~> 4.0.0" 必要な Terraform のバージョンの指定が可能 } } required_version = ">= 1.14.0" tfstate ファイルの 保存場所を記載 backend "local" {} } provider.tf 177
  122. resource ブロック modules/nginx/nginx.tf を参照 resource "docker_container" "nginx" { image =

    docker_image.nginx.image_id name = local.container_name “どのリソース”、“何という名前” かを定義 ports { internal = var.container_ports.internal external = var.container_ports.external リソース固有のフィールド に値を代入する } } nginx.tf 179
  123. resource 間の参照 modules/nginx/nginx.tf を参照 resource "docker_image" "nginx" { ... }

    resource "docker_container" "nginx" { image = docker_image.nginx.image_id name = local.container_name “nginx” という名の “docker_image” resource の “image_id” を 参照する ports { internal = var.container_ports.internal external = var.container_ports.external } } nginx.tf 181
  124. make setup の実行 リポジトリのルートで実行 実行 $ make setup BUCKET_PREFIX=oyasumi-handson USER_NAME=ibaraki

    確認 $ git diff # myproject -> oyasumi-handson, your-name -> ibaraki に置換されていれば OK ※ BUCKET_PREFIX, USER_NAME は自分の識別子・名前に置き換えてください 185
  125. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 191
  126. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 192
  127. Terraform に起こすと terraform/aws/modules/network resource “aws_vpc” resource resource “aws_subnet” “aws_internet_ gateway”

    resource “aws_route_table” を参照 resource “aws_nat_gateway” resource resource “aws_route” “aws_security_ group” resource “aws_eip” resource “aws_network_acl” 195
  128. Terraform に起こすと module 間の依存関係 ecs module database module network module

    operation module output: vpc_id / public_subnet_ids / private_subnet_ids isolated_subnet_ids / private_route_table_ids 196
  129. Network module の構築 terraform/aws/environments/default/network で実行 $ cd terraform/aws/environments/default/network $ terraform

    init $ terraform plan $ terraform apply VPC, Subnet, NAT Gateway 等が作成されます (数分かかります) 197
  130. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 203
  131. Terraform に起こすと terraform/aws/modules/database resource “aws_rds_cluster” resource “aws_rds_ cluster_instance” resource “aws_db_

    subnet_group” を参照 resource “aws_secretsmanager_ secret” resource resource resource “aws_security_ group” “aws_scheduler_ schedule” “aws_iam_role” resource “aws_iam_policy” 206
  132. Database module の構築 terraform/aws/environments/default/database で実行 $ cd terraform/aws/environments/default/database $ terraform

    init $ terraform plan $ terraform apply Aurora クラスターの作成には 10〜15 分かかります 207
  133. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 213
  134. Operation module の構築 terraform/aws/environments/default/operation で実行 $ cd terraform/aws/environments/default/operation $ terraform

    init $ terraform plan $ terraform apply DB セットアップ用の EC2 と S3 バケット が作成されます 217
  135. DB セットアップ ./ で実行 $ make db-setup 手元の AWS CLI(profile

    default)から SSM 経由で Operation EC2 に実行を依頼 EC2 が自分の IAM ロールで Secrets Manager から パスワードを取得し、DB ユーザーとテーブルを作成 ※ apply 直後に失敗したら、数分待って再実行 222
  136. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 225
  137. Docker イメージの構築 ./ で実行 ibaraki は自分の名前に置き換え (make setup で設定した名前) $

    export USER_NAME=ibaraki $ docker build -t bookshelf:$USER_NAME -f api/Dockerfile . 226
  138. Docker イメージの構築 ./ で実行 想定通りの image, tag なら OK $

    docker image ls REPOSITORY TAG bookshelf ibaraki IMAGE ID 13b3c54a2fd9 CREATED SIZE 44 seconds ago 10.6MB 227
  139. 構築(bucket key の確認) terraform/aws/environments/default/ecr/provider.tf ※ make setup 実行後は修正不要 terraform {

    required_providers { aws = { source = "hashicorp/aws" version = "~> 6.0" } } make setup で 自動設定済み backend "s3" { bucket = "myproject-terraform-state" # make setup で置換済み key = "ecr/terraform.tfstate" # make setup で置換済み region = "ap-northeast-1" encrypt = true profile = "default" make } setup で 自動設定済み } provider.tf 228
  140. AWS CLI を実行する(再掲) 4. AWS CLI の実行 option: profile, region,

    etc... ※ default 以外の profile を使うときは、環境変数 か --profile で指定する AWS_PROFILE command: s3, ec2, iam, etc... $ aws s3 ls --profile=default > 2026-04-10 00:02:39 myproject-terraform-state 今回はバケットの 情報が出れば OK 229
  141. ECR module の構築 terraform/aws/environments/default/ecr で実行 $ cd terraform/aws/environments/default/ecr $ terraform

    init $ terraform plan $ terraform apply コンテナイメージを置く ECR リポジトリが 作成されます 230
  142. ECR リポジトリの URL 取得 terraform/aws/environments/default/ecr/ で実行 今回の対象 module を特定 $

    terraform init $ terraform output -raw repository_url module の output を参照 231
  143. ECR にログイン terraform/aws/environments/default/ecr/ で実行 ECR にログインする $ aws ecr get-login-password

    --region ap-northeast-1 --profile default | docker login --username AWS --password-stdin $REPO_URL シェル変数があることを確認 profile を適用 238
  144. Docker イメージの再確認 terraform/aws/environments/default/ecr/ で実行 想定通りの image, tag なら OK $

    docker image ls REPOSITORY TAG bookshelf ibaraki IMAGE ID 13b3c54a2fd9 CREATED SIZE 44 seconds ago 10.6MB 239
  145. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 245
  146. Terraform に起こすと terraform/aws/modules/ecs を参照 resource resource resource “aws_cloudwatch_log_group” “aws_lb_listener” “aws_ecs_task_definition”

    resource resource resource “aws_lb_target_group” resource resource “aws_lb” “aws_ecs_service” “aws_iam_role” “aws_ecs_cluster” resource resource resource resource “aws_iam_policy” “aws_iam_role_policy_attachment” “aws_security_group” “aws_security_group” 248
  147. AWS CLI を実行する(再掲) 4. AWS CLI の実行 option: profile, region,

    etc... ※ default 以外の profile を使うときは、環境変数 か --profile で指定する AWS_PROFILE command: s3, ec2, iam, etc... $ aws s3 ls --profile=default > 2026-04-10 00:02:39 myproject-terraform-state 今回はバケットの 情報が出れば OK 250
  148. 構築(bucket key の確認) terraform/aws/environments/default/ecs/provider.tf を参 照 terraform { required_providers {

    aws = { source = "hashicorp/aws" make setup で設定済み version = "~> 6.0" } } backend "s3" { bucket = "myproject-terraform-state" key = "ecs/terraform.tfstate" # make setup で置換済み region = "ap-northeast-1" encrypt = true profile = "default" } provider.tf make setup で設定済み make setup で設定済み } 251
  149. 構築(bucket key の確認) terraform/aws/environments/default/ecs/data.tf を参照 ※ make setup 実行後は修正不要 data

    "terraform_remote_state" "network" { backend = "s3" config = { bucket = "myproject-terraform-state" # make setup で置換済み key = "network/terraform.tfstate" # make setup で置換済み region = "ap-northeast-1" profile = "default" } } data "terraform_remote_state" "ecr" { backend = "s3" config = { bucket = "myproject-terraform-state" # make setup で置換済み key = "ecr/terraform.tfstate" # make setup で置換済み region = "ap-northeast-1" profile = "default" } } data "terraform_remote_state" "database" { backend = "s3" config = { bucket = "myproject-terraform-state" # make setup で置換済み key = "database/terraform.tfstate" # make setup で置換済み region = "ap-northeast-1" profile = "default" } } make setup で 自動設定済み data.tf 252
  150. ECS module の構築 terraform/aws/environments/default/ecs で実行 $ cd terraform/aws/environments/default/ecs $ terraform

    init $ terraform plan $ terraform apply ALB, ECS Cluster / Service, IAM Role 等が作成されます (数分かかります) 253
  151. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 260
  152. CloudFront URL の確認 terraform/aws/environments/default/cloudfront で実行 $ terraform output app_url >

    "https://xxxxxx.cloudfront.net" この URL でアプリケーションにアクセスできます (HTTPS) 264
  153. アプリケーションの確認(API) 書籍データを登録してみる xxxxxx は自分の CloudFront ドメインに置換 curl -X POST \

    https://xxxxxx.cloudfront.net/api/v1/books \ -H "Content-Type: application/json" \ -d '{ "title": "テスト書籍", "author": "テスト著者", "isbn": "1234567890123", "publisher": "テスト出版社", "description": "これはテスト用の書籍データです。" }' 269
  154. ハンズオン 1. Network module を構築 2. Database module を構築 3.

    Operation module を構築 4. Docker イメージを ECR に push 5. ECS module を構築 6. CloudFront module を構築 7. 疎通確認 8. リソースの削除 271
  155. リソースの削除(tfstate) ./ で実行 $ aws s3 rb s3://myproject-terraform-state --force --profile

    default tfstate 用の S3 バケットは手で作ったので手で消します myproject は make setup で指定した BUCKET_PREFIX に読み替え 279
  156. コスト管理 • 予算に収まるよう開発してください ◦ 意識するための仕組みを入れる ex. 日次で Slack に通知する ◦

    不要なインスタンスは停止する ◦ IaC で作成する場合にはデフォルト値に気をつける 281