AWS認定試験の合格に必要な知識を確認します。
本稿では下記の略語を使用します。
略称 | 原語 |
---|---|
AZ | Availability zones |
I/O | Input/Output |
ACL | Access control list |
GW | Gateway |
IGW | Internet Gateway |
FW | Firewall |
IPS | Intrusion prevention system |
RI | Reserved instances |
SSO | Single sign-on |
SG | Security group |
SF | Step Functions |
AD | Active Directory |
GSI | Global Secondary Index |
LSI | Local Secondary Index |
前提
本稿では,アソシエイトレベルのデベロッパー(DVA:AWS Certified Developer Associate)に関する直前対策を行います。DVAは従来C01とよばれる旧形式の試験が行われていましたが,現在ではC02とよばれる新形式の試験が実施されています。
アソシエイトレベルのデベロッパーは,基礎レベルのクラウドプラクティショナーの知識を前提としています。したがって,本稿は下記のクラウドプラクティショナー前提対策の内容を前提としています。
AWSのサービスによる開発
リアルタイムアプリを作成する代表的なアーキテクチャを説明せよ。
- API GatewayでWebSocket APIを作成し,バックエンドにlambda関数を指定し,DynamoDBをデータストアとして利用する。いわゆるRestAPI。
- AppSyncでGraphQLのSubscriptionをWebSocket経由で利用し,DynamoDBをデータストアとして利用する。
Cognitoは認証後にlambda関数をトリガーできるか。
できる。
ElastiCacheにおける遅延読み込みを説明せよ。
キャッシュヒットした場合はキャッシュを返し,キャッシュミスした場合はDBからレコードを取得する戦略。いわゆるキャッシュを使った実装そのもの。
DynamoDBにおけるクエリフィルター・スキャン制限パラメータ・クエリのページサイズを説明せよ。
- クエリフィルター
- クエリの取得後にフィルターを適用する
- スキャン制限パラメータ
- テーブル内の全てのデータを走査するため効率が悪いスキャン操作において,スキャン操作のパフォーマンスを向上させるための条件を指定するための仕組み
- クエリのページサイズ
- クエリ操作で一度に返されるアイテム数を制限するためのパラメータ。基本的に,1つの Query は1MB以内の結果セットだけを返すが,クエリのLimitパラメータを使用してページサイズを小さくすることができる。
ElastiCacheのキャッシュ戦略を説明せよ。
- 遅延読み込み
- いわゆるキャッシュの利用。キャッシュにデータがあればキャッシュから取り出し,なければDBから値を取りだしつつキャッシュに書き込む戦略。キャッシュのデータが古くなってしまうという問題がある。
- ライトスルー
- 毎回DBへの書き込みとキャッシュへの書き込みを同時に行う戦略。キャッシュに大量のデータが格納されるという問題がある。
- TTL
- 遅延読み込みにおけるデータが古くなってしまうという問題を解消しつつ,ライトスルーのキャッシュにデータを大量に格納してしまう問題も解決するための概念。TTLで定めた時間が経過すると,キャッシュからデータが削除される仕組み。
lambdaのリソースベースポリシーと実行ロールの違いを説明せよ。
- リソースベースポリシー
- 「誰がlambda関数を呼び出せるか」を定義する。S3のバケットポリシーと同じようなイメージ。
- 実行ロール
- lambdaにおけるアイデンティティベースのポリシー。lambdaが使用する権限を定義。
lambdaのイベントソースマッピングを説明せよ。
lambdaを特定のイベントソースに関連付けるための仕組み。S3やDynamoDBをソースとして設定できる。
新バージョンのlambdaを作成する際,イベントソースマッピング更新を自動化する方法を説明せよ。
新バージョンのlambdaにエイリアスを割り当て,エイリアスのARNを利用してイベントソースマッピング更新する。これにより,lambdaのバージョンアップおよびロールバック時にイベントソースマッピングを毎回行う必要がなくなる。エイリアスを利用しないと,毎回新バージョンのlambdaのARNを利用してソースマッピングを更新する必要がある。
SFのHeartBeatSecondsと再試行ポリシーにおける別のアクティブティワーカーについてまとめよ。
HeartBeatSecondsで定められた時間をHeartBeatの間隔が超えると,SFが失敗する。ただし,HeartBeatとは長時間実行されるステップが正常に進行していることをSFに通知するための仕組みで,アクティビティワーカーとはSFのステップ内で特定の処理を行うためのコンポーネントである。SFでは,HeartBeatSecondsを超えた状態でHeartBeatを受け取らない場合には,Retry.MaxAttemptの再試行ポリシーによって別のアクティビティワーカーによって当該Jobを再試行することができる。
lambdaでDB接続を再利用する方法を説明せよ。
ハンドラメソッドの外で接続を初期化し,ハンドラメソッドで再利用する。
lambdaはDynamoDBのstreamをポーリングできるか。
できる
DynamoDBテーブルではトリガーを設定できるか。
できない。DynamoDBでは,ストリームを有効にすることでトリガーを設定できる。
DynamoDBのAPIコールを簡単にまとめよ。
- GetItem:プライマリキーを指定して単一のアイテムを取得
- BatchGetItem:プライマリキーを指定して複数のアイテムを取得
- Query:プライマリキーおよびセカンダリインデックスに基づいて複数のアイテムを取得
- Scan:テーブル内のすべてのアイテムから複数のアイテムを取得
ただし,プライマリキーはパーティションキー,もしくはプライマリキーとソートキーの複合プライマリキーのいずれかを指し,セカンダリインデックスはグローバルセカンダリーインデックス,もしくはローカルセカンダリインデックスのいずれかを指す。詳しくはSSA対策を参照されたい。
VPC lambdaはユーザの作成したVPCに配置可能か。
配置しようと思えば配置できる。例えば,private subnetに配置したRDSにアクセスするlambdaはprivate subnetに置いて,RDSはlambdaにアタッチしたSGからのみアクセスを受け付けるようにする。
他にも,lambdaはユーザが作成したVPCとは別にAWSが管理するVPCに作成することもできる。この場合は,ユーザのVPCで作成したENIがlambdaからの通信を受け付ける。
オンプレサーバでX-Rayトレーシングを有効にする方法を述べよ。
オンプレサーバにX-Rayデーモンをインストールする。lambdaでPutTraceSegmentsのAPIをコールすることでもX-Rayトレーシングを有効にすることはできるが,X-Rayデーモンを利用した方が効率が良い。
S3イベント通知はGetリクエストで発火できるか。
できない。PUT・POST・COPY・DELETEとマルチパートアップロードイベントで発火される。
S3 Object Lambdaを説明せよ。
lambdaを使用して,標準S3のGET・HEADおよびLISTリクエストの出力を自動的に処理する仕組み。
SQSのデフォルトはショートポーリングとロングポーリングのどちらか。
ショートポーリング。
WebSocket APIはHTTP APIとREST APIのどちらで定義するか。
どちらも利用しない。WebSocket APIはHTTP APIやREST APIと並列の概念と捉える。
コールバックURLとは何か。
(APIの)処理が完了した後に遷移するURL
Kinesis Data Streamsでレコード(データ)の重複を防ぐ方法を説明せよ。
レコードに主キーを埋め込む。メッセージ重複排除IDは,Kinesis Data Streamsでは利用できない。
複数のコンシューマがデータを処理できるキューイングサービスは何か。
Kinesis Data Streams。SQSやKinesis Data Firehoseでは,複数のコンシューマが同時にキューを処理できないため不適切。
CloudFormationテンプレートでAWS SAMを利用する方法を簡単に説明せよ。
TransformセクションにおいてSAMのバージョンを指定する。
オンプレミスのサーバにIAMを通じて権限を付与する方法を説明せよ。
IAMユーザとアクセスキーを発行し,サーバに認証情報ファイルを作成する。基本的に,権限制御はIAMロールを使う方法がベストプラクティスだが,オンプレミスのサーバや開発者のローカルなど,AWSクラウド外の端点はアクセスキーを直接使って認証するしか方法がないと理解する。
Auroraのエンドポイントをまとめよ。
- クラスターエンドポイント:プライマリに接続
- リーダーエンドポイント:レプリカに接続
- インスタンスエンドポイント:各インスタンスに接続
- カスタムエンドポイント:複数のインスタンスに接続
ただし,インスタンスエンドポイントはフェールオーバーに対応しておらず,カスタムエンドポイントはエンドポイントタイプを適切に設定すればフェールオーバにも対応できることに注意する。
DynamoDBのQueryとScanを一言でまとめよ。
- Query:パーティションキーとソートキーで検索する。
- Scan:パーティションキーとソートキー以外の属性で検索する。
DynamoDBのfilter-expressionとprojection-expressionを比較してまとめよ。
- filter-expression(フィルタ式)
- QueryとScanの後に結果を絞り込む。SQLでいうWHEREのイメージ。
- projection-expression(プロジェクション式)
- 特定の属性を取得しないようにする。SQLでいうSELECTのイメージ。
ただし,フィルタ式ではパーティションキーとソートキー以外を指定する必要がある点に注意する。また,フィルタ式では適用前の料金が加算されため,Queryで十分絞り込んだ後でフィルタ式を使う,もしくはそのようなテーブル設計を行うべきといえる。
GSIが有効な場面とLSIが有効な場面を比較してまとめよ。
GSIは元々のパーティションキーとソートキーとは別にインデックスを作成したい場合,LSIは元々のパーティションキーとソートキーに加えてインデックスを作成したい場合に有効。
Kinesis Data Streamsで複数のシャードを作成したとき,順序はどこまで保証されるか。
各シャード内のレコードは順序が保証され,各シャード間の順序は保証されない。特に,APIを使ったとしても,LIFOやランダムなどFIFO以外の指定はできない点に注意する。
SQSの重複排除IDで検出されたメッセージはどうなるか。
削除される。重複排除間隔で指定された時間経過後に再度メッセージを送ると,正常に受け付けられる。
CloudWatchでカスタムメトリクスを送信するためのAPIは何か。
putMetricData
マッピングテンプレートを簡単に説明せよ。
API gatewayの機能で,バックエンドから受け取ったデータを加工することができる。
API gatewayのプロキシ統合と非プロキシ統合を説明せよ。
- プロキシ統合:リクエストパラメータの受け渡しは行い,マッピングテンプレートを利用しない。
- 非プロキシ結合:リクエストパラメータの受け渡しは行わず,マッピングテンプレートを使用する。
プロキシ結合ではリクエストパラメータの制限ができないこと,およびプロキシ結合ではマッピングテンプレートの管理が煩雑になる傾向がある点に注意する。また,非プロキシ結合はカスタム結合ともよばれる。統合タイプとしては,プロキシ統合がAWS_PROXY,非プロキシ統合がAWSとなる。
lambdaのIteratorAgeメトリクスを説明せよ。
あるイベントがイベントソースに書き込まれた時点と,lambdaがイベントソースからデータをポーリングした時点との差を表す。
lambdaでCPUパワーを上げる方法を述べよ。
lambdaの割り当てメモリを増やすこと。lambdaでは,CPU・ネットワーク帯域・ディスクのI/Oは,lambdaの割り当てメモリに比例して割り当てられる。
RDSの自動バックアップの最大保持期間はどれくらいか。
35日間。
DynamoDBにはTTLは存在するか。
存在する。
LSIとGSIを整合性の観点から比較せよ。
- LSI:強い整合性
- GSI:結果整合性
LSIとGSIのパーティションキーとソートキーの制限を簡潔にまとめよ。
- LSI:パーティションキーは同じで異なるソートキーを設定できる
- GSI:異なるパーティションキーとソートキーを設定できる
ElasticBeanStalkのワーカー設定を簡単に説明せよ。
BeanStalkコンテナ内のEC2インスタンスでsqsdデーモンを動作させ,指定されたSQSにメッセージが溜まったときに,そのメッセージを取得する環境を作成する設定のことを指す。つまり,長い時間を要する処理をバックグラウンドで担当するような,EC2で構築された環境のこと。
DynamoDBでクライアント側のリクエストにより意図しない上書きを防ぐための設定は何か。
バージョン番号を指定したオプティミスティックロック。楽観的排他制御と訳されるが,差し当たりは単なる排他制御を捉えておけばよい。
APIでMFAを利用する方法の一つを述べよ。
GetSessionToken APIでMFAコードをリクエストパラメータに含めることで,一時的な認証を得ることができる。
CloudFormationの疑似パラメータを簡単に説明せよ。
CloudFormationで事前に定義された変数。例えばAWS::Region
では,デプロイされるリージョンを参照できる。
Kinesis Data Streamsのコンシューマにlambdaを利用する際,最大同時実行数はいくつになるか。
シャード数。
lambdaでは再帰処理を実装するべきか。
実装するべきでないとベストプラクティスに明記されている。
lambdaのログはS3とCloudWatchのどちらに保存されるか。
CloudWatch
DynamoDBでホットパーティションを防ぐための手段を説明せよ。
パーティションキーの後ろに乱数を付け加える。書き込み時は単に乱数を付け加えれば分散され,読み込み時は乱数以前のパーティションキーで検索する。
sam local invokeとsam local start-lambdaの違いを説明せよ。
- sam local invoke:lambdaをローカルで実行する
- sam local start-lambda:lambdaのエンドポイントをローカルで提供する
lambdaのtmpディレクトリのストレージ制限はいくらか。
512MB
AWSにおけるスロットリングとは
一定時間内に受信可能なリクエスト数を制限し,制限を上回るリクエストは拒否してエラーを返却すること。時間経過によって再び受信可能となる。
lambdaのprovisioned concurrencyとは
同時並行数だけlambdaを事前に立ち上げておく機能。concurrencyは同時実行性という意味。リソースを確保するためコストがかかる。
セキュリティ
Parameter StoreとSecrets Managerの違いは何か。
最も狙われやすいポイントとしては,Parameter Storeは認証情報自動更新ができず,Secrets Managerは認証情報自動更新できるという点。
別アカウントにAPIアクセスを許可する方法の一例を挙げよ。
- APIの設定
- メソッド認可タイプをAWS_IAMにする
- 各IAMユーザのみにアクセスを許可するリソースベースのポリシーをAPIにアタッチする
- 発信元での操作
- アクセス許可を与えるIAMポリシーをIAMユーザにアタッチする
- 署名バージョン4(Sigv4)プロトコルを利用してAPIリクエストに署名する
他にも,IAMユーザではなくIAMロールを用いた制御方法も挙げられるため,注意する。
エンベロープ暗号化を行う際に,データベースにはどのような情報が保存されるか。
- 暗号化されたデータ
- 暗号化されたデータキー
対称暗号化キーと非対称暗号化キーの違いと使われ方を説明せよ。
対称暗号化キーは共通鍵暗号の鍵,非対称暗号化キーは公開鍵暗号の鍵と理解する。通常,AWSのKMSでは対称暗号化キーが使われるが,暗号化や署名には非対称暗号化キーが使われる。デフォルトは対称暗号化キー。非対称暗号化キーペアのプライベートキーは,対称暗号化キーによって保護される。非対称暗号化キーは,特殊な要件が求められない限り使う場面は少ない。
クライアント側および転送中の暗号化では,それぞれ対称・非対称暗号化キーのどちらが使われるか。
- クライアント側:対称暗号化キー(データ自体は共通鍵で暗号化)
- 転送中:非対称暗号化キー(通信路は公開鍵暗号で暗号化)
CognitoのユーザプールとIDプールの違いを簡単に説明せよ。
- ユーザプール:認証
- IDプール:認可
プライベートなS3にアクセスを行うアプリでは,どのようなサービス(機能)が使われるか。
署名付きURL。アプリケーションに対して署名を行うのであって,任意のユーザに対して署名付きURLを発行するわけではないため注意する。
AWSで署名付きリクエスト(Signature V4)を行う二つのステップを説明せよ。
- AuthorizationというHTTPヘッダに署名を格納する
- X-Amz-Signatureという名前のクエリパラメータに署名を追加する
特に,1.に関してはAuthenticationと間違えないように注意する。Authorizationは認可なので,署名本来の意味合い的にはAuthenticationの方が正しいように思えるが,HTTPの仕様と理解する。
保存前に暗号化を行う代表的なAPIを二つ答えよ。
- KMS Encrypt API:一つのKMSキーを使用して暗号化する
- KMS GenerateDataKey API:毎回データキーを取得し,そのキーで暗号化する
CMKとCDKを説明せよ。
- CMK(カスタマーマスターキー)はCDK(カスタマーデータキー)を暗号化する
- CDKはデータを暗号化する
CodeBuildではCMKを指定することで,(裏側でCDKが生成されて)データを暗号化できる。
CloudFrontでSTSを利用するためには,FunctionsとLambda@Edgeのどちらを利用するか。
Lambda@Edge。CloudFront Functionsは軽量な処理を行うワークロードに適している。
SSE-S3を利用する際にHTTPヘッダーで必要な設定を述べよ。
x-amz-server-side-encryption: AES256
を指定する。
KMSでCMKを適用するデータの最大サイズはいくつか。
4KB。CMKは,データではなく鍵自体を暗号化することが目的であるため。
SAMLフェデレーションではユーザ管理機能は提供されるか。
提供されない。
デプロイ
複数の環境にAPIをデプロイするための戦略を説明せよ。
API Gatewayでステージ変数ごとにAPIをデプロイし,各ステージ変数に対応するエイリアスをlambda関数で参照する。
lambdaのレイヤーとライブラリについて説明せよ。
ライブラリやその他の依存関係を含む.zipファイルアーカイブをレイヤーとよび,デプロイパッケージにライブラリを含めることなくlambdaでライブラリを使うことが可能になる。
SAM CLIを用いたアプリケーションのデプロイ方法を簡単にまとめよ。
そもそもSAMとはServerless Application Modelの頭文字をとった略称であり,サーバレスアプリケーションの構築を行うことができるオープンソースのフレームワークである。AWSでは,CloudFormationの拡張機能として提供される。基本的に,下記の流れでアプリケーションの構築を行う。
- sam init
- Node,Python,Javaなど,アプリケーションの種類を選択
- アプリケーションに応じたディレクトリ構成を自動構築
- アプリケーションに応じてデフォルトのツールをインストール
- sam build
- アプリケーションのビルド
- sam deploy
- CloudFormationを通じてAWS環境にサーバレスアプリケーションが構築
複数リージョンにデプロイを可能にするサービスは何か。
CloudFormationのStackSets。単純にCloudFormationのStackをdeployするだけである場合,複数リージョンにデプロイするためには手動操作が必要になることに注意する。
lambdaの非装飾ARNとエイリアスに関して説明せよ。
まず,lambdaには装飾ARNと非装飾ARNが存在する。
- 装飾ARN:バージョンを指定したARN
- 非装飾ARN:バージョンを指定しないARN
非装飾ARNではバージョンを指定しないため,自動で$LATESTを指す仕様になっている。また,バージョンの別名であるエイリアスも,装飾ARNに対しては指定できるが,非装飾ARNに対しては指定できない。
lambdaのエイリアス名とstagevariableの違いは何か
stagevariable(ステージ変数)はAPI gatewayの機能で,lambdaと統合することを目的として利用される。具体的には,lambdaのエイリアス名をdevやprodといった環境名に設定し,API gateway側のステージ変数で環境名を指定すると,API Gatewayとlambdaを連携することができる。
CloudFormationのエクスポート名のスコープは何か。
リージョン内で一意。
CodeDeployでIn-place deploymentの代表的なフックを順番に答えよ。
- ApplicationStop
- DownloadBundle
- BeforeInstall
- AfterInstall
- ApplicationStart
- ValidateService
特に,Applicationを停止させてからinstall関連のフックが発火することに注意する。ダウンタイムを最小化したければ,Applicationを停止させる前にInstallの準備をしておきたい印象があるが,BeforeInstallではバックアップを取得することを踏まえると,サービスが停止していなければ最新のバックアップが取得できないからと理解する。
sam packageとsam deployを説明せよ。
- sam package:zip化してS3にアップロードする
- sam deploy:configがある場合はzip化してS3にアップロードしてdeployする
SAMでドキュメントルートに含めなければならないセクションは何か。
Transform
Amplify HostingでE2Eテストを設定するファイルは何か。
amplify.yml
lambdaのデプロイパッケージでS3を使わなければならないケースは何か。
デプロイパッケージが50MB以上である場合。
API Gatewayを特定の顧客に提供する方法を説明せよ。
APIキーにもとづく使用量プランを利用する。
AWS CLIでecsのrunとcreate-serviceの違いを説明せよ。
- run:単発起動
- create-service:実行され続ける
lambdaでC言語を利用する方法を簡単に説明せよ。
C言語のカスタムランタイムを含む新しいlambdaレイヤーを作成して利用する。
BeanStalkとCodeDeployは連携できるか
連携できない。CodePipelineとCloudFormationを利用してCI/CDを構築する。
ECSのタスク配置戦略を簡単にまとめよ。
ECSのタスク配置戦略は,ECS on EC2を選択した際にECSをEC2上で起動させる方式のオプションである。
- binback:未使用のCPU/メモリを最小化。インスタンス数を最小限に抑えるコスト最適。
- random:ランダム。
- spread:インスタンスまたはAZ間で均等に配分。可用性最適。
トラブルシューティングと最適化
複雑に相互作用するサービスのパフォーマンス問題を特定するサービスを一つ挙げよ。
X-Ray。CloudWatchメトリクスは問題を特定する前に利用しようとすると,複雑に相互作用するサービスから問題を特定することが難しいため,X-Rayで問題を特定する。
DAXは何を高速化するサービスか。
DynamoDB。RDSではないため注意する。
X-Rayで利用する代表的な二つのAPIコールをそれぞれ簡単に説明せよ。
- xray:PutTraceSegments
- リクエストの経路や処理時間を送出
- xray:PutTelemetryRecords
- 追加のメトリクスやイベント情報を送出
少量のトラフィックを受け付けるアプリケーションの構築に適したサービスは何か。
AWS SAM(Serverless Application Model)で,API Gatewayとlambdaをデプロイできる。
DynamoDBにおけるエラーの再試行と指数バックオフについて説明せよ。
エラーの再試行間隔を指数関数的に伸ばすという一般的な方法。全く同じ指数関数を利用するとアクセスが集中してしまう可能性があるため,ジッタと呼ばれる時間的なノイズを差し込むことでランダム性を担保している。
X-RayのAPIを用いてデータを取得する流れを説明せよ。
- GetTraceSummaries でトレースIDのリストを取得する
- BatchGetTraces で1.で取得したトレースIDを指定することで,トレースデータを取得する
コメント