AWS 認定プログラムについて メモ
AWSの認定プログラムについてメモしておきます。
aws.amazon.com
公式でSlideShareに情報がまとめられています。
種類、試験料、勉強方法についてメモしておきます。
種類
現在、Specialtyの資格が増えて全部で7個の資格が存在します。
- Associate
- Solution Architect
- Developer
- SysOps Administrator
- Professional
- Solution Architect
- DevOps Engineer
- Specialty
- Advanced Networking
- Big Data
料金
- Associateレベル試験
- 16200円
- Professionalレベル試験
- 32400円
- 模擬試験(各資格ごとにある)
- 一律2160円
- 再認定試験(2年ごとに再認定が必要)
- 一律8100円
全部受けるとかなり高いです。Professionalを受けるにはそれに対応するAssociateの資格が必要です。
ex) DeveloperかSysOps Administratorを持っていれば、DevOps Engineerを受けることが可能
またProfessionalを取得すると、Associateの再認定が不要になるので2年経過する直前にProffessionalを取得するとお得かもしれません。
Solution ArchitectとDevOps Engineerは別々の再認定が必要になります。
勉強法
ある程度AWSを触ったことがある方を前提に書いています。
1. 無料問題集
数は少ないですが、まずは無料の問題集を探してみます。
yamano3201.hatenablog.jp
2. 模擬試験
続いて模擬試験を受けます。問題になれるという意味では一番効果があると思います。
いくつかのパターンからランダムで出題されるようで、同じ問題にあたる可能性があるので1度で充分でしょう。
分野ごとの点数は出ますが、どの問題を間違ったのか、どれが正解なのかはわからないので、必ずコピペして後で復習しておきましょう。
3. 対策本
そして合格対策 AWS認定ソリューションアーキテクト - アソシエイトを購入しましょう。
合格対策 AWS認定ソリューションアーキテクト - アソシエイト
- 作者: 大塚康徳(日立インフォメーションアカデミー)
- 出版社/メーカー: リックテレコム
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Associateならここまでで充分だと思います。
4. Proffesional対策
Proffesionalの問題がなかなか見つからなかったのですが、UdemyとLinux AcademyにProffesionalの問題が存在しました。有料で英語しかなかったのですが試験を受ける前に目を通すとよいかもしれません。
www.udemy.com
linuxacademy.com
Linnux Academyには7日間の無料トライアルがあるので、こちらを試してみました。
動画の説明資料だけではなく、解答つきの問題があるのでとても便利でした。
おまけ. QuickLabs
QuickLabsにも試験対策があります。
qwiklabs.com
こちらは問題形式ではなく、実際にAWSを触る演習になります。
演習に参加するにはお金がかかりますが、実際に手を動かす環境は一時的なアカウントが発行されて無料で使用できるようになっています。
手を動かせる環境がない場合はこちらを使うのも有効でしょう。今度やってみるか迷い中です。
最後に
私はSolution ArchitectとSysOps AdministratorのAssociateを持っています。
出題範囲が被っていたので、1度の勉強で2つとも取得することができました。
近いうちにSolution ArchitectのProffesionalも受けようと考えています。
Udemy Cyber Monday セール ほとんど1200円
1万円から2万円ほどするオンライン学習動画が1200円で購入できるということで、普段勉強しないような分野から3つ購入しました。
セキュリティの分野から1つ。
www.udemy.com
趣味でしか触ってないフロントエンドの勉強も兼ねて1つ。
www.udemy.com
勉強しようと思っていたけどなかなか手が出せていなかったReactで1つ。
www.udemy.com
他にも無料のものもあったのでAWS関連で2つ。
www.udemy.com
中身はまだ見てません。
セールは11/28までなのでお早めに。
CloudFormationでクロススタック参照
まずCloudFormationを勉強したい場合は、「CloudFormation Getting Started with YAML」を読みましょう。とても参考になりました。
後半ではWeb3階層アーキテクチャのテンプレート分割例が記載されています。
テンプレート自体は記載されていなかったので、これを参考にWeb3階層アーキテクチャのテンプレートをクロススタック参照で以下のテンプレートに分割して作成してみました。
- vpc.template
- bastion.template
- app.template
- db.template
- lb.template
- sg.template
- route53.template
ここではvpc.templateでExportして、bastion.templateでImportするという例でメモしておきたいと思います。
Exportの仕方
vpc.templateでは、VPCやSubnetなど後続のテンプレートで呼び出したい値をOutputsでExportしておきます。
Export Nameは固定値でも良いのですが、同じリージョンで複数作成することを考慮すると変数などを付けてバッティングを避けたほうが良さそうです。
ここではStackNameという事前に定義されている擬似パラメーターを使用することにしました。擬似パラメーター参照 - AWS CloudFormation
!Subという組み込み関数を使用することで変数を展開しています。Fn::Sub - AWS CloudFormation
Outputs: VPC: Value: Ref: VPC Export: Name: !Sub "${AWS::StackName}-VPC" # 展開するとvpc-stack0-VPC
CloudFormation実行時のスタック名をvpc-stack0として実行したので、vpc-stack0-VPCという名前がExportされました。
Importの仕方
次にbastion.templateをbastion-stack0というスタック名で実行します。
さきほどのVPCの値をImportするときに、vpc-stack0という名前を教えなくてはなりません。
ここではParametersを使って、実行時に値を直接入力することにしてます。VPCStackNameというパラメータを定義し、デフォルトではvpc-stack0が返るようにしています。
Parameters - AWS CloudFormation
あとは値を呼び出したいところでImportします。Exportした値と同じ値を指定すれば呼び出し可能です。
Parameters: VPCStackName: Type: String Default: vpc-stack0 Resources: BastionSG: Type: "AWS::EC2::SecurityGroup" Properties: VpcId: Fn::ImportValue: !Sub ${VPCStackName}-VPC # 展開するとvpc-stack0-VPC
最後に
整理したら全てのテンプレートを公開したいですね。
CloudFormationでEC2用のIAMロールを作成するときはインスタンスプロファイルに注意する
EC2からAWSのリソースにアクセスする必要がある場合は、アクセスキーではなくIAMロールを使ってアクセスしましょう。
以下にコンソールからIAMロールを作成する方法が記載されています。
qiita.com
IAMロール作成の流れ
コンソールから作成すると、以下の流れに見えます。
- IAMロール作成
- IAMポリシーを選択
- EC2作成時にIAMロールを指定
細かいけどこれは間違いで、実際には以下の流れが正しいです。
インスタンスプロファイルはEC2にIAMロールを紐づけるために必要なものになります。
コンソールから作成するとIAMロールと同名のインスタンスプロファイルが作成されるので、EC2作成時にはIAMロールを指定しているように見えるのでしょう。
CloudFormationで作成する場合にはインスタンスプロファイルを作成することに注意しましょう。これを忘れるとIAMロールを作成していたとしても、EC2起動時にIAMロールと紐づけることができません。
CloudFormationサンプル
- IAMロール作成
BastionIAMRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: "Allow" Principal: Service: - "ec2.amazonaws.com" Action: - "sts:AssumeRole" Path: "/"
- IAMポリシーを選択
- Actionに必要な権限を記載しましょう。
BastionIAMPolicy: Type: "AWS::IAM::Policy" Properties: PolicyName: BastionIAMPolicy Roles: - Ref: BastionIAMRole PolicyDocument: Statement: - Effect: "Allow" Resource: "" Action: - "ec2:*"
- インスタンスプロファイルを作成してIAMロールと紐づける
- Roleには上で記載したIAMロールを指定します
BastionIAMInstanceProfile: Type: "AWS::IAM::InstanceProfile" Properties: Path: "/" Roles: - Ref: BastionIAMRole
- EC2作成時にインスタンスプロファイルを指定
- IamInstanceProfile以外のプロパティは省略しています
- ここで紐付けているのがIAMロールじゃなくてインスタンスプロファイルだということに注意しましょう。
BastionEC2: Type: "AWS::EC2::Instance" Properties: IamInstanceProfile: Ref: BastionIAMInstanceProfile
CloudFormerを使ってAWS CloudFormationのテンプレートを自動作成する
CloudFormerとは自分で構築したAWSリソースから、AWS CloudFormationのテンプレートを自動作成してくれるツールになります。
自動で作成とは言ってもそのまま使いまわせるわけではないので注意が必要です。
また、EC2上にCloudFormerを構築してブラウザアクセスして使用するというところが、他のAWSのサービスとは違うところだと感じました。
EC2上にCloudFormerを構築する
まずはEC2上に構築します。公式で用意されているCloudFormationのサンプルテンプレートがあるのでそれを実行しましょう。
以下のリンクを見ながら作業しました。
kaotil.com
後でログインする時に使うユーザ名/パスワードを入力しておきます。
CloudFormerにブラウザアクセスする
CloudFormation実行が成功するとOutputsにURLが表示されるのでアクセスします。
構築時に指定したユーザ名/パスワードを入力してログインします。
念のためこの時点でSecurityGroupをコンンソールから触ってアクセスを制限しておきました。
リソースを選択してテンプレートを作成する
続いてテンプレート化したいリソースにアクセスしていきます。
以下の大項目から選択します。
- DNS
- VPC
- VPC Network
- VPC Security
- Network
- Managed Service
- Managed Config
- Compute
- Storage
- Storage Config
- App Service
- Security
- Operational
以下のリンクにAWS CloudFormer がサポートしているリソース一覧がまとまっているので、こちらを参考にテンプレートにしたいリソースを選択していきましょう。
qiita.com
選択するとすぐにテンプレートが作成されます。
EC2の料金がかかってしますので、不要になったCloudFormerのCloudFormationスタックは削除しておきましょう。
注意する点
一回でうまくいくものではないので何回かトライ&エラーで頑張るしかないです。困ったらリファレンスを見ましょう。
docs.aws.amazon.com
以下に個人的に感じた注意点をまとめておきます。
- subnetxxxxxxxxのように各種IDがそのまま出力される
- PublicSubnetAのように汎用的な名前に変換する
- PublicSubnetB, PrivateSubnetA, PrivateSubnetB, PublicSubnetAのように順番が綺麗じゃない
- 順番を整理する
- outputsが出力されない
- 結果を確認したい値があるものや他のスタックで参照したいものは出力する
- 対応していないリソースがある
- リファレンスを見ながら追加する。CloudWatchLogsみたいにリソースそのものがないものや、AutoScalling::LaunchConfigurationのUSERDATAみたいにリソースはあるけど一部プロパティがないものもあったので注意。
- アタッチはされているけど、作成されないリソースがある
- IAM::InstanceProfileとかAWS::EC2::VPCEndpointはアタッチはされているけど、リソースがないのでエラーになってしまいます。事前に作成するかCloudFormationで一緒に作成するかしましょう。
IAMで踏み台サーバのローカルユーザを一元管理を実行してみる
この記事の続きです。
yamano3201.hatenablog.jp
踏み台サーバのCloudFormationテンプレートでは実現できなかった、以下の要件に対応したいと思います。
- ユーザアカウントごとにログインさせる
- 可能な限りユーザアカウントの管理を減らしたい
- sudo を使わせない
基本的には以下のサイトと同じです。
qiita.com
やってることは踏み台上にIAMユーザと同名のローカルユーザを自動作成して、アカウント管理を減らそうというものになります。
IAMユーザにはSSH公開鍵を登録できるので、それをローカルユーザの.ssh/authorized_keysとしてセットすることでSSHログインも管理できます。
事前準備
USER DATAに登録
オートスケールで自動で作成されるたびにスクリプトを流します。
スクリプトはリンク先bashスクリプトとほぼ同じなので割愛します。
USER DATA上でjqをインストールする必要があるのでご注意ください。
sudo yum install -y jq
前回作成したUSER DATAの下に、jqインストールとリンク先スクリプトを追加するとうまく動くと思います。
鍵の更新についても実装していますが、オートスケールによって毎回新規で作成されるので余分なところは削ってもよいかもしれないです。
configurationを作成してアタッチする
オートスケールのconfigurationは編集できないので、新しく作成しましょう。(コピーすると簡単です)
そこでUSER DATAを編集します。
初期ユーザであるec2-userではなく、各ローカルユーザでログインさせたい場合は鍵の登録は不要です。
最後にAutoScallingGroup側で新しいconfigurationをアタッチすれば完成です。
最後に
前回記事と合わせると、以下の要件を合わせた踏み台の作成が完成しました。
- ログインの証跡を残す
- 証跡はS3に保存
- yum updateが定期的に走る
- オートスケールする(可能であればログインするときだけ起動するようにしたい)
- ユーザアカウントごとにログインさせる
- 可能な限りユーザアカウントの管理を減らしたい
- sudo を使わせない
踏み台サーバのCloudFormationテンプレートを実行してみる
踏み台サーバの要件を洗い出してみたところ、ほとんどが提供されているCloudFormationのテンプレートでカバーできていることがわかったので、まずは実行してみることにしました。
基本的には以下のサイトと同じです。
dev.classmethod.jp
要件
- テンプレートで実現できていること
- ログインの証跡を残す
- 証跡はS3に保存
- yum updateが定期的に走る
- オートスケールする(可能であればログインするときだけ起動するようにしたい)
- テンプレートで実現できていなかったこと
- ユーザアカウントごとにログインさせる
- 可能な限りユーザアカウントの管理を減らしたい
- sudo を使わせない
今回はテンプレートでほとんどの要件を満たしていることを確認しました。
実現できていないことに関しても対策を行ったので別の記事にしたいと思います。
※2017/11/16 追記しました。
yamano3201.hatenablog.jp
実行
リンク先から「Launch Quick Start(for new VPC)」を実行します。遷移先はオレゴンリージョンになってるので構築したいリージョンに変更しましょう。
docs.aws.amazon.com
詳細は以下を入力して実行しました。
for existing VPCのほうを実行するとなぜかAutoScallingGroupの作成でタイムアウトになって以下のエラーが出てしまいました。解析はしてないです。
Received 0 SUCCESS signal(s) out of 1. Unable to satisfy 100% MinSuccessfulInstancesPercent requirement
確認
- ログインの証跡を残す
- ec2-userでログインして/var/log/bastion/bastion.log を確認するとコマンド履歴が残っていることがわかります
- 証跡はS3に保存
- yum updateが定期的に走る
- cronで実現していました。
$ crontab -l 0 0 * * * yum -y update --security
- オートスケールする(可能であればログインするときだけ起動するようにしたい)