AWS認定ソリューションアーキテクト – プロフェッショナルに合格するまで【管理&ガバナンス篇】

AWS認定ソリューションアーキテクトプロフェッショナル試験合格に向けての資料集。以下の資料を何度も読み込んで、手を動かしながら実践を繰り返すことが合格の近道となる。管理ガバナンス に関するサービスはこちら。

カテゴリ サービス名
コンピューティング EC2, ECS, Lambda, Batch, Elastic Beanstalk
ストレージ S3, EFS, Storage Gateway
データベース RDS, DynamoDB, ElastiCache, Redshift
移行と転送 Database Migration Service, Application Discovery Service, Migration Hub, Server Migration Service, Snowball
ネットワーク VPC, CloudFront, Route53, API Gateway, Direct Connect
開発者用ツール CodeCommit, CodeBuild, CodeDeploy, CodePipeline
管理とガバナンス Organizations, Config, CloudWatch, Auto Scaling, CloudFormation, CloudTrail, Config, OpsWorks, Systems Manager
分析 Athena, EMR, CloudSearch, Elasticsearch, Kinesis, QuickSight
セキュリティとコンプライアンス IAM, RAM, Cognito, GuardDuty, Inspector, CloudHSM, AD&SSO, WAF&Shield
モバイル Amplify, Mobile Hub
アプリケーション統合 SNS, SQS

AWS SAM(1)Serverless Application Modelの概要

AWS SAMとは

AWS SAMは、サーバレスアプリケーションを構築するための オープンソース フレームワークであり、数行の設定のみで、必要なアプリケーションを定義できる。AWS SAMは、CloudFormation拡張テンプレート仕様 および AWS SAM CLI コンポーネントから構成される。

AWS SAMを使用することで、関連するコンポーネントとリソースの整理、操作が単一のスタックで管理できる。また、メモリやタイムアウト値などの設定値をリソース間で共有することも可能である。また、CloudFormationの拡張機能 であるため、 CloudFormationに対応するリソースと組み合わせてリソースを管理することができる。

AWS SAMには、ローカルの開発環境でLambda実行環境と同等の機能を提供する。これを用いることで、AWS上にデプロイする前に、ローカルの開発環境で動作や問題等を確認することができる。

また、Lambdaを安全にデプロイするために、 一定期間の間に段階的に新しいバージョンをデプロイすることも可能 である。

SAM の構造

SAMは、CloudFormationのテンプレートファイルの形式に厳格に従う。 Global セクション が追加されており、関数とAPIの共通のプロパティを定義することができる。セキュリティの問題が発生する恐れのあるプロパティ、およびテンプレートの理解を妨げる恐れのあるプロパティは、Globalセクションに対応しない。 Resources テーブルで定義したプロパティは、Globalで指定された値を上書きする

SAM リソース

SAMで定義されているリソースは以下の通り。

リソースタイプ 内容 備考
AWS :: Serverless :: Api APIGatewayリソースとメソッドを作成
AWS::Serverless::Application 外部のリソースをNested Stackとして作成 AWS Serverless Application Repository を利用可能
AWS::Serverless::Function Lambdaを作成 IAMロールやトリガを一括指定可能, 段階的な展開が可能
AWS::Serverless::HttpApi HTTP API を作成
AWS::Serverless::LayerVersion Lambda Layer Version を作成
AWS::Serverless::SimpleTable DynamoDB テーブルを作成
AWS::Serverless::StateMachine Step Functions を作成

なお、API Gateway extensions に SAM に対応していないExtensionがある旨の記述があるが、これは ローカルの実行に対応していないとの意味であり、実際にはSAMリソース内で定義することは可能 である。

SAM のビルドとデプロイ

SAM をビルドするためには、 sam build コマンドを使用する。このコマンドは、 requirements.txt などに記述された 依存関係のあるパッケージを収集し、適切な形式と場所に格納 する。

SAM は CloudFormation のメカニズムを使用してデプロイを行うことができる。 sam deploy コマンドを実行するとアーティファクトは圧縮され、S3にアップロードされる。これらの作業は、 CodeBuild , CodeDeploy , CodePipeline を用いることで自動化できる。

SAM のモニタリング

sam logs コマンドを用いることで、Lambda が生成したログをコマンドラインから確認することができる。 tail することや特定の時間帯のログの抽出、ログのフィルタリングを行うことも可能。

SAM の公開

作成した SAM は、 AWS Serverless Application Repository で公開することができる。

SAM CLI

sam init

プロジェクト名として指定したディレクトリの下に、sam-app ディレクトリと、SAMプロジェクトおよびサンプルテンプレートを作成する。

sam validate

SAMテンプレートが有効であるかどうか検証する。具体的には、 AM テンプレートから本来の CloudFormation テンプレートの文法に変換できるかを検証するコマンド である。AWS CLI Configureにてデフォルトリージョンを設定していない場合には、以下のように環境変数を与える必要がある。

似た機能である aws cloudformation validate-template コマンドは、CloudFormation テンプレートの構文を検証するコマンドであるため、 sam validate と挙動は異なる。

env AWS_DEFAULT_REGION=ap-northeast-1 sam validate

sam build

sam-app ディレクトリ直下に .aws-sam を作成し、この下に、指定した実行環境をターゲットとする デプロイメントアーティファクト を作成する。例えば、LambdaをPythonで記述した場合に、 requirements.txt にて依存関係のあるライブラリを指定することができるが、 sam build はこれらの依存関係を適切に処理する。

sam package

デプロイメントアーティファクト を圧縮してS3にアップロードする。また、パッケージ化されたSAMテンプレート(packaged.yaml)を作成する。パッケージ化されたSAMテンプレートには、S3にアップロードした デプロイメントアーティファクト へのリンク先が記述されている。sam deploy コマンドは、 sam package コマンドを暗黙的に実行するため、本来は sam deploy コマンドを実行するだけでよい。

sam deploy

アプリケーションのデプロイを行う。 --guided パラメータを付与することで、インタラクティブモードを起動することができる。

sam logs

Lambdaが生成するログを確認することができる。

SAMテンプレート

SAMテンプレートには、 Globals セクションが設けられており、ランタイムやメモリなどの共通設定をこれに格納することができる。なお、以下のプロパティはサポートされていない。

  Function:
    Role:
    Policies:
    FunctionName:
    Events:

  Api:
    StageName:
    DefinitionBody:

SAMテンプレートでは、以下のリソースタイプがサポートされている。AWS :: Serverless :: LayerVersion のみ DeletionPolicy をサポートしている。また、 AWS :: Serverless :: Api 内で記述するOpenAPIドキュメントは、 一部のAPI Gateway拡張(x-amazon-apigateway-) のみサポートしていることに注意が必要である。

タイプ 作成されるリソース 備考
AWS :: Serverless :: Api API Gateway OpenAPIを使用してAPIを定義する
AWS :: Serverless :: Application SAM Serverless Application Repositoryのリソースをデプロイ可能
AWS :: Serverless :: Function Lambda, IAM Role
AWS :: Serverless :: HttpApi API Gateway Http Api
AWS :: Serverless :: LayerVersion Lambda Layer Version
AWS :: Serverless :: SimpleTable DynamoDB プライマリキーのみのテーブルを作成

ポリシーテンプレート

SAMでは、Lambdaのアクセス許可をポリシーテンプレートという形で指定することができる。ポリシーテンプレートは、あらかじめAWSが用意したポリシーパターンである。

テスト

sam local コマンドを用いることでローカルで、API GatewayやLambdaを実行させることができ、開発環境でアプリケーションの動作を検証することができる。

AWS認定(2)デベロッパー(アソシエイト)に合格するまで

AWS認定デベロッパー試験合格に向けての資料集。以下の資料を何度も読み込んで、手を動かしながら実践を繰り返すことが合格の近道となる。

出題範囲と学習法

AWS認定デベロッパー試験の問題は、システムを構築する際に、可用性や拡張性コストなどを考慮した上で、実際どのような手法で実装するかについて問われることが多い。AWSが提供するサービスは100を超えるが、本試験を受講する上では、API Gateway, Cognito, DynamoDB, S3, SQS, IAM(STS), Elastic Beanstalk, Elastic Beanstalk, Lambdaなどのデプロイツールやサーバレスアーキテクチャの理解。また、CloudFormation, CodeBuild, CodeCommit, CodeDeploy, CodePipeline, CloudFront, CloudWatch, ElastiCache, Kinesis, RDS, X-Rayなども理解しておくことが必要である。

勉強法は、

  1. サンプル問題集に目を通してレベルを確認する
  2. 以下の資料を読みながら実際に各サービスに触れる
  3. 模擬試験を受講する

で十分合格ラインに行くかと。ちなみに学習時間は2週間ほど。なお、各サービスのドキュメントにベストプラクティスの項目が存在する場合は、該当部分を理解しておく

対策本

対策本はほとんど発売されていない。以下の本が唯一の試験対策本。この本には、各サービスの概要や特徴が簡潔に書かれており、AWSの各サービスの概要を学ぶためには非常に有効。一方で、章末問題と実際の試験問題は異なるので、実際の問題に慣れるためには、模擬試験の受講が必要である。

AWSの概要とセキュリティ

AWS(1)AWSの概要とメリット
AWS(4)Well-Architectedフレームワーク
AWS(5)セキュリティのベストプラクティス

AWS Identity and Access Management

AWS(2)セキュリティの概要
AWS Identity and Access Management(1)IAMの概要
AWS Identity and Access Management(4)STS

AWSの基本サービスの概要

Amazon S3

AWS S3(3)S3の概要
AWS S3(4)使用する上で注意すること

Amazon RDS

AWS RDS(1)Relational Database Serviceの概要

Amazon DynamoDB

AWS DynamoDB(1)DynamoDBの概要

Amazon ElastiCache

AWS ElastiCache(1)ElastiCacheの概要

AWS Lambda

AWS Lambda(1)Lambdaの概要
AWS Lambda(3)使用する上で注意すること

Amazon Kinesis Data Streams

AWS Kinesis(1)Kinesisの概要

Amazon SQS

AWS SQS(1)Amazon Simple Queue Serviceの概要

AWS Elastic Beanstalk

AWS Elastic Beanstalk(1)Elastic Beanstalkの概要

Amazon CloudWatch

AWS CloudWatch(1)CloudWatchの概要

Amazon SNS

AWS SNS(1)Simple Notification Serviceの概要
AWS SNS(2)モバイルプッシュ通知

Amazon Cognito

AWS Cognito(1)Cognitoの概要