【合格体験記】AWS Certified DevOps Engineer - Professional に合格しました

2021/10/16 に DevOps Professional 試験を受験して無事に合格できました。DevOps Pro 試験に合格するために準備してきたことを書いていきます。

![certificate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780549/2b7be237-f5f9-e5ac-e80b-61f931f73abc.png)

## 準備期間

合計 5 日間使用しました。内訳は、

- Day 1: [Exam Readiness](https://www.aws.training/Details/eLearning?id=40664) 視聴
- Day 2・3: 試験頻出サービスの aws ドキュメントに一通り目を通す
- Day 4・5: [WEB 問題集で学習しよう](https://aws.koiwaclub.com/exam/dop/)(以下、web 問題集)を解く
- Day 6: 本試験受験

## 対策

DevOps Professional には今のところ（2021/10/17時点で）対策本がないので、 aws のドキュメントと web 問題集、Exam Readiness を使って対策しました。Exam Readiness で DevOps Pro 試験の概要と試験を解く上でのポイントを理解して、DevOps Pro 試験で頻出のサービス（Code系/CloudFormation/AutoScaling）については、aws のドキュメントを一通り軽く流し読みました。その後 web 問題集を使って知識のアウトプットをし、間違えた問題は解説を読んで足りない知識を補充するようにしました。

### キーポイントを探す

web 問題集を解く上で意識したことは、問題文のキーポイントを見つけることです。「問題文のキーポイントを見つける」というのは Exam Readiness で提案されていたことです。問題文からキーポイントを見つけることで、解答を絞り込むことができます。

キーポイントを見つけるとはどういうことかというと、例えば、下記のような問題[^1]があったします。

> ある企業が AWS CodeCommit を使用して、アプリケーションのソースコードを管理しています。
この企業は AWS CodePipeline を使用して、このアプリケーション用の CI/CD パイプラインを作成しようとしています。CodeCommit リポジトリのマスターブランチに変更が加えられた場合に、このパイプラインを自動開始する必要があります。このアプリケーションには毎日変更が加えられるので、変更後できるだけ速やかにパイプラインを開始する必要があります。
>
>これらの要件を満たすには、どうすればよいですか。

この問題のキーポイントは、

- AWS CodePipeline を使用して、このアプリケーション用の CI/CD パイプラインを作成
- CodeCommit リポジトリのマスターブランチに変更が加えられた場合に、このパイプラインを自動開始
- 変更後できるだけ速やかにパイプラインを開始する必要

この 3 点です。選択肢の中から、CodeCommit の変更を検出し CodePipeline を開始することができるものを選ぶことになります。「変更後できるだけ速やかにパイプラインを開始」とあるので、CodeCommit を定期的に検査、などのスケジュール型のソリューションは、イベント駆動のソリューションよりもパイプラインの実行までにリードタイムがあるので、選択肢から外すことができます。また、CodeCommit の変更を検知するだけで、CodePipeline の実行方法についての説明がない選択肢も外すことができます。このようにして、キーポイントと選択肢を照らし合わせることで解答を絞り込むことができます。

DevOps Pro 試験は問題文が長いので、キーポイントをいかに早く見つけるかが解答時間を短縮するコツになります。

私の場合、75 問解いた時点で残り 50 分でした。その後、フラグを付けた問題を見直し、すべての問題の見直しまでして、10 分ほど時間が余りました。

## サービスごとの対策

問題文の中からキーポイントを見つけても、知識がないと選択肢を絞り込むことができないので、aws のドキュメントを読んで知識を蓄えるようにしました。

### AutoScaling

[トラブルシューティングするために、異常のある Amazon EC2 インスタンスの Auto Scaling の終了を遅らせる方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/auto-scaling-delay-termination/)

[blue/green デプロイ](https://blog.serverworks.co.jp/tech/2018/07/18/aws_blue_green_deployments/)

[Auto Scaling グループに必要な起動設定の変更](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/change-launch-config.html)

[Amazon EC2 Auto Scaling のスケーリングクールダウン](https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/Cooldown.html)

### Systems Manager

[AWS Systems Manager インベントリ](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-inventory.html)

[AWS Systems Manager オートメーション](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-automation.html)

[AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-patch.html)

### CloudFormation

[ネストされたスタックは UPDATE_COMPLETE_CLEANUP_IN_PROGRESS、UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS または UPDATE_ROLLBACK_IN_PROGRESS 状態にあります。](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-nested-stacks-are-stuck)

[クロススタックの参照](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)

[UpdatePolicy 属性](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html)

[カスタムリソース](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)

[AWS CloudFormation ベストプラクティス](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/best-practices.html#cross-stack)

### Service Catlog

[プロビジョニングされた製品](https://docs.aws.amazon.com/ja_jp/servicecatalog/latest/adminguide/what-is_concepts.html#what-is_concepts-provprod)

### IAMアクセスアドバイザー

[IAM の最終アクセス時間情報の表示](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_access-advisor-view-data.html)

### CodeDeploy

[CodeDeploy でデプロイ設定を使用する](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/deployment-configurations.html#deployment-configuration-server)

[AppSpec の「hooks」セクションAWSLambda デプロイメント](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html#appspec-hooks-lambda)

[Blue/Green デプロイの概要](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/welcome.html#welcome-deployment-overview-blue-green)

[自動ロールバック](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html#deployments-rollback-and-redeploy-automatic-rollbacks)

[Amazon CloudWatch Events でのデプロイのモニタリング](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/monitoring-cloudwatch-events.html)

[Blue/Green デプロイ用のアプリケーションを作成する (コンソール)](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/applications-create-blue-green.html)

### CloudTrail

[グローバルサービスイベントについて](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-global-service-events)

### IAM

[IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)

### Elastic Beanstalk

[負荷分散されたスケーラブルな環境](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features-managing-env-types.html#autoscale-environ)

[コンテナコマンド](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands)

[設定ファイル (.ebextensions) による高度な環境のカスタマイズ](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/ebextensions.html)

[Elastic Beanstalk の保存された設定を使用する](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/environment-configuration-savedconfig.html)

### S3

[クロスリージョンレプリケーションを使用する場合](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/replication.html#crr-scenario)

### DynamoDB

[グローバルテーブル: DynamoDB を使用した複数リージョンレプリケーション](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GlobalTables.html)

### Lambda

[Amazon RDS で AWS Lambda 使用する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-rds.html)

[AWS Lambda 関数を使用するためのベストプラクティス](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html)

### CodePipeline

[CodePipeline イベントのモニタリング](https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

[CodeCommit ソースアクションと CloudWatch Events](https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/triggering.html)

### RDS

[Amazon RDS を使った災害復旧戦略の実装](https://aws.amazon.com/jp/blogs/news/implementing-a-disaster-recovery-strategy-with-amazon-rds/)

### CloudWatch Logs

[サブスクリプションを使用したログデータのリアルタイム処理](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Subscriptions.html)

### CodeCommit

[AWS CodeCommit リポジトリイベントの通知を設定する](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-repository-email.html)

### ECS

[CodeDeploy を使用した Blue/Green デプロイ](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/deployment-type-bluegreen.html)

### OpsWorks

[カスタムクックブックのインストール](https://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/workingcookbook-installingcustom-enable.html)

### 障害復旧

[AWSへの迅速な復旧を目的としてパイロットライト](https://aws.koiwaclub.com/wp-content/uploads/2018/09/AWS_Disaster_Recovery_01242012.pdf#page=11)

## 終わりに

スコアレポートでは、「ポリシーと標準の自動化」だけ「改善が必要」でした。ここだけは、別途対策が必要そうです。
次は、SAP に挑戦します。

[^1]: https://d1.awsstatic.com/ja_JP/training-and-certification/docs-devops-pro/AWS-Certified-DevOps-Engineer-Professional_Sample-Questions.pdf から引用