AWS 認定 DevOps エンジニア – プロフェッショナル サンプル問題の解説

AWS 認定 DevOps エンジニア – プロフェッショナル 認定を受験される方向けに、サンプル問題の解説をしたいと思います。
サンプル問題は、AWS 認定 DevOps エンジニア – プロフェッショナル のページから入手できます。

https://aws.amazon.com/jp/certification/certified-devops-engineer-professional/

実際にDevOps 試験を受験する前に、試験のレベルや出題方式などを理解するためにサンプル問題を解くことをおすすめします。

なお2019/5 月時点で、サンプル問題は英語版のみがダウンロードできます。以下がサンプル問題の直リンクです。

https://d1.awsstatic.com/training-and-certification/docs-devops-pro/AWS%20Certified%20DevOps%20Engineer%20-%20Professional_Sample%20Questions.pdf

(2020/9/12 追記) 2020/9 月時点で、日本語訳も公開されています。
https://d1.awsstatic.com/training-and-certification/docs-devops-pro/AWS%20Certified%20DevOps%20Engineer%20-%20Professional%20Exam%20Guide_v1.5_FINAL%20JPN.pdf

本記事では、サンプル問題の解説をしますが、上記PDF 内にも解説の記載はありますのでそちらも参考にしてください。(この記事では、英語版を元にしていますが、日本語訳版も参考にしてください。)

以下は試験を解くポイントです。

  1. 問題文で何が問われているのかのポイントを把握した上で、問題をときはじめる
  2. 問題文の限定的な言い回しに注意する(例:最も費用対効果の良いもの など)
  3. 選択肢は全体をざっと見て、解答のパターンを見抜く
  4. 消去法で、選択肢を狭める

それでは、問題を見ていきましょう。

第1問

1) A company controls the source code for its product in AWS CodeCommit. The company is creating a CI/CD pipeline for the product using AWS CodePipeline. The pipeline must automatically start on changes to the master branch of the CodeCommit repository. Changes are made to the application every day, so the pipeline needs to be as responsive as possible.

Which actions should the DevOps Engineer take to meet these requirements?

A. Configure the pipeline to periodically check the repository. Start the pipeline when changes are detected.
B. Configure the repository to generate an Amazon CloudWatch Events event upon changes. Configure the pipeline to start in response to the event.
C. Configure the repository to periodically run an AWS Lambda function. The function should check the repository and start the pipeline when changes are detected.
D. Configure the repository to publish an SNS notification upon changes. Subscribe the pipeline to the Amazon SNS topic.

日本語訳:(問題文のポイントを赤字で表記)

ある会社はAWS CodeCommitで自社製品のソースコードを管理しています。 同社はAWS CodePipelineを使用して製品のCI / CDパイプラインを作成しています。パイプラインは、CodeCommitリポジトリのマスターブランチへの変更から自動的に開始する必要があります。 毎日アプリケーションに変更が加えられるため、パイプラインは可能な限り迅速に対応する必要があります。

DevOpsエンジニアはこれらの要件を満たすためにどのようなアクションを取るべきですか?

A. 定期的にリポジトリをチェックするようにパイプラインを設定してください。変更が検出されたらパイプラインを開始します。

B. 変更時にAmazon CloudWatch Events のイベントを生成するようにリポジトリを設定します。 イベントに応答して開始するようにパイプラインを構成します。

C. AWS Lambda関数を定期的に実行するようにリポジトリを設定します。 この関数はリポジトリをチェックし、変更が検出されたときにパイプラインを開始します。

D. 変更時にSNS通知を発行するようにリポジトリを設定します。 パイプラインをAmazon SNSトピックへサブスクライブします。

正解(反転して表示): B

解説:

この問題は、CodePipeline におけるCodeCommit との連携方法に関する問題です。問題文のポイントは、CodeCommit にコミットされたら”可能な限り迅速に” 対応するという部分です。
選択肢としてAとC は”定期的に” チェックしますが、B はイベントに応答してパイプラインが開始しますので選択肢としてはAやCよりはBの方が適しています。
なお、D はCodePipeline の仕組みには当てはまりません。よって正解はB となります。
なお、マネジメントコンソール上でCodepipeline を作成すると、B の選択肢のCloudWatch Events は自動的に構成されますので気が付かない場合があります。CLI やAPI で作成するとCloudWatch Events を自分で構成する必要がありますので知識として定着します。Professional な認定では、マネジメントコンソールだけを触っていると知識として足りない部分が出てきますので、CLI などで各サービスを操作してみることも重要です。ただし、すべての細かい知識を覚えておくのはなかなか難しいですので、迷った場合は、消去法で選択肢を除外するといったテクニックも有効です。
パイプラインの実行に関しては以下のドキュメントに記載があります。
https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-about-starting.html

第2問

A Development team wants to set up an AWS CodeCommit repository. Developers should be able push changes to their own branches, but they should not be allowed to push commits or merge pull requests into the master branch. Additionally, whenever a commit or merge occurs into the master branch, the Project Manager needs to receive a notification.
Which combination of steps will protect the master branch and send the alert with the shortest delay?
(Select TWO.)

A. Attach an AWS IAM policy to the developer IAM group that denies the actions of pushing commits, merging pull requests, and adding files to the master branch.
B. Attach a resource policy to the CodeCommit repository that denies members of the IAM developer group the actions of pushing commits, merging pull requests, and adding files to the master branch.
C. Set up an AWS Lambda function that runs every 15 minutes to check for repository changes and publishes a notification to an Amazon SNS topic.
D. Set up an Amazon CloudWatch Events rule triggered by a CodeCommit Repository State Change event for the master branch and add an Amazon SNS topic as a target.
E. Configure AWS CloudTrail to send log events to Amazon CloudWatch Logs. Define a metric filter to identify repository events. Create a CloudWatch alarm with an Amazon SNS topic as a target.

日本語訳:(問題文のポイントを赤字で表記)

開発チームがAWS CodeCommitリポジトリを設定したいと考えています。開発者は自分のブランチに変更をプッシュできますが、マスターブランチにコミットをプッシュしたりプルリクエストをマージしたりすることはできてはいけません。さらに、コミットまたはマージがマスターブランチで発生するたびに、プロジェクトマネージャは通知を受け取る必要があります。
どのステップの組み合わせがマスターブランチを保護し、アラートを最短の遅延で送信しますか?
 (2つ選択

A. マスターブランチにコミットをプッシュし、プルリクエストをマージし、ファイルを追加するアクションを拒否するAWS IAMポリシーを開発者IAMグループに添付します。

B.  IAM開発者グループのメンバーにコミットのプッシュ、プルリクエストのマージ、およびマスターブランチへのファイルの追加のアクションを拒否するリソースポリシーをCodeCommitリポジトリに添付します。

C.  15分ごとに実行されるAWS Lambda関数を設定して、リポジトリの変更を確認し、Amazon SNSトピックに通知を発行します。

D. マスターブランチのCodeCommitリポジトリの状態変更イベントによってトリガーされるAmazon CloudWatch Events ルールを設定し、ターゲットとしてAmazon SNSトピックを追加します。

E. ログイベントをAmazon CloudWatch Logsに送信するようにAWS CloudTrailを設定します。リポジトリイベントを識別するためのメトリックフィルタを定義します。 Amazon SNSトピックをターゲットとしてCloudWatchアラームを作成します。

正解(反転して表示): A、D

解説:

まずは、問題の全体像を把握します。問題で問われているのは、CodeCommit へのアクセスコントロールに関することと、管理者への通知の仕方の2つです。また、解答を2つ選択するという指示があります。
選択肢を見ると、AとB はアクセスコントロールの内容、C、D、E は通知に関する内容なので、A or B と C or D or E の組み合わせで考えればよいということがわかります。
ではまず、A or B を考えてみましょう。 A はIAMポリシーによるアクセスコントロールで、B はリソースベースのアクセスコントロールです。CodeCommit ではリソースベースのポリシー(S3 のバケットポリシーのような仕組み) はサポートしていないため、A のIAM ポリシーを用いたアクセスコントロールが正解となります。なおCodeCommit はIAM ポリシーの Condition 句を利用することでブランチレベルのアクセスコントロールが可能です。以下のドキュメントが参考になります。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-conditional-branch.html

次は、C or D or E ですが、C は15分毎というスケジュールに基づく通知なので、”最短の遅延” という条件には沿わないため除外できそうです。次のE はどうでしょうか。CodeCommit のAPI コールはgit での操作も含めてCloudTrail ですべてロギングできます。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/integ-cloudtrail.html#integ-cloudtrail-gitpull
よって、E でも実現は可能です。ただし、CloudTrail は最長15分ログの収集に時間がかかるため、やはり”最短の遅延” という条件には沿わなそうです。
最後にD ですが、CloudWatch Events により、CodeCommit リポジトリのブランチレベルの状態変化を拾うことができます。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/EventTypes.html#codecommit_event_type
CloudWatch Events は変更が発生した場合に即座に対応しますので、”最短の遅延” という条件に最も即した選択肢はD となります。
よって、この問題の正解は、AとD です。

第3問

A company is using AWS CodeBuild to build its application. Company policy requires that all build artifacts be encrypted at rest. Access to the artifacts must be limited to IAM users with permission to assume the operations role.
How can these requirements be met?

A. Add a post-build command to the CodeBuild build specification that pushes build objects to an Amazon S3 bucket. Set a bucket policy that prevents upload to the bucket unless the request includes the header x-amz-server-side-encryption. Add a Deny statement for all actions with the NotPrincipal section referencing the operations IAM group.
B. Add a post-build command to the CodeBuild build specification that pushes build objects to an Amazon S3 bucket. Configure an S3 event notification to trigger an AWS Lambda function to get the object, encrypt it, then put it back into the S3 bucket with an encrypted tag key and a true tag value. Add an S3 bucket policy with a Deny statement for all actions with the NotPrincipal section referencing the operations IAM group, and a Condition section referencing the Encrypted tag.
C. Add a post-build command to the CodeBuild build specification that pushes build objects to an Amazon S3 bucket that has S3 default encryption enabled. Set an S3 bucket policy containing a Deny statement for all actions with the NotPrincipal section referencing the operations IAM role.
D. Add a post-build command to the CodeBuild build specification that calls the AWS KMS Encrypt API call, passing the artifact to AWS KMS for encryption with a specified customer master key (CMK). Push the encrypted artifact to an Amazon S3 bucket, then set up the IAM operations group as the only key user for that CMK in AWS KMS.

日本語訳:(問題文のポイントを赤字で表記)

ある企業が、アプリケーションを構築するためにAWS CodeBuildを使用しています。会社の方針では、すべてのビルドアーティファクトは暗号化して保存することを要求しています。アーティファクトへのアクセスは、操作用のロールを引き受ける権限を持つIAMユーザーに限定される必要があります。
これらの要件をどのように満たすことができますか?

 A. ビルドオブジェクトをAmazon S3バケットにプッシュするポストビルドコマンドをCodeBuildビルド仕様に追加します。リクエストにヘッダーx-amz-server-side-encryptionが含まれていない限り、バケットへのアップロードを禁止するバケットポリシーを設定します。操作用のIAMグループを参照するNotPrincipalセクションを持つすべてのアクションに対してDenyステートメントを追加します。

B. ビルドオブジェクトをAmazon S3バケットにプッシュするポストビルドコマンドをCodeBuildビルド仕様に追加します。 AWS Lambda関数をトリガーしてオブジェクトを取得し、それを暗号化してから、暗号化されたタグキーと正しいグ値を使用してS3バケットに戻すようにS3イベント通知を設定します。 NotPrincipalセクションが操作用のIAMグループを参照し、ConditionセクションがEncryptedタグを参照するすべてのアクションに対して、Denyステートメントを使用してS3バケットポリシーを追加します。

C. ビルドオブジェクトをS3デフォルト暗号化が有効になっているAmazon S3バケットにプッシュするポストビルドコマンドをCodeBuildビルド仕様に追加します。操作用のIAMロールを参照するNotPrincipalセクションを持つすべてのアクションに対して、Denyステートメントを含むS3バケットポリシーを設定します。

D. 指定されたカスタマーマスターキー(CMK)で暗号化するためにAWS KMS Encrypt APIを呼び出すCodeBuildビルド仕様にポストビルドコマンドを追加します。暗号化されたアーティファクトをAmazon S3バケットにプッシュしてから、AWS KMSでそのCMKの唯一のキーユーザーとしてIAMオペレーショングループを設定します。

正解(反転して表示): C

解説:

この問題のポイントは、アーティファクトを暗号化すること、IAM ロールによるアクセスのみを許可することという二点です。解答のポイントは、各選択肢から問題文のポイントに沿わない部分を探して潰していく消去法が有効です。
まずは、A/B を見てみます。暗号化部分は飛ばして、バケットポリシーでアクセスコントロールをするという部分では、IAM グループで限定するという記述となっています。これは問題文のIAM ロールに限定するというポイントと異なっていますので除外できます。なお、その他の判断方法としては、そもそも principal にIAM グループは設定できませんので、機能的な意味でも間違っていると言えます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_principal.html

次に、D を見てみます。これもIAM グループによる制限を記述していますので除外できます。なおその他の判断方法としては、KMS API をコールして暗号化するという記述になっていますが、KMS の利用方法としては、キーの暗号化であり、データそのものの暗号化には利用できません。(データサイズとしては4KB の制限があります。)よって、KMS の利用方法からしても間違いだとわかります。
よって、正解はC となり、記載されている内容は問題文のポイントに沿っています。

なお、この問題を正攻法で解こうとすると、Principal にはIAM グループは指定できない、KMS で暗号化できるのは4KB までといった非常に細かいAWS の知識が必要となりますが、それをすべて覚えていることは正直厳しいので問題文の中のポイントと異なる選択肢のポイントを見つけ出して除外する消去法によるアプローチが有効です。(ただし、機能的にも間違っていることがわかればより正解率は高まります。)

第4問

A DevOps Engineer wants to implement a blue/green deployment process for an application on AWS and be able to gradually shift the traffic between the environments. The application runs on Amazon
EC2 instances behind an ELB Application Load Balancer. The instances run in an EC2 Auto Scaling group. Data is stored in an Amazon RDS Multi-AZ DB instance. External DNS is provided by Amazon Route 53.
Which combination of steps will implement the blue/green process? (Select THREE.)

A. Create a second Auto Scaling group behind the same Application Load Balancer.
B. Create a second Application Load Balancer and Auto Scaling group.
C. Create a second alias record in Route 53 pointing to the new environment and use a failover routing policy between the two records.
D. Create a second alias record in Route 53 pointing to the new environment and use a weighted routing policy between the two records.
E. Configure the new EC2 instances to use the same RDS database instance.
F. Configure the new EC2 instances to use the failover node of the RDS database instance.

日本語訳:(問題文のポイントを赤字で表記)

あるDevOpsのエンジニアは、AWS上のアプリケーションにBlue/Green デプロイメントプロセスを実装し、環境間でトラフィックを徐々にシフトできるようにしたいと考えています。アプリケーションは、ELB Application Load Balancerの背後にあるAmazon EC2インスタンス上で実行されます。インスタンスはEC2 Auto Scalingグループで実行されます。データはAmazon RDS Multi-AZ DBインスタンスに保存されます。外部向けDNSはAmazon Route 53によって提供されます。
Blue/Green プロセスを実行するのはどのステップの組み合わせですか。
3つ選択

 A. 同じApplication Load Balancerの背後に2つ目のAuto Scalingグループを作成します。

B. 2つ目のApplication Load BalancerとAuto Scalingグループを作成します。
 C. Route 53で新しい環境を指す2番目のエイリアスレコードを作成し、2つのレコード間でフェールオーバールーティングポリシーを使用します。

D. Route 53で新しい環境を指す2番目のエイリアスレコードを作成し、2つのレコード間で加重ルーティングポリシーを使用します。

E. 同じRDSデータベースインスタンスを使用するように新しいEC2インスタンスを設定します。

F. RDSデータベースインスタンスのフェイルオーバーノードを使用するように新しいEC2インスタンスを構成します。

正解(反転して表示):B、D、E

解説:

まずは問題文のポイントを見つけます。AutoScaling 構成のEC2 とELB により構成され、外部DNS はRoute53 で構成されたアプリケーションでBlue/Green デプロイメントを実現するにはどういうステップが必要かという問題です。正解は3つ選びます。
ざっと選択肢を見ると、AとBがGreen 環境の構成方法を、CとDがフェイルオーバの方法を、EとF がRDS への接続方法を説明していますので、それぞれの対で正しいものを選ぶという解答方法になります。
ではまずA/B を見てみましょう。Green 環境の構築方法ですが、これだけ見るとどちらも正しく見えますので、一旦飛ばします。
次のC/D を見てみます。内容から、Blue 環境からGreen 環境への切り替え方法の選択肢となります。これは明らかにD の加重ルーティングポリシーを利用した選択肢が正解です。D の選択肢から今回の方式はRoute53によるBlue/Green 環境の切り替えということになりますので、AとB に関しては、ALB とASG のセットでGreen 環境を構築するB が正解となります。
最後に、E/F を見てみましょう。Blue/Green はアプリケーションレイヤーのデプロイの話であり、F のフェイルーバーノードに接続するというのは明らかに間違いです。またRDS の機能としてMultiAZ 構成にした場合、フェイルオーバーノード(=スタンバイ)には接続して医療できませんので機能的にも間違っています。
よってこの問題の解答は、B、D、E となります。

第5問

A DevOps Engineer wrote an AWS Lambda function, defined it in an AWS CloudFormation template snippet (shown below), and stored it in an Amazon S3 bucket.

MyLambdaFunctionV1:
Type: “AWS::Lambda::Function”
Properties:
Handler: “index.handler”
Role: “arn:aws:iam::515290864834:role/AccountScanner”
Code:
S3Bucket: “johndoe-com-lambda-source”
S3Key: “AccountScanner.zip”
Runtime: “dotnetcore2.1”
Timeout: 60

The CloudFormation stack has been created and the Lambda function is working as expected. The Engineer has obtained a new version of the function code and wants to ensure that this new version will be executed immediately following the stack update.
Which deployment procedures will accomplish this? (Select THREE.)

A. Update the logical name of the Lambda function in the CloudFormation template from MyLambdaFunctionV1 to MyLambdaFunctionV2, then perform a CloudFormation stack update.
B. Enable versioning on the existing S3 bucket. Upload the new code to the existing S3 bucket. Specify the version ID of the S3 object in the S3ObjectVersion property of the Lambda function in the CloudFormation template, then perform a CloudFormation stack update.
C. Using AWS SAM, issue a sam deploy command to the CloudFormation template to perform a Lambda function version update.
D. Update the S3 bucket property of the Lambda function in the CloudFormation template to point to a different bucket location. Upload the new code to the new S3 bucket location, then perform a CloudFormation stack update.
E. Update the S3Key property of the Lambda function in the CloudFormation template to indicate a different location and name of the .zip file. Upload the new code to the S3 bucket, noting the location and name change of the .zip file, then perform a CloudFormation stack update.
F. Using the serverless framework, issue a “serverless deploy function -f MyLambdaFunctionV1” command to perform an update to the existing Lambda function.

日本語訳:(問題文のポイントを赤字で表記)

DevOpsのエンジニアがAWS Lambda関数を作成し、それをAWS CloudFormationテンプレートスニペット(下記参照)で定義し、それをAmazon S3バケットに格納しました。


MyLambdaFunctionV1:
  Type: “AWS::Lambda::Function”
    Properties:
      Handler: “index.handler”
      Role: “arn:aws:iam::515290864834:role/AccountScanner”
      Code:
        S3Bucket: “johndoe-com-lambda-source”
        S3Key: “AccountScanner.zip”
    Runtime: “dotnetcore2.1”
    Timeout: 60
 

CloudFormationスタックが作成され、Lambda関数は予想通りに機能しています。 エンジニアは新しいバージョンの関数コードを入手したので、スタックの更新直後にこの新しいバージョンが実行されるようにしたいと考えています。
どのデプロイ手順でこれを達成できますか?
3つ選択

A. CloudFormationテンプレートのLambda関数の論理名をMyLambdaFunctionV1からMyLambdaFunctionV2に更新してから、CloudFormationスタックの更新を実行します。

B.既存のS3バケットでバージョン管理を有効にします。新しいコードを既存のS3バケットにアップロードします。 CloudFormationテンプレートのLambda関数のS3ObjectVersionプロパティでS3オブジェクトのバージョンIDを指定してから、CloudFormationスタックの更新を実行します。

C. AWS SAMを使用して、CloudFormationテンプレートにsam deployコマンドを発行して、Lambda関数のバージョンアップデートを実行します。

D. CloudFormationテンプレートのLambda関数のS3バケットプロパティを更新して、別のバケットの場所を指すようにします。新しいコードを新しいS3バケットの場所にアップロードしてから、CloudFormationスタックの更新を実行します。

E. CloudFormationテンプレートのLambda関数のS3Keyプロパティを更新して、.zipファイルの場所と名前を変更します。 .zipファイルの場所と名前の変更に注意して新しいコードをS3バケットにアップロードしてから、CloudFormationスタックの更新を実行します。

F.サーバーレスフレームワークを使用して、 “serverless deploy function -f MyLambdaFunctionV1“コマンドを発行して既存のLambda機能を更新します。

正解(反転して表示):B、D、E

解説:

この問題では、CloudFormation で既存スタックを更新する場合の知識が問われています。CloudFormation でスタックを更新する場合は、何らかの方法でテンプレートのコードが前回と変わっている必要性がありますので、元のコードから変更が発生する選択肢が正解ということになります。
A は、そもそも既存のLambda 関数の更新ですので、論理名を変更してはいけません。これは間違いです。
B は、S3 のバージョニングを有効化しますので、新しい関数のデプロイコードにはバージョンID の指定を追加します。前回コードと内容が変わりますので正解となります。
C は、AWS SAM を利用するという点ですが、今回のテンプレートはSAM 形式ではありません。SAM はCloudFormation の拡張フォーマットになりますのでSAM に対応するには大幅な変更が必要となります。よって、C は選択肢とはなりません。
D はS3 バケット名やキーが元のコードから変わりますので正解です。
E はコードのKey 部分が変わりますので正解です。
F はCと同様です。
よって、この問題の正解は、B、D、E となります。

第6問

A DevOps Engineer has been asked to automate security compliance for a company. The company has developed custom AWS Config rules to detect non-compliant security configurations. When compliance issues are detected, the company wants issues to be automatically remediated and the Security team to be notified over the internal security message channel. The message board has a REST interface that publishes the body of HTTPS POST requests over the channel.
Which combination of steps would successfully meet these requirements in the MOST cost-effective way? (Select THREE.)

A. Create an Amazon CloudWatch Events rule that publishes configuration item change notifications to an Amazon SNS topic.
B. Create an Amazon CloudWatch Events rule that publishes compliance change notifications to an Amazon SNS topic.
C. Configure AWS Config to publish configuration item change notifications to an Amazon SNS topic.
D. Create an Amazon API Gateway RESTful API with AWS integration to AWS Config. Subscribe the API to the Amazon SNS topic.
E. Subscribe the message channel HTTPS endpoint to the Amazon SNS topic.
F. Write an AWS Lambda function that addresses the non-compliant security configuration. Subscribe the function to the Amazon SNS topic.

日本語訳:(問題文のポイントを赤字で表記)

DevOpsのエンジニアが、企業のセキュリティコンプライアンスを自動化するよう依頼されました。同社は、準拠していないセキュリティ設定を検出するためのカスタムAWS Configルールを開発しました。コンプライアンスの問題が検出された場合、会社は問題を自動的に修正し、セキュリティチームに内部のセキュリティメッセージチャネルを通じて通知することを望んでいます。メッセージボードには、HTTPS POSTリクエストの本文をチャネル経由で発行するRESTインターフェイスがあります。
費用対効果の最も高い方法で、どの組み合わせのステップでこれらの要件を満たすことができますか? (3つ選択

 A. 設定項目の変更通知をAmazon SNSトピックに発行するAmazon CloudWatchイベントルールを作成します。

B. コンプライアンスの変更通知をAmazon SNSトピックに発行するAmazon CloudWatchイベントルールを作成します。

C. 設定項目の変更通知をAmazon SNSトピックに発行するようにAWS Configを設定します。

D.  AWS ConfigとAWSを統合したAmazon API Gateway RESTful APIを作成します。 APIをAmazon SNSトピックにサブスクライブします。

E. メッセージチャネルのHTTPSエンドポイントをAmazon SNSトピックにサブスクライブします。

F. 準拠していないセキュリティ設定に対処するAWS Lambda関数を作成します。Amazon SNSトピックに関数を登録します。

正解(反転して表示):B、E、F

解説:

まずは問題文のポイントを見てみましょう。カスタムConfig ルールを作成して、自社のコンプライアンスに準拠していない設定を自動的に検出します。検出したあとは2つのアクションを取ります。1つ目は、設定を自動的に修正すること。2つ目は、セキュリティチームに通知することです。また既存のメッセージチャネルにはREST のインターフェイスがあります。
では、選択肢を見ていきます。まず、AとC は除外できます。今回検出するのは、Config ルールによりコンプライアンスに準拠していないことですので、設定の変更そのものを検出したいわけではありません。そうするとB のコンプライアンスの変更を検出するのは正しいです。
次に、D を見てみます。API Gateway を利用してRESTful API を作成する必要はありません。すでにREST インターフェースが存在しています。よって、E の既存のメッセージチャネルHTTPS エンドポイントをSNS トピックにサブスクライブするというのは正しい選択です。
最後E を見てみると、問題文には「問題を自動的に修正する」というものもありますので、Lambda により対応できます。よってE も正しい選択肢です。正解は、B、E、F となります。

第7問

A company runs an application on Amazon EC2 instances running the latest version of the Amazon Linux AMI. When applying new security patches, Server Administrators manually remove affected instances from service, patch them, and then place them back into service. A new company security policy requires that security patches be applied within 7 days of the patch being released. The Security team must verify that all instances are in compliance. Patching should be done during a time that has the least impact on users.
How can Administrators automate security policy compliance?

A. Configure an AWS CodeBuild project to download and apply patches to all machines over SSH. Use an Amazon CloudWatch Events scheduled event to run the CodeBuild project during a maintenance window.
B. Use AWS Systems Manager Patch Manager to create a patch baseline. Create a script on the EC2 instances that uses the CLI to pull the latest patches from Patch Manager. Create a cron job to schedule the script to run during a maintenance window.
C. Create a script that applies any available security patches. Create a cron job to schedule the script to run during a maintenance window. Install the script and cron job on the application AMI and redeploy the
application.
D. Enlist all application EC2 instances in a patch group. Use AWS Systems Manager Patch Manager to create a patch baseline. Configure a maintenance window to apply the patch baseline.

日本語訳:(問題文のポイントを赤字で表記)

ある企業が、最新バージョンのAmazon Linux AMIを実行しているAmazon EC2インスタンス上でアプリケーションを実行しています。新しいセキュリティパッチを適用する場合、サーバ管理者は影響を受けるインスタンスを手動でサービスから削除し、それらにパッチを適用してサービスに戻します。新しい会社のセキュリティポリシーでは、セキュリティパッチはパッチがリリースされてから7日以内に適用されることを要求しています。セキュリティチームは、すべてのインスタンスが準拠していることを確認する必要があります。パッチは、ユーザーへの影響が最も少ない期間に実行する必要があります。
管理者はセキュリティポリシーコンプライアンスをどのように自動化できますか?

A. SSH経由ですべてのマシンにパッチをダウンロードして適用するようにAWS CodeBuildプロジェクトを設定します。メンテナンス期間中にAmazon CloudWatchイベントスケジュールイベントを使用してCodeBuildプロジェクトを実行します。

B. AWS Systems Manager Patch Managerを使用してパッチベースラインを作成します。 CLIを使用してPatch Managerから最新のパッチを取得するEC2インスタンス上にスクリプトを作成します。メンテナンス期間中にスクリプトを実行するようにスケジュールするcronジョブを作成します。

C. 利用可能なセキュリティパッチを適用するスクリプトを作成します。メンテナンス期間中にスクリプトを実行するようにスケジュールするcronジョブを作成します。スクリプトとcronジョブをアプリケーションAMIにインストールして、アプリケーションを再デプロイします。

D. すべてのアプリケーションEC2インスタンスをパッチグループに参加させます。 AWS Systems Manager Patch Managerを使用してパッチベースラインを作成します。パッチベースラインを適用するためのメンテナンスウィンドウを設定します。

正解(反転して表示):D

解説:

この問題のポイントは、稼働中のEC2 インスタンスにコンプライアンス要件に合うように、パッチを自動的に適用する場合にどのような設定をすればよいかが問われています。
稼働中のEC2 インスタンスをメンテナンスするための最適なサービスはAWS Systems Manager です。なので、Systems Manager が出てきている選択肢が正解ということになりますので、A、C は除外できます。B に関しては、Systems Manager のPatch Manager によりベースラインを作成するところまでは正しいですが、cron によりスケジュールする必要はありません。正解はD で、メンテナンスウィンドウを設定することでスケジュールできます。
なお、A のCodeBuild はソースコードなど自動ビルド&テストのために利用しますので稼働中EC2 インスタンスのメンテナンス目的には利用できません。C は自前でパッチを当てるような選択ですが、いくつか問題があります。まず問題文でAmazon Linux AMI を利用しているとありますので、アプリケーション用のカスタムAMI を利用した運用ではありません。またマネージド型サービスを活用せずにすべてをカスタムで組んでますので、可用性などの問題も自力で解決する必要があります。最後に、コンプライアンスに準拠しているかどうかを確認する手段が提供されていません。よって、正解はD ということになります。

第8問

An Operator is managing a legacy application on AWS. The application is a monolithic Microsoft Windows program running on a single Amazon EC2 instance. The source code for the application is not available, so the application cannot be modified. The application has a memory leak and malfunctions when memory utilization on the instance goes above 90%. The Operator has configured the uniform Amazon CloudWatch agent on the EC2 instance to collect the memory utilization Performance Monitor counter.
Which actions should the Operator take to prevent the application from malfunctioning? (Select TWO.)

A. Create an Amazon CloudWatch Events event that publishes to an Amazon SNS topic when memory utilization goes above 80%.
B. Create a metric filter on memory utilization in Amazon CloudWatch Logs. Create a CloudWatch alarm on the memory utilization filter that publishes to an Amazon SNS topic when the memory utilization goes
above 80%.
C. Create a CloudWatch alarm on the memory utilization metric that publishes to an Amazon SNS topic when the memory utilization goes above 80%.
D. Subscribe an Amazon Lambda function to the Amazon SNS topic that restarts the application with an SNS Run command.
E. Subscribe the EC2 instance to the Amazon SNS topic and run a script that restarts the application.

日本語訳:(問題文のポイントを赤字で表記)

オペレータがAWSでレガシーアプリケーションを管理しています。このアプリケーションは、単一のAmazon EC2インスタンス上で実行されるモノリシックなMicrosoft Windowsプログラムです。アプリケーションのソースコードが利用できず、アプリケーションは変更できません。アプリケーションにはメモリリークが内在し、インスタンスのメモリ使用率が90%を超えると誤動作します。オペレータは、メモリ使用率のパフォーマンスモニタカウンタを収集するように、EC2インスタンス上に統合 Amazon CloudWatchエージェントを設定しました。
アプリケーションが誤動作するのを防ぐためにオペレーターはどのような処置をとるべきですか? (2つ選択

A. メモリ使用率が80%を超えたときにAmazon SNSトピックに発行するAmazon CloudWatch Events イベントを作成します。

B.  Amazon CloudWatch Logsにメモリ使用率に関するメトリックスフィルタを作成します。メモリ使用率が 80%以上に増加したときにAmazon SNSトピックに発行されるメモリ使用率フィルタでCloudWatchアラームを作成します。

C. メモリ使用率が80%を超えたときにAmazon SNSトピックにパブリッシュするCloudWatchアラームをメモリ使用率メト​​リクスに作成します。

D. SSM ランコマンド(*1)を使用してアプリケーションを再起動するAmazon Lambda関数をAmazon SNSトピックに登録します。

E. EC2インスタンスをAmazon SNSトピックにサブスクライブし、アプリケーションを再起動するスクリプトを実行します。

*1: もとの英文ではSNS Run Command と記述されていますが、SSM (Systems Manager) Run Command の間違いと思われます。

正解(反転して表示):C、D

解説:

問題のポイントですが、既存のWindows モノリシックアプリケーションはメモリリークを起こします。本来であれば、ソースコードを修正する必要がありますが、このシナリオでは、ソースコードを修正できないので、運用でカバーする必要があります。すでに対象のEC2 インスタンスには統合CloudWatch Agent がインストールされて、メモリ使用量に関するメトリクスは収集できています。その前提で、質問としてはアプリケーションが誤動作をにするにはどうすればよいか?ということです。対処としては2つのステップが考えられ、まずは収集したメモリ使用量に関するメトリクスが90 % を超えたことを検知する仕組みと、90% を超えたら、アプリケーションを再起動する処理を実装することです。
A,B、C を見てみると、収集したメトリクスが90 % を超えたことをどのように検知するかがその方法が問われています。この中で正解は C のCloudWatch アラームとSNS トピックを利用する方法です。
次に、D、E を見てみます。対処方法としてはメモリリークを起こしているアプリケーションを再起動するというものですが、正しい方法はD の、アプリケーションを再起動するSSM RunCommand を Lambda からキックする方法です。E の記述ようにEC2 インスタンスはSNS トピックにはサブスクライブできません。よって、正解はC、D となります。

第9問

A company is migrating more than 100 internal applications to AWS. The applications are independent, but all use similar corporate standard architectures. Key areas of the architectures that vary are:
– Some applications have both web and application tiers, while others just have a web tier.
– If there is a database, it is MySQL, SQL Server or PostgreSQL. (The company plans to manage all databases with Amazon RDS.)
– Some applications are built on a LAMP stack, while others are built on a .NET stack.

The DevOps team wants to enable each application team to launch the infrastructure to deploy their own application. At the same time, the DevOps team wants to limit each team’s ability to launch infrastructure outside of the corporate standard.
Which approach will allow the teams to launch the infrastructure for their applications with the minimum privileges?

A. Create two AWS Service Catalog products: one that creates a two-tier architecture and one that creates a three-tier architecture. Pass in the technology stack and the database technology as parameters. Grant
the application teams the rights needed to launch the products.
B. Create two AWS CloudFormation templates: one that creates a two-tier architecture and one that creates a three-tier architecture. Pass in the technology stack and the database technology as parameters. Grant
the application teams the rights needed to create the CloudFormation stacks.
C. Create an AWS CloudFormation template that launches an AWS Elastic Beanstalk web server environment application. Pass in the number of tiers, the technology stack, and the database technology as parameters. Grant the application teams the rights needed to create the CloudFormation stacks.
D. Create an AWS Service Catalog product that launches an AWS Elastic Beanstalk web server environment application. Pass in the number of tiers, the technology stack, and the database technology as parameters. Grant the application teams the rights needed to launch the product.

日本語訳:(問題文のポイントを赤字で表記)

ある企業が100を超える社内アプリケーションをAWSに移行しています。アプリケーションは独立していますが、すべて同じような企業標準アーキテクチャを使用しています。異なるアーキテクチャーの主な分野は次のとおりです。

– Web層とアプリケーション層の両方を持つアプリケーションもあれば、Web層のみを持つアプリケーションもあります。
– データベースがある場合は、MySQL、SQL Server、またはPostgreSQLです。 (同社はすべてのデータベースをAmazon RDSで管理する予定です。)
– 一部のアプリケーションはLAMPスタック上に構築されていますが、他のアプリケーションは.NETスタック上に構築されています。

DevOpsチームは、各アプリケーションチームがインフラストラクチャを起動して各自のアプリケーションをデプロイできるようにしたいと考えています。同時に、DevOpsチームは、各チームが企業標準外のインフラストラクチャを起動する能力を制限したいと考えています。
どのアプローチで、チームは自分のアプリケーション用のインフラストラクチャを最小限の特権で起動できますか?

A. 2つのAWS Service Catalog製品を作成します。1つは2層アーキテクチャを作成し、もう1つは3層アーキテクチャを作成します。テクノロジスタックとデータベーステクノロジをパラメータとして渡します。製品を起動するために必要な権限をアプリケーションチームに付与します。

B. 2つのAWS CloudFormationテンプレートを作成します。1つは2層アーキテクチャを作成し、もう1つは3層アーキテクチャを作成します。テクノロジスタックとデータベーステクノロジをパラメータとして渡します。 CloudFormationスタックを作成するために必要な権限をアプリケーションチームに付与します。

C. AWS Elastic Beanstalkウェブサーバー環境アプリケーションを起動するAWS CloudFormationテンプレートを作成します。パラメータとして、階層数、テクノロジスタック、およびデータベーステクノロジを渡します。 CloudFormationスタックを作成するために必要な権限をアプリケーションチームに付与します。

D. AWS Elastic Beanstalkウェブサーバー環境アプリケーションを起動するAWS Service Catalog製品を作成します。パラメータとして、階層数、テクノロジスタック、およびデータベーステクノロジを渡します。アプリケーションチームに製品の起動に必要な権限を付与します。

正解(反転して表示):A

解説:

今回の問題のポイントは、各チームにセルフサービスによるインフラ構築してアプリケーションのデプロイを許可しつつ、自社標準に沿ったインフラに限定させるにはどうすればよいかという内容となります。
今回の選択肢の中では、AWS Service Catalog、AWS CloudFormation、AWS Elastci Beanstalk の3つのサービスができてます。どのサービスもセルフサービスでインフラの構築やアプリのデプロイができますが、問題文の”最小の特権のみを付与する” ことを実現できるのが AWS Service Catalog となります。
よって、正解は A となります。
Service Catalog を利用すると管理された”製品” (Service Catalog の用語、CloudFormation Template をインポートしたもの)のみを利用させることができ、利用者に与える権限としては、その製品を利用する権限のみを与えます。製品(Cloudformation Template) の裏側で自動生成されるAWS リソースへのアクセス権限を付与する必要がありません。
CloudFormation を利用する場合は、利用者にはテンプレートにより生成されるAWS リソースへのアクセス権限を付与する必要があります。Elastic Beanstale は単一のWeb 層 アプリケーションは構築できますが、Web層とアプリケーション層の両方を持つアプリケーションは構築できません。
よって、正解はA となります。

第10問

A company is designing a cross-region disaster recovery solution for an Amazon RDS PostgreSQL Multi-AZ DB instance. The disaster recovery solution requires an RPO of 4 hours and an RTO of 2 hours.
Which solution meets the requirements in the MOST cost-effective manner?
A. Create an AWS Lambda function that creates an RDS snapshot and copies it to another region. Create an Amazon CloudWatch Events scheduled event to trigger the Lambda function every 4 hours. Create an RDS notification event to publish an Amazon SNS message for database availability events. Subscribe a Lambda function to the SNS topic that will restore the snapshot to a new instance in the disaster recovery region, and update the connection string for the application.
B. Create an AWS Lambda function that generates a SQL dump file and saves it in an Amazon S3 bucket in another region. Create an Amazon CloudWatch Events scheduled event to trigger the Lambda function every 4 hours. Create an RDS notification event to publish an Amazon SNS message for database availability events. Subscribe a Lambda function to the SNS topic that will launch a new database instance, execute the SQL dump file, and update the connection string for the application.
C. Create an AWS Lambda function that copies the latest automated snapshot to another region. Create an Amazon CloudWatch Events scheduled event to trigger the Lambda function every 4 hours. Create an RDS notification event to publish an Amazon SNS message for database availability events. Subscribe a Lambda function to the SNS topic that will restore the snapshot to a new instance in the disaster recovery region, and update the connection string for the application.
D. Configure a read replica for the database instance in a different region. Create an RDS notification event to publish an Amazon SNS message for database availability events. Create an AWS Lambda function that will promote the read replica and update the connection string for the application. Subscribe the Lambda function to the SNS topic.

日本語訳:(問題文のポイントを赤字で表記)

ある会社が、Amazon RDS PostgreSQL Multi-AZ DBインスタンス用のクロスリージョン災害復旧ソリューションを設計しています。災害復旧ソリューションでは、4時間のRPOと2時間のRTOが必要です。
どのソリューションが最も費用対効果の高い方法で要件を満たしていますか?

A. RDSスナップショットを作成して別のリージョンにコピーするAWS Lambda関数を作成します。 Amazon CloudWatch Events スケジュールイベントを作成して、4時間ごとにLambda機能をトリガーします。データベース可用性イベントが発生したらAmazon SNSメッセージを発行するRDS通知イベントを作成します。スナップショットを災害復旧リージョン内の新しいインスタンスに復元しアプリケーション用の接続文字列を更新するLambda関数をSNSトピックにサブスクライブします。

B. SQLダンプファイルを生成して別のリージョンのAmazon S3バケットに保存するAWS Lambda関数を作成します。 Amazon CloudWatch Eventsスケジュールイベントを作成して、4時間ごとにLambda機能をトリガーします。 データベース可用性イベントが発生したらAmazon SNSメッセージを発行するRDS通知イベントを作成します。 新しいデータベースインスタンスを起動し、SQLダンプファイルを実行し、アプリケーションの接続文字列を更新するLambda関数をSNSトピックにサブスクライブします。

C. 最新の自動スナップショットを別のリージョンにコピーするAWS Lambda関数を作成します。Amazon CloudWatch Events スケジュールイベントを作成して、4時間ごとにLambda機能をトリガーします。データベース可用性イベントが発生したらAmazon SNSメッセージを発行するRDS通知イベントを作成します。 スナップショットを災害復旧リージョン内の新しいインスタンスに復元すし、アプリケーション用の接続文字列を更新するLambda関数をSNSトピックにサブスクライブします。

D. 別のリージョンにあるデータベースインスタンスのリードレプリカを設定します。データベース可用性イベントが発生したらAmazon SNSメッセージを発行するRDS通知イベントを作成します。 リードレプリカを昇格してアプリケーションの接続文字列を更新するAWS Lambda関数を作成します。そのLmabda 関数をSNSトピックにサブスクライブします。

正解(反転して表示):A

解説:

問題のポイントは、”4時間のRPOと2時間のRTO” の要件を満たすRDS のクロスリージョン災害対策の方法の中で、”最も費用対効果の高い方法” が問われています。問題を解くには、RPO と RTO の言葉の定義を理解しておく必要があります。

– RPO = 目標復旧時点、障害発生時からどれくらいさかのぼった状態に復元できるかを示す要件
– RTO = 目標復旧時間、障害発生時からどれくらいの時間でシステムを復元できるかを示す要件

まずAですが、これは適切な方法に見えます。次にB を見ると、機能的には要件を満たしますが SQL ダウンプファイルを4時間毎に取るとRDS のマスターインスタンスのIO 処理が高騰しますので全体の処理が遅くなる懸念があります。場合によってはRDS のインスタンスサイズを大きめのものに変更する必要があり費用対効果が高いとは言えません。C は、RDS の自動スナップショットを4時間ごとにコピーはしますが、自動スナップショットは24時間毎に実行されますのでRPO 4時間の要件には合いません。D でも実現できますが、RPO 4時間という要件に対しては過剰ですので、”最も費用対効果が高い” とは言えません。よって正解はA となります。

まとめ

AWS 認定 DevOps エンジニア – プロフェッショナル サンプル問題の解説しました。いくつか問題を解く際のテクニックも合わせて記載しました。以下にまとめておきます。

  1. 問題文で何が問われているのかのポイントを把握した上で、問題をときはじめる
  2. 問題文の限定的な言い回しに注意する(例:最も費用対効果の良いもの など)
  3. 選択肢は全体をざっと見て、解答のパターンを見抜く
  4. 消去法で、選択肢を狭める

では、試験頑張ってください!