助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C03)
問題ID : 30367
問題を開く
ある企業の開発部では、開発中のWebアプリケーションのテスト環境をAWS上に構築することにした。テスト環境は同じ構成を複数のチームごとに作成して、並行してテストを進めたいという要望がある。
テスト環境の作成に最も適したアプローチはどれか。

正解

AWS CloudFormationのテンプレートを作成し、テンプレートを各チームで使用する

解説

AWS CloudFormationは、AWSのリソースをコード化しプロビジョニング(構築)するサービスです。
CloudFormationはいわゆるIaC(Infrastructure as Code)です。IaCとは、仮想化されたサーバーやデータベース、ネットワーク構成などの環境をコード(コンピュータが処理可能な形式)で定義し、それを実行することによって再現(構築)するという技術をいいます。IaCのメリットには、例えば以下のようなものがあります。
・同じ作業を別の人間が実施できる
・同じ、または似た構成の環境を何度も作成できる
・環境がコード化されていることにより、リソース量やパラメータなど環境の変更管理が容易になる

本設問のケースのように同じ環境を複数作成したいような場合には、CloudFormationのテンプレート(コード)を共有することで実現できます。また、例えばあるAWSリソースのパラメータを変更した場合でも、更新したテンプレートを再共有することによりミスなく伝達することができます。

以上より正解は
・AWS CloudFormationのテンプレートを作成し、テンプレートを各チームで使用する
です。

その他の選択肢については以下の通りです。

・AWS CLIを利用し、環境作成時のコマンドラインをチームで共有する
AWS CLIはAWSのコマンドラインツールです。
AWSリソースの作成や操作を行うことはできますが、複数のコマンドを実行するよりもテンプレート1つで管理を行う方がよりミスが少なく済みます。
最も適しているアプローチとはいえませんので誤りです。

・AWS CloudTrailのログを参照し、構築時の操作をマニュアル化して共有する
AWS CloudTrailはAWSサービスに対して誰がどのような操作を行ったのかを記録するサービスです。
操作ログを追うよりも、テンプレートとして管理されている環境を再利用する方がより効率的といえますので誤りです。

・AWS Elastic Beanstalkのテンプレートを作成し、各チームで共有する
Elastic Beanstalkはアプリケーションをデプロイ(動作環境への展開)するための定番構成を自動的に構築するサービスです。
CloudFormationのようにリソースをコード化して管理することはできませんので誤りです。

参考

【AWS CloudFormation】
AWS CloudFormationはAWSクラウド上での環境構築を自動で行うサービスの1つです。自動的に構築を行うサービスとしては他に「Elastic Beanstalk」などがあります。

CloudFormationではElastic Beanstalkより多くのAWSサービスに対応しており柔軟な構成を組むことができますが、その分各AWSサービスやロードバランサーなどのインフラストラクチャ(基盤)技術についての知識も必要です。

※JSON、YAMLとは、どちらもテキスト形式のデータ定義言語です。記述方式に差異はありますが、いずれも人間が記述しやすく、また読みやすい形式の言語です。


CloudFormationはいわゆるIaC(Infrastructure as Code)です。IaCとは、仮想化されたサーバーやデータベース、ネットワーク構成などの環境をコード(コンピュータが処理可能な形式)で定義し、それを実行することによって再現(構築)するという技術をいいます。IaCのメリットには、例えば以下のようなものがあります。
・同じ作業を別の人間が実施できる
・同じ、または似た構成の環境を何度も作成できる
・環境がコード化されていることにより、リソース量やパラメータなど環境の変更管理が容易になる
CloudFormationではほぼすべてのAWSリソースをコード化することができます。EC2やELBなどサーバー環境の構築だけでなくAmazon CloudWatchなど運用支援のサービスも含まれているため、CloudFormationを利用することで構築および運用を自動化することができます。

●テンプレートとスタック
以下はCloudFormationの利用イメージです。


CloudFormationを利用し始めるには、ユーザーはまず「テンプレート」というコードを作成します。テンプレートはJSONまたはYAML形式で書かれたコードです。テンプレートは、例えばEC2インスタンスのインスタンスタイプやRDBのパラメータの定義など、AWSリソースをどのように利用するか、という設計図にあたります。
テンプレートを作成した後は、CloudFormationに読み込ませることによりAWSリソースがプロビジョニング(構築)されます。このときAWSリソースは「スタック」という単位で管理されます。
例えばWebアプリケーションをリリースしたい場合、CloudFormationのテンプレートにはEC2インスタンスやS3など必要なAWSリソースを定義し、プロビジョニングします。Webアプリケーションが不要になった場合、(一つ一つのAWSリソースではなく)プロビジョニングしたスタックをすべて削除することで、Webアプリケーションとして利用していたリソースを削除することができます。
スタックは1つのテンプレートから複数作成することもできます。またスタックを削除した場合も、テンプレートからもう一度同じスタックを作成することも可能です。
なお、上例では複数のAWSリソースを定義していますが、VPCだけ、EC2インスタンスだけ、といったプロビジョニングも可能です。

テンプレートは自分で作成することも可能ですが、AWSによって配布されているサンプルを利用したり、マネジメントコンソールからGUIで作成することもできます。


●サービスロール
サービスロールは、CloudFormationに対して、ユーザーの代わりにスタック内のリソースを操作する許可を与えるためのIAMロールで、スタックの定義時に指定することができます。
サービスロールを指定すると、CloudFormationはスタックで実行されるすべての操作にこのロールの権限を使用します。これにより、ユーザーが直接各リソースに対するアクセス権限を持っていなくても、AWSリソースのプロビジョニングを行うことができます。

●スタックセット
AWS CloudFormationで作成したテンプレートを基に、複数のAWSアカウントで、または複数のリージョンでスタックを構築したい場合には「スタックセット(StackSets)」を利用します。管理者アカウントで作成したテンプレートを利用して、ターゲットアカウント(プロビジョニングを行うアカウント)とプロビジョニングを行うリージョンを指定することで、一度の操作で複数の同じ環境を構築できます。
テスト環境を複数構築したい場合や、新たにアカウントを払い出す際に下準備となる操作(IAMやセキュリティグループの設定など)をスタックセットとして作成しておく、といった利用ができます。

【AWS Service Catalog】
AWS Service Catalogは、主にCloudFormationテンプレートを製品として登録し、他のAWSユーザーへ共有できるサービスです。共有先のAWSユーザーは、セルフサービスで製品からAWS環境をデプロイ(構築)できます。製品の管理者は、製品のバージョンや、製品がいつ・誰に使用されたかを一元的に管理できるので、共有するAWS環境の一貫性とコンプライアンスを維持できます。


例えば、システム管理者が構築したAWS環境をService Catalogに登録してアプリケーション開発者に共有することで、アプリケーション開発者は容易に自身のAWSアカウント内に開発環境をデプロイできます。また、システム管理者は共有したAWS環境のバージョンや使用履歴を一元管理できます。

上に戻る

AWS Elastic BeanstalkとAWS CloudFormationについて

公開日 2024/02/27

以下問題についてです。

問題:
ある企業の開発部では、開発中のWebアプリケーションのテスト環境をAWS上に構築することにした。テスト環境は同じ構成を複数のチームごとに作成して、並行してテストを進めたいという要望がある。
テスト環境の作成に最も適したアプローチはどれか。

AWS Elastic Beanstalkのテンプレートを作成し、各チームで共有する
AWS CLIを利用し、環境作成時のコマンドラインをチームで共有する
AWS CloudTrailのログを参照し、構築時の操作をマニュアル化して共有する
AWS CloudFormationのテンプレートを作成し、テンプレートを各チームで使用する

解説:
・AWS Elastic Beanstalkのテンプレートを作成し、各チームで共有する
Elastic Beanstalkはアプリケーションをデプロイ(動作環境への展開)するための定番構成を自動的に構築するサービスです。
CloudFormationのようにリソースをコード化して管理することはできませんので誤りです。

問題文からは「リソースをコード化して管理する」要件が読み取れず、「ある企業の開発部」と記載があることから
AWS Elastic Beanstalkのテンプレート利用が良いのではないかと思いました。
正解はAWS CloudFormationのテンプレート利用なのですが、どのように考えるべきでしょうか?

2024/02/29 16:07

要件に「テスト環境は同じ構成を複数のチームごとに作成して」と書いてあります。
CloudFormationではAWS環境をコード化(テンプレート化)して各チームの環境にコピーすることが可能ですが、Elastic Beanstalkでは構築を簡略化できるとはいえテスト環境をチームごとに作成しなくてはなりません。
また、Elastic Beanstalkで構築できる環境からテスト環境独自の設定がある場合、各チームの環境にそれぞれ設定を適用していく必要があります。
「同一環境を複数作成する」という点において、CloudFormationの方が適切なアプローチということだと思います。


コメント

s shia125

2024/02/29 21:23

解説ありがとうございます、おかげさまで理解できました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?