K's Atelier

個人的な学習記録

AWS公式コースウェアの読み込み方

知ってる人は知ってると思うが,AWS公式トレーニングは目の玉飛び出るくらい高額。

「ちょっと聞いてみるか」という気持ちにはとてもなれない。

もし万が一受講する機会があったら,徹底的に情報を吸い出した方がいい。その方法の一例を書き残しておく。これは講師の講座準備作業と同じなのだ。

結論

文書中の図,絵を書き写すこと。書き写した図に,文章から読み取ったことを書き加えていくこと。

公式トレーニングの構成

公式トレーニングは,「テキスト」「ラボ」の2つから構成される。トレーニングによってはラボがない。

テキスト

テキストは,モジュールに分かれる。モジュールは一般書籍でいう「章」にあたる。この中がさらにいくつかに分割されることもある。特定の名称がないので,章のさらに下位の単位を本記事では「セクション」と呼んでおく。

ラボ

たいていのトレーニングには,複数のラボが入っている。「ラボ1」「ラボ2」という具合だ。各ラボは「タスク」に分かれる。タスクには操作の概略的な名前がつけられている。「S3バケットを作成する」という感じ。タスクによってはさらに内容が分割される。最小単位は管理コンソールの1操作に対応していて,ラボごとに通番が振られている。

ラボについての注意点が一つある。ラボは「手順書」になっている。手順ではなく,「ラボの目的」と「ラボ内のサービス構成」を把握しよう。手順はAWSのサービス改訂によってどんどん変わってしまうが,「目的=やりたいこと」と「サービスの基本構成」は簡単には変わらない。

コースウェア読込戦略

テキスト

テキストは,「セクション」単位で読み込めれば完璧。「章」でも読み込み方は同様なので,まとめ方のコツを以下に記述する。

まとめとして,以下の項目を整理していく。

  1. タイトル(章タイトル,セクションタイトル)
  2. 扱う課題
  3. 該当する設計原則
  4. 対応するAWSのソリューション群
  5. 印象的な図

章,セクションともに,通常は「そもそもの課題」が記載される。「CIOから『組織が複雑化してきたのだが,AWSアカウントの管理をどうすればよいか』」といったものだ。対象のセクションを理解する動機になるので抜き書きしておく。単なるAWSサービスの紹介から始まったときは,そのAWSサービスの紹介そのものが課題を表現している。

該当する設計原則は,AWS固有で言うならWell-Architected Frameworkだ。これを当てはめて課題を解決するのがSolution Architectの仕事なので,「専門家としてどういう方向にもっていくか」ということで考える。設計原則は,テキストには直接載っていないことの方が多いので,W-A Frameworkのサイトを確認しながら自分で考える。設計原則に関しては,AWSだけに縛られるものではない。Microservice Architecture, The Telve-Factor Appなどいろいろなものを総合する。妥当性が求められる部分でもあるので,少ないよりは多い方が良い。AWSしか分からないのはSolution Architectとしてはまずい。

あとは,課題を設計原則に沿って考えたときのソリューションとしてのAWSのサービスをまとめる。

最後に,印象的な図。特に構成図は可能な限り「色付きのペンを使って」ノートに描く。手書きしていくと「あれ?なんでここからここにつながるの?」というところが出てくる。疑問点が視覚的に分かるのでやった方が良い。

これをやると,3日間コースで30-40個くらいのまとめができる。

ラボ

ラボは「ラボガイド」という文書化されたものがある。これを落ち着いて確認するのが大切。

ラボのまとめ方は以下の通り。

  1. ラボタイトル
    1. シナリオ
  2. タスク
    1. 構成図
    2. AWSサービス

ラボには,ラボの動機になるシナリオが含まれていることがある。こういったものは書き写しておく。

タスクには構成図があるものとないものがある。図がある場合は必ず手書きで書き写す。なぜかというと,「実際にラボの環境を確認して書き足す」ため。たいていの図は最低限のことしか書いていない。ラボの前提となるRoleや,Logging系のサービスなどは省略されている。Route Tableの設定も記載されていない。また,特定の手順でどこを操作するかも書かれていない。こういうことを追記するために,先に図を手書きしておくのだ。

もし,タスクに構成図が無いときは,AWSサービスのアイコンを書こう。アイコンを何度も書いていると,サービスを視覚的に識別できるようになる。Security系のサービスやVPC周りなど,似たようなアイコンがたくさん存在するので,視覚的に識別できると作業がはかどる。

ラボは以上のように,「一度頭の中で整理してから」実施するのが本来の筋だ。そうでないと単なる「手順通りに操作しました」になってしまう。残念ながら講座実施中はそんな時間は無いはずなので,受講者は受講後に自分で振り返ることになる。

読み込みの手間と成果

教材の読み込みには相当の時間がかかる。ただし,きちんと手を動かして読み込みをした人には想像以上の成果が得られるはずだ。

個人的には,絵を描いていること自体が楽しい。

追記

応用編として,「ラボ環境をCloudFormationで再現する」くらいまでできれば,プロトタイプ作成能力として実務でも通用するだろう(かなりの作業時間がかかるが)。ラボは最低限の設定しかされておらず,特にロギング系の設定がないので,「ここはどういう経路で通信してるんだろう?」といった疑問を解消できないのだ。自力で構築できれば,幅広く疑問を追求できる。

VPCの実験用CloudFormationテンプレート

簡単なVPC実験用CloudFormationテンプレート。

AWSTemplateFormatVersion: 2010-09-09
Resources:
  # VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default



  # Internet Gateway
  IGW1:
    Type: AWS::EC2::InternetGateway
    Properties: 
      Tags: 
        - Key: stack
          Value: test

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId:
         Ref: IGW1

  # Route Table
  publicRT:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
      - Key: stack
        Value: test

  publicRoute:
    Type: AWS::EC2::Route
    Properties:
       RouteTableId: !Ref publicRT
       DestinationCidrBlock: 0.0.0.0/0
       GatewayId: !Ref IGW1
       
  # Subnets
  Subnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 172.0.0.0/24
      MapPublicIpOnLaunch: false

  Subnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 172.0.1.0/24
      MapPublicIpOnLaunch: false
      
  Subnet1RT:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref Subnet1
      RouteTableId: !Ref publicRT

  # Security Group
  SG1:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow https to client host
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
          
  # IAM Role for SSM access
  ### Create IAM Role
  SSMRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      Path: /
      Policies:
        - PolicyName: ssmAccess
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "ssmmessages:CreateDataChannel"
                  - "ssm:UpdateInstanceInformation"
                  - "ssmmessages:OpenDataChannel"
                  - "ssmmessages:OpenControlChannel"
                  - "ssmmessages:CreateControlChannel"
                Resource: '*'
  SSMInstanceProfile:
    Type: 'AWS::IAM::InstanceProfile'
    Properties:
      Path: /
      Roles:
        - !Ref SSMRole

ssm-endpoint

確認したいこと

Management ConsoleのSession Manager越しにEC2インスタンスに接続するとき,自分がどういう通信経路をたどってEC2インスタンスに接続しているのかを確認したい。→VPCフローログでできる。

背景

VPC構成

A.1. public subnet。EC2インスタンス(public-host)がある。

A.2. private subnet。EC2インスタンス(private-host)がある。 

この環境だと,public-hostにはSSMで接続できるが,private-hostには接続できない。

ここで,private subnetにssm用のVPC endpointを作成すると,private-hostにSSM接続できるようになる。

このとき,public-hostは,private subnet上にあるVPC endpointを経由する経路に切り替わるのか?それとも相変わらずインターネット経由なのか?

仮説

VPC endpointなしでpublic-hostに接続できる,ということは,Internet Gatewayを経由している,ということだ。なので,private subnetのVPC endpoint越しにpublic-hostがSSM接続できるのであれば,Internet Gatewayを削除してもpublic-hostにそのままつながる。ただしこれだと,単に今までのpublic subnetがprivate subnetになっただけなので,大した違いはない。

Internet GatewayVPCにアタッチされている状態での経路を確認したい。

 

こういうことが気になりだすと,AWSではなくてLinuxのネットワークコマンドに詳しくないと難しい。これはStack OverflowとかRe:Postに投稿するしかなさそうだな・・・

 

参考

【初心者向け】VPCエンドポイントとAWS PrivateLinkの違いを実際に構築して理解してみた | DevelopersIO

VPCエンドポイント経由のVPCフローログ取得範囲について理解する | DevelopersIO

新機能 – VPC Reachability Analyzer | Amazon Web Services ブログ

EC2に対して SSH 接続した履歴、または、Systems Manager Session Manager で接続した履歴はどこに保持されていますか? | DevelopersIO

AWS FAQs

学習する上では「疑問」から入るのが鉄則なので,FAQは重要。とはいえ,AWSの場合はサービスがたくさんありすぎて,どれをいつ確認したのか自体が分からなくなってくるので,適当にリストを作っておく。

Solution Architectセット

Architecting on AWSで紹介されている方々。

Well-Architected

AWS Well-Architected Tool FAQs | Amazon Web Services

Security

IAM FAQs

AWS Organizations FAQs - Amazon Web Services

FAQs | AWS Key Management Service (KMS) | Amazon Web Services (AWS)

Network

Amazon VPC FAQs

AWS Direct Connect | FAQ | Amazon Web Services (AWS)

AWS Transit Gateway FAQs - Amazon Web Services

Compute

Amazon EC2 FAQs - Amazon Web Services

Amazon EBS FAQs - Amazon Web Services

AWS Lambda – FAQs

Storage

Amazon Simple Storage Service (S3) — Cloud Storage — AWS

Amazon Elastic File System (EFS) | Cloud File Storage | FAQs

Amazon FSx for Lustre FAQs Page- Amazon Web Services

Database

Amazon RDS FAQs | Cloud Relational Database | Amazon Web Services

Amazon DynamoDB FAQs | NoSQL Key-Value Database | Amazon Web Services

Amazon ElastiCache FAQs

Monitoring and Auto Scaling

Amazon CloudWatch FAQs - Amazon Web Services (AWS)

Amazon EventBridge FAQs | Event Bus | Amazon Web Services

AWS Auto Scaling FAQs

Network Traffic Distribution – Elastic Load Balancing FAQs – Amazon Web Services

Automation

AWS CloudFormation FAQs

AWS Elastic Beanstalk FAQs - Amazon Web Services (AWS)

Containers

Fully Managed Container Orchestration – Amazon Elastic Container Service (Amazon ECS) FAQs – AWS

Serverless Compute Engine – AWS Fargate FAQs – Amazon Web Services

Serverless

Amazon API Gateway FAQs | API Management | Amazon Web Services

Amazon SQS FAQs | Message Queuing Service | AWS

Amazon Simple Notification Service (SNS) FAQs | Messaging Service | AWS

Edge services

FAQs | What is Amazon Cloudfront CDN?

Amazon Route 53 FAQs - Amazon Web Services

FAQs - AWS Shield - Amazon Web Services (AWS)

FAQs - AWS WAF - Amazon Web Services (AWS)

Backup

AWS Backup | Centralized Cloud Backup | FAQs

その他

AWS認定資格でときどき登場する方々。

Kinesis

Amazon Kinesis Data Streams FAQs | Amazon Web Services

Amazon Kinesis Data Firehose FAQs - Streaming Data Pipeline - Amazon Web Services

AWS Glue

AWS Glue FAQs | Serverless Data Integration Service | Amazon Web Services

感想

公式ドキュメントとしては,FAQと,ドキュメント中の「絵」を先に眺めておくといいと思う。

もっとも,仮想化技術は前提となる「具体的技術」を知らないと,何がうれしいのか分からないということがある。具体的技術を知っている人にとっては,もともとの苦労が分かっているから「仮想化されて物理制約を受けないのでうれしい」と言える。具体的技術を知らない人が仮想化技術から入ると,もともと苦労したことがないので,仮想化されても「便利になった」感が無いのだ。

学習にはある程度の苦労が伴う。

AWS Gateways

Gateway多すぎ

インフラだからルーティングの嵐なのは分かるのだが,それにしても名前と使われ方が分かりにくい。以下,ほとんどの人にとってはSolutions Architect ProfessionalとかAdvanced Network SpecialtyとかのAWS認定試験にしか利用価値のない情報と思われるが,何とか整理してみる。

VPCの基本的なGatewayたち

彼らは割と素直。

Internet Gateway

インターネットに接続するためのルータ。VPCに設定する。

Connect to the internet using an internet gateway - Amazon Virtual Private Cloud

NAT Gateway

NAT(Network Address Translation)を行う。Public Subnetに設置する。Private SubnetがInternetに接続する際の送信先になる。

NAT gateways - Amazon Virtual Private Cloud

Direct Connectと言われると出てくるGatewayたち

これがとにかく分かりにくい。個人で気楽に試せるものではないから最後まで納得いかない感がある。

https://docs.aws.amazon.com/images/directconnect/latest/UserGuide/images/direct-connect-overview.png

そもそも専用線接続は,いきなりオンプレとVPCを接続できない。

場所としての登場人物が3つある。

  • On-Premises
  • Dicrect Connect Location
  • AWS (VPC or Regional Services)

さらにややこしいのは,物理的な専用線接続とVPNの話が混在していること。

Customer Gateway

オンプレミス側に設置されているSite-to-Site VPNの終端。

https://docs.aws.amazon.com/images/vpn/latest/s2svpn/images/vpn-how-it-works-vgw.png

図の通り,VPC側にVirtual Private Gateway,On-premises側にCutomer Gatewayを設置して,VPN接続を通す。

How AWS Site-to-Site VPN works - AWS Site-to-Site VPN

Your customer gateway device - AWS Site-to-Site VPN

Virtual Private Gateway

Direct Connect接続やVPN接続のVPC側の終端。VPCに設置できるVirtual Private Gatewayは一つなのだが,Virtual Private Gatewayは最大10個までのSite-to-Site VPNを接続できる。この辺りの数の対応関係を整理しておかないと,非常に混乱する。

Virtual private gateway associations - AWS Direct Connect

Direct Connect Gateway

Direct ConnectでVPC同士を接続する際のGateway。Direct Connect GatewayにVirtual Private Gatewayを設定することで,VPC同士をつなぐ。

Virtual private gateway associations - AWS Direct Connect

Transit Gatewayと言われると出てくるGateway

Transit Gateway

沢山あるVPCのルーティングを集中管理したい,というときに使う。

https://docs.aws.amazon.com/images/vpc/latest/tgw/images/transit-gateway-overview.png

How transit gateways work - Amazon VPC

Transit Gatewayはルーティングの整理手段としては確かに美しいのだが,料金体系が変更されていたりする。この,ある日料金体系が変わる,というのはCloud特有の頭痛の種なのではないか。

[小ネタ]AWS Transit GatewayのAZ間通信が無料になった件について絵を描いて理解してみる | DevelopersIO

IPv6と言われると出てくるGateway

Egress-only Internet Gateway

IPv6パケットをインターネットに送信する際に使用する。

Enable outbound IPv6 traffic using an egress-only internet gateway - Amazon Virtual Private Cloud

 

Virtual Interfaceくんたち

事態をさらに複雑にしてくれるVirtual Interfaceくんたち。re:Postにも質問回答がある。

Use a public, private, or transit interface for Direct Connect | AWS re:Post

Create a virtual interface - AWS Direct Connect

Private Virtual Interface

Private IPでVPCに接続するときのInterface。

Public Virtual Interface

S3などのRegional Servicesに接続するときのInterface。

Transit Virtual Interface

Transit GatewayにDirect Connectを接続するときのInterface。

感想

書いて整理したらいくらか分かるかと思ったら,かえって自信がなくなった・・・

こういうものは必ずしも整理しながら開発されておらず,「この機能の組合せだと煩雑だから新しいの作りました」の積み重ねだ。名前にしろ,機能にしろ,整理するのは難しいものがある。

O'Reillyサブスクリプション

O'Reillyのサブスクリプションサービスの説明を受ける機会があった。

https://www.oreilly.com/online-learning/try-now.html

 

この O'Reillyのプラットフォーム,洋書の一般技術書に関してはほとんど網羅できている感じがする。O'Reillyに加えて,Manning,Packtなどの出版社も入っているので網羅性は高い。

ただ,会社など,組織を介して使用するときには気になることが一つある。「検索キーワードを組織が把握できる」のだ。検索キーワードは「こんな言葉には何がひっかかるかな」という軽い気持ちで入力するものもあるはずだが,そういったものも記録に残っている。「会社で登録してるんだから会社が把握するのは当たりまえでしょ」と言えばそうなのだが,気軽に検索できないことに変わりはない。

個人の年間サブスクリプションを考えると,O'Reillyを毎月平均2冊読む人であれば,元が取れると思われる。自分の関心事に対して神経質な人は,個人で契約した方がいいかもしれない。

 

O'Reillyの品ぞろえでちょっと残念なのは,日本の出版社が入っていないこと。技術評論社翔泳社などがない。「最新技術は英語ですから」という話はあるが,技術的関心事には日本独自のものもある。一例が「要件定義」。要件定義は日本独自の商習慣,業務形態を背景に展開される。業務の前提が国内の法律なので当然だ。

 

今後は今まで以上に「文化の壁」を感じることになると思う。「言語の壁(英語力)」はもうほとんど壁になっていないからだ。

Badge Assessments

AWS Skillbuilderの中で取得できるバッジとしては,Cloud Quest以外に,テストに合格すると取得できるものがある。

以下の4つは,学習コースも用意されている。AWS認定資格とはまた違う方向なので,12資格の勉強に飽きてきた人におすすめできるかもしれない。

 

https://explore.skillbuilder.aws/learn/course/15000/solutions-architect-learning-plan-badge-assessment

https://explore.skillbuilder.aws/learn/course/14624/serverless-learning-plan-badge-assessment

https://explore.skillbuilder.aws/learn/course/12734/file-storage-learning-plan-badge-assessment

https://explore.skillbuilder.aws/learn/course/12811/data-protection-and-disaster-recovery-learning-plan-badge-assessment