" />
本ページはプロモーションが含まれています。

スポンサーリンク

AWS

【AWS認定】デベロッパーアソシエイト(DVA)用語集

開発者としてのキャリアが長い人にとっては、アーキテクト系よりもこちらのデベロッパー系資格の方がワクワクするのではないだろうか。

AWS認定デベロッパーアソシエイト(DVA-C01) 公式サイトはこちら

AWS認定デベロッパーアソシエイト合格への道(まだ受けてません)

この試験で評価する能力

  • 主要な AWS サービス、AWS の用途、および AWS アーキテクチャに関するベストプラクティスについての知識。
  • AWS を使用してクラウドアプリケーションを開発、展開、およびデバッグするスキル。

試験分野

分野タイトル比重
分野1展開(デプロイ)22%
分野2セキュリティ26%
分野3AWSサービスを使用した開発30%
分野4リファクタリング10%
分野5モニタリングとトラブルシューティング12%
AWS認定デベロッパーアソシエイトの試験分野

AWS認定デベロッパーアソシエイト 展開

デプロイパターン(リリース時)

デプロイパターン説明
In-Place稼働中の環境に新しいアプリをリリースする。
いわゆる、通常のリリース。
Liner(線形)一定時間間隔ごとに一定の割合で新アプリを置き換えながらリリースする。
Canary最初は10%のみで、数分後にすべてなど、割合によって段階的にリリースする。
Canaryは密告者の意。
Blue/Green現行とは別環境に新バージョンをリリースし、リクエスト送信先を切り替える。
Rollingサーバーをいくつかのグループに分けて、グループごとにIn-Placeでリリースしていく。
Immutable現行サーバーとは違う新サーバーを構築し、新サーバーにリリースする。
All at onceすべてのサーバーを同時にIn-Place更新する。

AWS CLIのインストールと設定

インストール

DAVのためのハンズオンを進めるには、AWS CLIをインストールする必要がある。

特に、intelliJからCodeCommitをGitリポジトリとして使用するためにも必要。通常のHTTPSだと「invalid Request」と表示され、使用できなかった。

AWS CLIにはversion1 と version2 がある。現在はversion2がメジャーバージョンとなっている。

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

--以下、確認コマンド
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.2.7 Python/3.8.8 Darwin/20.3.0 exe/x86_64 prompt/off

使用のための設定

$ aws configure
AWS Access Key ID [None]: xxx
AWS Secret Access Key [None]: xxx
Default region name [None]: Tokyo
Default output format [None]: json

IAMユーザー>認証情報タブでアクセスキーIDとシークレットアクセスキーを参照できる。

AWS CodePiplineの設定手順

Code Pipelineは、次の3つを選択することでコミット〜ビルド〜デプロイを自動化できる。

  • ソースステージを追加する(元ソースコード群の置き場所を選択する)
  • ビルドステージを追加する(誰がビルドするかを選択する)
  • デプロイステージを追加する(誰がデプロイするかを選択する)

1.CodePipelineのソースプロバイダーを選択

ソースプロバイダーはパイプラインの入力元となるソースコードの置き場所のこと。
Code Commit、ECR、S3、Github、Bitbucketから選択することができる。

2.Buildプロバイダーを選択

入力されたソースコードを誰がビルドするか選択する。

新規にJenkinsインスタンスを設定するか、CodeBuildを設定していればそれを選択できる。

3.デプロイプロバイダーを選択

ビルドされた成果物のデプロイ先を選択する。

Code Deploy、Elastic Beanstalk、ECS、S3などいろんなところにデプロイできる。

Amazon Kinesis Data Stream

Kinesisの概念は開発者ガイドの説明が最もわかりやすい。

Kinesisでできること

プロデューサー(データの送信元)が送信したデータを、Kinesisはストリーム化し、コンシューマー(データを受け取り処理するプログラム)に送信する。

利用シーン

  • Webアプリが継続的にデータを送信する
    • Webアプリのログ

Kinesisの専門用語

  • プロデューサーは、Kinesisに対してレコード(扱いたいデータ)をプッシュする。
    • レコードは下記3つから構成される。
      • シーケンス番号
      • パーティションキー…割り当てるシャードを指定するもの。
      • データBlob…扱いたいデータ本体(最大1MB)
  • レコードはKinesisに設定されたいづれかのシャードに割り当てられる。

用語集

AWS Code CommitAWSが管理するGitサービス。Gitリポジトリを作成できる。
AWS Code Build
AWS Code Deploy
AWS Code PipelineAWS Code Commit、Code Build、Code Deployを束ねてビルド〜デプロイを自動化できる。
Code Commitや Code Build以外にも、GithubやJenkinsなどのソース置き場やビルドプロバイダーを選択できる。
AWS Elastic Beanstalk
AWS CodeStar作成したいプロジェクトの形式を、Spring/HTML/Express.js などから選択することで、AWSサービスへの展開とCD/CIパイプラインを簡単に作成できる。
AWS Code Artifactmaven/gradle/npm のようなパッケージマネージャに対して、自作のソフトウェアを配信できる。
AWS Code Guru・アプリケーションのパフォーマンスを可視化できる。
・CodeCommit/Githubなどと連携し、自動でコードレビューを行ってくれる。
API GatewayRest API を構築するサービス。
LambdaやEC2,DynamoDBのフロントドア(窓口)として機能する。
Amaozn ECRAmazon Elastic Container Registryの略。
コンテナイメージをセキュアに管理(登録・更新)できる。
AWS ChatbotAmazon ChimeまたはSlackとAWSの諸サービスを繋ぐために、AWS ChatbotにAmazon ChimeまたはSlackのアカウントを登録する必要がある。
AWS OpsWorksChef や Puppet を使って運用を自動化する。
サーバーの構成管理ツールである。
レシピにサーバー構成を記述し、レシピに基づき自動で構築される。
CloudFormationはAWSリソース全体を管理対象とするが、OpsWorksはサーバー内の構成管理に留まる。
AWS SAMサーバーレスアプリケーション構築用のオープンソースフレームワーク。

サーバーレスアプリケーションモデル(AWS SAM)

AWS SAMとは、Cloud Formationの拡張機能。Lambda、API Gateway、DynamoDB、S3などを組み合わせたサーバーレスアプリの構築を自動化できる。

アプリのタイプごとのデプロイパターン

これらのパターンをCodePipeline化できれば、DAVの展開分野はOK。

静的プロジェクト

HTML/CSS/JPGのみの静的Webサイトのホスティングパターン。

S3でホスティング(推奨)

  1. GitHubに静的WebサイトのコンテンツをPUSH。
  2. S3にバケットを作っておく。
  3. CodePipline
    1. ソースプロバイダーに1のリポジトリを指定。
    2. ビルド設定はスキップ。
    3. デプロイ先にS3を設定。
  4. ここまでやると、S3にGithubのファイルがコピーされる。
  5. S3の操作
    1. 2で作った静的ウェブサイトのホスティングをするよう設定する。
    2. ファイルがアップロードされたら、自動で公開するようバケットポリシーを設定する。
  6. 見れるようになっている。
  7. 本番ではさらに、Route53を利用して独自ドメインで運用する。

世界を対象とした静的Webサイトであれば、さらにCloud Frontで世界中のエッジロケーションに配信するべきである。

EC2でホスティング

動的プロジェクト

Java -SpringでThymeleafを使うようなプロジェクト。

動的プロジェクト(サーバーレス型)

フロントにVue.js、バックエンドAPIはJava-SpringまたはJava Script(Express.js)を使用するようなプロジェクト。

AWS認定デベロッパーアソシエイト セキュリティ

ネットワークのセキュリティ

認証と認可

暗号化

用語説明
Amazon Cognitoシンプルでセキュアなユーザーのサインアップ、サインイン、およびアクセスコントロール。
簡単にアプリにログイン機能を付与できる。
AWS Systems ManagerAWS の運用上のハブとなり、アプリとリソース全体の運用上の問題を一元的に追跡および解決できる。
AWS Secrets Managerデータベース認証情報、API キー、その他のシークレットを簡単にローテーション、管理、取得する。
シークレットとはkey-value形式の値である。
AWS SDKを通じてシークレットを取得する。
AWS KMS(Key Management Service)データの暗号化やデジタル署名に使用するキーを簡単に作成して管理する。
AWS Certificate ManagerSSL/TLS 証明書を簡単にプロビジョニング、管理、デプロイできる。

AWS KMSとSecrets Managerの違い

KMSは暗号化キーを管理するシステムである。
つまり、Secrets Managerで管理しているID/PWを、KMSで管理している暗号化キーを使用して暗号化/復号化する。

KMSで管理している暗号化キーは、様々なAWSサービスと統合して利用する。
例えば、AWS Systems Manager パラメータストアで管理している環境変数を暗号化するために利用することができる。

AWS認定デベロッパーアソシエイト AWSサービスを使用した開発

ECSとFarateの違い

Fargate の Amazon ECS にコンテナをデプロイする。

Lambda

Lambdaは関数自身に加えて、
・トリガー
・送信先
を設定できる。

Lambdaのトリガー

API Gatewayをはじめ、様々なAWSサービスを契機にLambda関数を実行できる。

API Gatewayをトリガーに指定すると、HTTPアクセスを契機に実行する一般的なAPIを構築できる。

Lambdaの送信先

Lambdaの呼び出し結果を別のサービスに送信できる。

非同期呼び出し

Lambda関数の処理失敗時 or 成功時を選択する。
そのときにSNSやSQS、または別のLambda関数に結果を送信できる。

ストリーム呼び出し

DynamoDBまたはKinesisを指定できる。

API Gateway

API Gatewayで作成できるAPIタイプ

APIタイプ説明
HTTP APIAPI Gatewayへのリクエストを他のHTTPに転送するようなAPIである。
Websocket APIチャットアプリのように、永続的な接続を提供するWebsocketを使用するAPIである。
Rest APIリクエストとコントロールを完全に制御できるRest APIである。
Rest API(プライベート)特定VPC内からアクセス可能なRest APIである。

API Gateway と転送先を紐づけることを統合と言う。

Lambdaの一時ファイルはLambda関数デプロイ先の/tmpに格納される。

カスタムドメイン名

API Gateway では、カスタムドメイン名を設定できる。

カスタムドメイン名を使用しない場合、下記のようなURLが割り当てられる。
https://fydpfjv54f.execute-api.ap-northeast-1.amazonaws.com/

その際、TLS(Transport Layer Security SSLの次期バージョン)の設定が必要となる。TLSにはサーバ証明書が必要となるが、AWS Certificate Managerで作成できる。

AWS Certificate Manager は SSL/TLS証明書を管理するサービスである。
Certificate Manager で管理している証明書はAWSのELB/CloudFront/API Gateway/Beans talk等で使用できる。

API Gatewayのステージ

API Gatewayでは同一APIに対して複数のステージ(環境)を設定できる。
例えば、同一APIを開発環境用、本番環境用など複数ステージに分けることができる。

ステージ名URL
$default(本番)https://jp9xf1nhc.execute-api.ap-northeast-1.amazonaws.com/
develop1https://jp9xf1nhc.execute-api.ap-northeast-1.amazonaws.com/develop1
develop2https://jp9xf1nhc.execute-api.ap-northeast-1.amazonaws.com/develop2
API Gateway ステージの設定例

各ステージには、ステージ変数を設定できる。

API Gateway の統合

API Gatewayに作成したAPIがリクエストを受け取り、その転送先(処理する実態)を設定することを統合と言う。

統合先は次のようなものが選べる。

  • Lambda関数
    • AWS Lambdaに作成したLambda関数を呼び出す。
    • Lambdaプロキシ統合を有効化することで、Lambda関数のイベントでリクエストの詳細を利用できるようになる。
      Lambda側の実行メソッドのシグネチャやレスポンス形式が固定される。
  • HTTP
    • 別のURLへリクエストを転送できる。
    • HTTPプロキシ統合を有効化することで、
  • AWSサービス
  • VPCリンク

API Gatewayのタイムアウト

デフォルトのタイムアウト時間は29000ミリ秒(29秒)である。

DynamoDB

RDBDynamoDB
テーブルテーブル
行(レコード)Item
Attribute
RDBとDynamoDBの基本用語の言い換え

DynamoDBのキーの指定パターン

・Partition Keyのみ
Partition KeyがRDBの主キーに当たるが、Dynamo DBはKey-Value型であり、特にItemのKeyに値する部分となる。
ただし、Partition Keyはアイテム間で重複でき、ユニークである必要はない。重複のある場合に、次のSort Keyを使用して一意制を確保できる。

・Partition Key + Sort Key
Partition Keyに加えて任意のAttributeにSort Keyを指定できる。
この項目はソートや絞り込み(== <> between etc...)に利用できる。

・注意点
Parition Key、Sort Keyに設定できるのはString、Number、バイナリ型のAttributeのみである。

DynamoDBでは主キーは最大2つ(Partition KeyとSort Key)である。
Partition KeyまたはSort Key を複数指定することはできない。

DynamoDBの性能はキャパシティユニットで決める

DynamoDBへのRead/Writeそれぞれに対して、秒あたりの読み書きできる容量のことをキャパシティユニットと言う。

RCUWCU
単位ごとの回数2回/秒(結果整合性)
1回/秒(強い整合性)
1回/秒
1回の上限サイズ4KB1KB
デフォルト値5RCU
=毎秒10回の読み込み
5WCU
=毎秒5回の書き込み
例)毎秒100回のR/Wに
要するサイズ
50RCU100RCU
キャパシティユニットの概要

RCU…Read Capacity Unit = 読み込みキャパシティユニット。
1RCU=2回/秒の読み込みができる。(結果整合性の場合)
1回の読み込みサイズの上限は4KBである。
つまり、1RCUで4KBまでの項目なら2回読み込むことができる。
4KBまでの項目を毎秒100回読み込むためには、50RCUが必要となる。
ただし、強い整合性の場合は、1RCU=1回/秒となる。

WCU…Write Capacity Unit = 書き込みキャパシティユニット。
1WCU=1回/秒の書き込みができる。
1回の書き込みサイズの上限は1KBである。
つまり、1WCUで1KBまでの項目を1回書き込むことができる。
1.3KBの項目を書き込むには2WCUを消費する。

キャパシティモード説明
プロビジョンキャパシティユニットを数値で指定する
オンデマンド実際に利用した回数となる
キャパシティモード

DynamoDBのAutoScalingではRCU/WCUがスケールアウトする。

Dynamo DBのTTL

TTLとはTime To Liveの略。
テーブル内のアイテムを自動削除してくれる機能。
アイテムの任意のAttribute(数値列である必要がある)を基準に、削除期間を設定することができる。

DynamoDBとElastiCacheの使い分け

永続化したいデータはDynamoDB。揮発性データを扱う場合はElastiCache。

揮発性データを扱うだけなら、ElastiCacheの方が高速で安価になる。

AWS Elastic Beanstalk

Beanstalkのプラットフォーム(動作環境)

Beanstalkのアプリ実行環境をプラットフォームと言う。
Docker/Java/Tomcat/Node.js/Python/Ruby/.NET などが用意されている。
プラットフォームはJavaの場合、Correto11などが用意されており、アプリ作成時に選択する。

また、1つのBeanstalkアプリは下図のように複数の環境を作成することができる。
SampleApp
 ├ develop1> http://Smapleapp-develop1.eba-6cxakvqz.ap-northeast-1.elasticbeanstalk.com/
 └ develop2 > http://Smapleapp-develop2.eba-6cxakvqz.ap-northeast-1.elasticbeanstalk.com/

Beanstalkへのデプロイ

Beanstalkアプリを各環境にデプロイする方法は2つある。

方法説明
コンソールからアップロードソースコード群をコンソールからアップロードする。
パブリックS3から取得Beanstalk側でS3から取得してくれる。
Beanstalkアプリのデプロイ方法

AWS SQS

キューを使用するメリット

システムから高負荷プロセスを分離できる。プロセスをバッファリング(蓄積)して、バッチ処理を行うことができる。

SQS キューの種類

  • 標準のキュー
    • 少なくとも1回はメッセージを配信する。
    • メッセージの順序は保持・保証されない。
    • メッセージが重複して配信されることもある。
  • FIFOキュー
    • 順序が厳密に保持される。(先入先出配信)
    • メッセージは1回のみ配信される。

FIFO(First In First Out 先入先出)の構造をキューという。
LIFO(Last In First Out 後入先出)の構造をスタックという。

SQSのセキュリティ

メッセージの送信者・受信者それぞれについて、
・キュー所有者のみ
・指定されたAWSアカウント、IAMユーザー、IAMロールのみ
を選択・設定することができる。

デッドレターキュー(DLQ)

キューの消費に失敗した場合、別のキューに失敗したキューを移動できる機能をDLQという。

キューに対してDQLを有効にすることで、キュー消費失敗時の原因切り分けに利用できる。

AWS認定デベロッパーアソシエイト リファクタリング

DAVで問われるリファクタリングとは、ソースコードのリファクタリングではない。AWSの各リソースやサービスの選択を最適化することである。

AWS認定デベロッパーアソシエイト モニタリングとトラブルシューティング

Amazon CloudWatchログ、メトリクス、およびイベントという形式でモニタリングデータと運用データを収集する。
VPC フローログVPC のネットワークインターフェイスとの間で行き来する IP トラフィックの送信元、送信先、拒否or許可等の情報をS3やCloudWatchLogsに出力できる。
VPC画面から設定する。VPCの設定が適切かテストするときにも使用される。
AWS CloudTrailマネコン、CLI、SDKからの操作を全て記録し、S3バケットに保存する。
AWS X-Ray本番環境や分散アプリケーション(マイクロサービス群)の分析とデバッグができる。

AWS認定デベロッパーアソシエイトで重点的に理解すべきサービス

Amazon EC2

Amazon S3

Amazon Cognito

AWS Lambda

AWSで開発するには

MacでAWS Codecommitを利用する

Macは初期状態では、SourceTreeやIntellijからCodeCommitに接続できません。
Cloneしようとしても、invalid Requestになってしまいます。

intelliJ-Java-Spring

intelliJ>plugins>AWS Toolkitをインストールする。

intelliJでCodecommitリポジトリをクローンしようとするとエラーが発生

Authentication failed for 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/xxx/'

AWSの各種サービス

コンテナ系サービス

Amazon ECRElastic Container Registoryの略。
コンテナのレジストリ、つまりコンテナイメージの管理サービス。
Amazon ECS Elastic Container Serviceの略。
コンテナの実行環境を構築できる。つまり、コンテナを動かせる。
Amazon EKSElastic Kubernates Serviceの略。
AWS上でKubernatesを利用できる。

Amazon Lightsail

用意されているアプリを選択すると、アプリをセットアップしてくれるサービス。

  • WordPress
  • Drupal
  • Redmine
  • Gitlab

などを簡単に使い始めることができる。

インスタンスタイプとして、EC2同様にCPUやメモリ、ストレージ容量も選択できる。SaaSのようなもの。

スポンサーリンク

-AWS