話題の記事

AWS 認定ソリューションアーキテクト – アソシエイト レベル試験に合格する方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

awscert-000

今週から日本語でのAWS認定試験が始まります

現在急激に需要が高まっているAWS技術者について、どの程度サービスや関連技術を理解しているかチェックする試験が始まります。私は一足先にノリで英語版を受験しました。今回は、今週から始まる日本語でのAWS認定試験に合格するためにどこらへんを押さえておくべきか確認しておきたいと思います。ちなみに、クラスメソッド社員は全員持っていると言いたいですねー。

試験範囲は?

AWS社が公開しているBluePrintには以下のような記述があります。

要件を理解し、AWS アーキテクチャーのベストプラクティスを用いて構築するソリューションを定義することができる。 アーキテクチャーのベストプラクティスを、開発者およびシステム管理者に対してプロジェクトのライフサイクルを通じて助言できる。

これだけでは、どのAWSプロダクトを学べば良いのかよくわかりません。私は以下のように考えました。

実現したいビジネスのシナリオを踏まえて、AWSプロダクトの「機能」と「使いどころ」と「組み合わせ」を理解している。

それではBluePrintを読みながら理解を深めましょう!

AWSの知識

awscert-002

まずは基本的なAWSの知識についての問題です。AWSプロダクトの機能を全て詳細に憶えることは困難です。そこで、概要レベルと詳細レベルで憶えるべきプロダクトを選別しましょう。

  • AWS のコンピューティング、ネットワーキング、ストレージ、データベースサービスの実践的な使用経験
  • システムの伸縮自在性およびスケーラビリティの概念に対する理解
  • AWS に関連するネットワーク技術の理解
  • AWS が提供するセキュリティ機能およびツール全般と、従来型サービスとの連携に関する高度な理解
  • AWS (AWS SDK、AWS API、コマンドラインインターフェイス、AWS CloudFormation)の操作方法に関する深い理解
  • AWS のデプロイおよび管理サービスに関する実践経験

AWS のコンピューティング、ネットワーキング、ストレージ、データベースサービスの実践的な使用経験

ここから詳細に理解すべきAWSプロダクトを選びました。EC2、VPC、S3、EBS、RDSです。これらのプロダクトに関する理解は実践的である必要がありますので、詳細まで理解する必要があります。

システムの伸縮自在性およびスケーラビリティの概念に対する理解

ここから詳細に理解すべきAWSプロダクトを選びました。Auto Scaling、CloudWatch、ELB、Beanstalkです。これらのプロダクトに関する理解は機能レベルで構いません。ベストプラクティスとなる組み合わせを押さえておいてください。

AWS に関連するネットワーク技術の理解

ここから詳細に理解すべきAWSプロダクトを選びました。VPC、Secyrity Group、Network ACLです。これらのプロダクトに関する理解は必要です。また、ネットワーク技術の理解ですので、AWSに限らず一般的な知識も必要になってきます。おそらく、Firewall、VPN、NATに関する知識は押さえておくべきポイントです。

AWS が提供するセキュリティ機能およびツール全般と、従来型サービスとの連携に関する高度な理解

ここから詳細に理解すべきAWSプロダクトを選びました。IAMです。その他、AWSが持っている基本的なセキュリティ機能については詳細に理解する必要があります。従来型サービスとの連携というのは、ID Federationのことでしょうか。

AWS (AWS SDK、AWS API、コマンドラインインターフェイス、AWS CloudFormation)の操作方法に関する深い理解

ここから詳細に理解すべきAWSプロダクトを選びました。IAM Role、AccessKey/SecretKeyです。AWSは、全てのプロダクトにSDKやAPIが用意されていますが、これらのSDKやAPIを全て憶えることはほぼ不可能です。そこで、範囲を絞ってみたいと思います。EC2に関するAPI操作をコンソールを使って実行する場合のコマンド名とオプション指定についてです。CloudFormationはブログを読めば大丈夫だと思います。JSONフォーマットを暗記する必要はありません。

AWS のデプロイおよび管理サービスに関する実践経験

ここから詳細に理解すべきAWSプロダクトを選びました。Management Consoleです。機能レベルでは、Beanstalk、CloudWatchです。

IT全般の知識

awscert-001

ちょっと厄介な試験範囲ですよねw。まぁエンタープライズ系のシステム開発やインフラ管理の実務経験のある人を中心に合格させたい雰囲気が出ています。

  • 大規模配信システムの設計に関する専門的な経験
  • ウェブサーバー(Apache、nginx、IIS)、キャッシング、アプリケーションサーバー、ロードバランサーなど、一般的な多層アーキテクチャーに関する高度な理解
  • RDBMS(MySQL、Oracle、SQL Server)、NoSQL
  • メッセージキューおよびエンタープライズサービスバス(ESB)に関する知識
  • 疎結合およびステートレスシステムに関する知識
  • 配信システムにおける各種整合性モデルについての理解
  • Contents Delivery Network に関する経験、およびパフォーマンスコンセプトの理解
  • ルートテーブル、アクセスコントロールリスト、ファイアウォール、NAT、HTTP、DNS、IP、OSI 参照モデルに関するネットワーク知識および経験
  • RESTful ウェブサービス、XML、JSON に関する知識
  • ソフトウェア開発ライフサイクルに関する理解
  • 公開キー暗号化、SSH、アクセス認証情報、X.509
  • 証明書など、情報およびアプリケーションセキュリティに関する経験

大規模配信システムの設計に関する専門的な経験

システムの最大のボトルネックはディスクです。物理的に読み書きをするスピードが最も遅い。だから、ディスクまでユーザのトランザクションが届かないようにすることが基本戦略です。キャッシュを使いましょう。どうしても大量のトランザクションが届く場合には高性能なディスクを使いましょう。

ロジックを実行するサーバが急激な負荷状態になると応答が遅延したり落ちますので、負荷に応じたスケールアウトをさせましょう。さらに、リアルタイムに処理をしなければならないリクエスト以外はキューイングするなど、同期処理と非同期処理を見定めましょう。

障害に対する復旧についても最初から対応できるように設計しておきましょう。例えば、ディスク障害、アプリ障害、サーバ障害、データセンター障害、リージョン障害など、あらゆる障害レベルに対してできるだけサービスレベルを落とさずに運用できるように準備しましょう。これらを実現するAWSのプロダクトについて理解を深めましょう。AMI、EBS Snapshot、DynamoDB、SNS、SQS、EBS backed Instace、Region、AZ、ElastiCache、ELB、Route 53、HealthCheckなどが押さえておくべきキーワードかと思います。

ウェブサーバー(Apache、nginx、IIS)、キャッシング、アプリケーションサーバ ー、ロードバランサーなど、一般的な多層アーキテクチャーに関する高度な理解

Apache、ngins、IISの具体的な記述については出題されないと思っています。それよりも、何が設定できるのかを押さえておくべきです。例えば、HTTPヘッダや設定ファイルで指定できる項目についてです。レスポンスの圧縮、キャッシュ指定、名前バーチャルホスト、IPバーチャルホスト、SSL設定、リバースプロキシ、Cookieなど押さえておきましょう。

RDBMS(MySQL、Oracle、SQL Server)、NoSQL

MySQL、Oracle、SQL Serverの具体的な記述については出題されないと思っています。それよりも、RDSでどんなことができるのかをしっかり押さえておいてください。スナップショット作成、バックアップ/リストア、ディスクサイズ変更、インスタンスタイプ変更、Adminログイン、設定変更、同期レプリケーション、リードレプリカなどです。また、DB on EC2の場合のスナップショット作成手順については押さえておくべきポイントだと思います。次に、NoSQLですが、DynamoDBの特徴を押さえておきましょう。

メッセージキューおよびエンタープライズサービスバス(ESB)に関する知識

SQSは分散キューイングサービスですので特徴を押さえておきましょう。メッセージのロストを防止する代わりに、メッセージがダブる可能性があります。また順番も保証されません。順番を保ちつつ、1回のみ処理を確実に行う方法について押さえておきましょう。

キューは明示的に削除しないと消えません。同じキューを複数の人が取り出さないようにする仕組みについて要チェックです。

ESBって響きが懐かしいですw。SNSはPublisher/Subscriberモデルの分散通知サービスです。受けたメッセージを変換して送出することができます。また、複製して送出もできます。SNSとSQSの組み合わせはベストプラクティスです。

疎結合およびステートレスシステムに関する知識

AWSを語る上で、「疎結合」は最も重要なキーワードです。AWS社が提供するサービス/プロダクトの数と同時多発的にアップデートされる機能は、彼らが社内で疎結合なプログラミングを行っているからだと思います。

疎結合を実現するためにまず行うことがAPI化です。逆の言葉で、密結合とは何か考えていましょう。AプログラムからBプログラムを呼び出している一方で、BプログラムからAプログラムを呼び出しているとき、これらのプログラムは密結合しています。また、Bプログラムの内部構造の変更によって、Aプログラムの記述を修正しなければならない場合も密結合していると言えます。これらの例はプログラムコンポーネントレベルでの結合についてです。

次にシステムやサービス間の疎結合について考えてみます。あるサーバが落ちたときにサービス全体が落ちてしまう場合、サーバとサービスが密結合であると考えることもできます。あるプロセスが落ちたとき、あるディスクが壊れたとき、あるサーバが落ちたとき、あるロードバランサーが壊れたとき、あるデータセンターが壊れたとき、こういった場合にも疎結合にしておくことで、ある内部構造が不調になったとしてもサービス全体を落とさずに運用できるようになります。

それでは、あるサーバに急激な負荷が掛かった場合を考えてみましょう。急激な負荷によって他のユーザの処理をこれ以上受け付けられない状況になってしまいました。サーバの台数を増やさなければいけません。増やす際に既存のユーザへの影響を最小限にし、サービスを止めることなく展開しなければなりません。このサーバには、ユーザが入力した情報が一時的に保管されています。多数のログも吐き出されています。もし、ここでサーバが落ちてしまったら、ユーザが入力中の情報が消えて無くなってしまいます。そこで、考えるのがステートレスシステムです。

ステートレスとは、その名の通り状態を保持しないシステムです。状態を保持しないため、落ちても/追加で立てても問題ありません。状態はキャッシュサーバやデータベースに保存しています。もちろんキャッシュサーバやデータベースについても、落ちても全体に影響が少ないように設計しなければなりません。ELBはラウンドロビンとCookieによるリクエストの振り分けに対応しています。それぞれの特徴を掴んでおきましょう。

ここらへんの設計については、実現するために掛かる費用、実現するために必要な設計の複雑性、求められるビジネスのレベルなどに応じて選択する必要があるのですが、認定試験ではベストプラクティスを求めていますので以下のような構成が良いかと思います。

Route53+ELB+EC2x2+ElastiCachex2+RDSMultiAZ/DynamoDB+S3

AWSは、サービスとして高い可用性を実現しているサービスがありますので、これらを組み合わせて使うことで一部のコンポーネントが変更されたり、障害にあったりしても、サービス全体が落ちることを防ぐことができるのです。

Route53は複数のリージョンにまたがったサービスで、DNSレベルで名前解決を行うことができ、宛先のホストに問題がある場合はフェイルーバーすることができる優れものです。ELBはあるリージョン内の複数のデータセンターにあるサーバへ振り分けを行うことができます。障害が発生しているサーバを切り離すことが出来ます。Auto ScalingとCloudWatchを組み合わせれば負荷に応じてサーバ台数を増減させることができます。

EC2はLinuxやWindowsが動く仮想サーバです。あるインスタンスに障害が発生すると継続して使うことができなくなる可能性が高いです。そこで、2重化する必要が出てきますが、状態を保持したくないので、クラスタ化されたElastiCacheに保存します。これで負荷に応じてEC2インスタンスをいくらでも増減させることができます。ElastiCacheはインメモリなのでRDSよりも負荷に強いです。RDSはMultiAZ指定して、同期レプリケーションと自動フェイルオーバーによる早期復帰を実現します。DynamoDBであればIOPSを指定して高速なI/O性能を使うことが出来ます。

配信システムにおける各種整合性モデルについての理解

AWSといいますか、分散環境のサービスを利用するうえで理解すべきキーワードは、読み取り一貫性と結果整合性かと思います。これについては、以前ブログに書きましたのでご覧ください。

Amazon S3 の結果整合性と読み取り一貫性

Contents Delivery Network に関する経験、およびパフォーマンスコンセプトの理解

AWSのCDNといえば、CloudFrontですね。S3 Origin、Custom Origin、Invalication、URL based Expires、Streamingあたりのキーワードを押さえましょう。どんな組み合わせで何ができるかは以下ブログをご紹介します。

AWSにおける静的コンテンツ配信パターンカタログ(アンチパターン含む)

他にもこんなキャッシュコントロール方法についてもブログをご紹介します。

Amazon CloudFrontとRename Distributionパターンの実装

ルートテーブル、アクセスコントロールリスト、ファイアウォール、NAT、HTTP、 DNS、IP、OSI 参照モデルに関するネットワーク知識および経験

Amazon VPCについての理解を深めましょう。まずはじめに、CIDRについて理解してください。10.0.0.0/16の中に、サブネットとして10.0.0.0/24を定義するあたりは何となく行っている方が多いかと思います。ルーティングテーブルやサブネットの理解は必須です。Public/Protected/Privateなサブネットの定義と意味について理解してください。NATインスタンスをDestination CheckをDisableにしたりEIPを付与してPublicSubnetに置いてSecurityGroupを設定するあたりも重要です。

Amazon VPCでELBとNATを使ってよりセキュアな環境を作る【5日目】

RESTful ウェブサービス、XML、JSON に関する知識

うーん、適応にw

ソフトウェア開発ライフサイクルに関する理解

うーん、適当にw

公開キー暗号化、SSH、アクセス認証情報、X.509 証明書など、情報およびアプリ ケーションセキュリティに関する経験

IAMの全機能を管理コンソールからチェックしておけばOKです。

試験に出るプロダクト

awscert-003

AWSのアーキテクトと名乗るのであれば、全プロダクトを一度は使ってみたいものですが、試験に合格することを目指すのであれば、出ないプロダクトを勉強するのは時間がもったいないですね。そこで、おそらく試験に出やすいであろうプロダクトを確認したいと思います。

詳細レベルで押さえるプロダクト

これらを押さえていない方は確実に落ちますw。ほぼ全ての機能をチェックしつつ、最近公開された新機能についても押さえておいてください。AWSは「高い可用性」と「高いセキュリティ」と「高い耐障害性」をどのように実現しているか、また、自分で実現するにはどうしたら良いか確認する問題が出ると思います。

  • Amazon EC2:コンピューティング
  • Amazon VPC:仮想ネットワーク
  • Amazon S3:ストレージ
  • IAM:アカウント認証
  • Auto Scaling:スケーリング
  • Elastic Load Balancing:ロードバランサー
  • Amazon EBS:ディスク
  • Amazon Route 53:DNS
  • Amazon CloudFront:コンテンツ配信
  • Amazon RDS:データベースサービス
  • Amazon SQS:キューイング
  • Amazon SNS:メッセージング

機能レベルで押さえるプロダクト

詳細にとまではいかずともしっかり押さえたいプロダクトです。

  • Amazon DynamoDB:KVSサービス
  • Amazon CloudWatch:各種モニタリング
  • Amazon ElastiCache:キャッシュクラスタ
  • AWS Elastic Beanstalk:PaaS
  • AWS CloudFormation:環境テンプレート
  • Amazon Glacier:取り出しに時間掛かるけど非常に安いストレージ

概要レベルで押さえるプロダクト

これらのプロダクトは問題文の中に出てくると思います。何ができるのか概要を押さえておきましょう。

  • AWS Management Console:WEBから操作できるよ程度
  • Amazon CloudSearch:検索エンジン使えるよ程度
  • Amazon EMR:Hadoopクラスタ使えるよ程度
  • Amazon SWF:ワークフロー管理ができるよ程度
  • Amazon SES:メール配信できるよ程度
  • Amazon Redshift:データウェアハウスあるよ程度
  • Amazon Elastic Transcoder:動画変換できるよ程度
  • AWS DirectConnect:専用線がある程度
  • AWS Storage Gateway:オンプレストレージをクラウドに出せるよ程度
  • AWS Data Pipeline:処理をオーケストレーションできるよ程度
  • AWS OpsWorks:レシピ書けるよ程度
  • AWS Marketplaceおよび公開されているソフトウェア:第3者公開のソフトウェア使える程度
  • AWS Import/Export:既存のOSをインポートできる程度
  • Amazon FPS:APIで支払いできるよ程度
  • AWS CloudHSM:セキュリティ向上できるよ程度

要注意

日本語版の試験ではありますが、英語版をベースに作られているため、日本に展開されていないサービスや機能について出題される可能性があります。例えば、High I/Oなインスタンスや、PlacementGroupといった機能です。使ったことあるかどうかに関係なく押さえておいて損はないと思います。

まとめ

AWS 認定ソリューションアーキテクト – アソシエイト レベル試験に合格できそうでしょうか?この試験は、基礎レベルの試験です。上位の試験はどんなに難しいのかと不安になりますが、ご安心ください。クラスメソッドのブログを毎日読んでいれば合格できるはずです。当社のスタッフは、AWSの全機能ついて実務や研究で実際に使っています。また、AWSチーム全員が全レベルの試験を受験する予定です。一緒にがんばりましょう!!

参考情報

AWS 認定プログラムの概要