AWS Skill Builderでサーバーレスを学習した

こんにちは、Continue86です。

AWSの知識を広げるために、AWSが公式で提供しているオンラインの学習コンテンツ「AWS Skill Builder」を受講しました。

 

AWS Skill Builderとは

AWSが提供しているオンラインの学習コンテンツです。

無料/有料で多くの学習コンテンツがコース別に用意されています。内容は学習テーマに関する説明動画を見て問題に解答する、画面内のAWSコンソール上での操作による学習、3Dロールプレイングゲームでの学習、AWS認定に向けての問題回答など、多くの形式で効果的に学べます。

学習コンテンツの内容や料金体系など、詳細は公式サイトで確認できます。

 

受講したコースの一覧と概要

・Introduction to Serverless Development 日本語実写版

 サーバーレスアプリケーションを作成する時の開発者の役割について、コードの記述、コードの管理の2つの観点から説明する。サーバーレスアプリケーションでのテストとデバックについても説明あり。

・Getting into the Serverless Mindset 日本語実写版

 サーバーベースのアーキテクチャとサーバーレスアーキテクチャの主な違いについて説明し、ワークロードにサーバーレス設計を適用する際の推奨事項をいくつか紹介する。

 

学習した感想

AWS Skill Builderを初めて利用しましたが、今回選択したコースの場合には説明動画の閲覧と問題回答を通して、学びたい分野の概要を過不足なく学習できました。選択したコースがいずれも入門的な内容だったため、より実践的な内容やAWSコンソール上での操作を伴うコースの学習に進みたいと思いました。

以下、コースごとの感想および学習内容の整理となります。

Introduction to Serverless Development 日本語実写版

サーバーレスの利点、コンピューティングサービスであるLambdaについて、サーバーレスアプリケーションの構成・管理・テスト・デバッグ、Lambda関数のコード記述といった項目から構成されます。

サーバーレスの利点

大別すると「ITインフラのコスト削減」「使用量に応じたコストの発生」「スケーラビリティと可用性の提供」「イノベーションの速度向上」が利点として紹介されています。インフラのコスト削減に関して、EC2やAuto Scalling等を使って開発した同要件のサーバーアプリケーションと比較してどれくらいコスト削減されるのか気になりました。

サーバーレスアプリケーションの構成

主な構成例として、「トリガーとなるイベントソース→Lambda→DynamoDBなど」が挙げられ、処理のトリガーとなるイベントソースとLambdaの間にIAMリソースポリシー、LambdaとDynamoDBなどの間にIAM実行ロールが関連します。

上記の構成については、以前にAWSのハンズオン学習にてAPI GatewayとLambdaとDynamoDBの組み合わせでのサーバーレスアプリケーション開発を体験していたのですぐに理解できました。

Lambda関数のコード記述について

簡単な関数はLambdaマネジメントコンソールに記述して実行します。本番アプリケーションでのコード実行ではコードのGit管理や自動デプロイなどの工夫が必要とのことです。

サーバーレスアプリケーションの管理

サーバーベースのアプリケーション開発と同じく、既存のIDEやGitを使用することは変わりません。その上で、AWS SAM(CloudFormationの構文を簡単に記述できるよう拡張したフレームワーク)を使用してサーバーレスアプリケーションの開発、デバッグ、デプロイ、コード定義と管理を合理化・簡略化できるとのことです。AWS SAMについても実際に触って理解してみたいと思いました。

サーバーレスアプリケーションのテスト

ローカルテストをする際には、DynamoDBなどローカルに存在しないサービスを含む場合があります。その場合はDynamoDB LocalとLocalStack、カスタムモックといったモックを使用してテストすることもできるとのことです。

モック(モックアップ)…Webサイトやソフトウェアを実装する前に一部または全体を試作したもの

 

Getting into the Serverless Mindset 日本語実写版

以下の項目から構成されます。

・サーバーレスによるコスト削減

モノリスからマネージドサービスを活用した構成に

・Lambdaによる作業時間の短縮

・作業環境を増やして多くのイノベーションを実現する

「サーバーレスによるコスト削減」については上述の「Introduction to Serverless Development 日本語実写版」といくらか重複する内容だったため割愛します。

モノリスからマネージドサービスを活用した構成に

モノリス(=一枚岩)とは、複数の機能を一枚岩のように捉えてアプリケーションの構成と考えます。対して、サーバーレスアプリケーションの開発においてはAWS Lambda以外にもAPI Gateway、S3、Amazon AlexaAmazon SQSなど多くのサービスをLambdaイベントソースとして使用でき、アプリケーションを構成する要素間の依存性を低めて、用途に応じてサービスを組み合わせることができます。

また、サーバーレスアーキテクチャを設計する際には「保存する必要があるデータと、そのデータに対してどのような操作を実行するべきか」とは考えずに
 「システムにおいてアクションをトリガーする必要があるイベントは何か」と考えることが重要だとの説明があり、考え方の転換が必要とのことでした。

Lambdaによる作業時間の短縮

動画のトランスコーディング処理に対して、S3および複数のlambdaを並列使用することで処理時間を短縮できる事例が紹介されていました。

作業環境を増やして多くのイノベーションを実現する

サンドボックスアカウントを用意した上での本番同様の環境でのテスト実施や、本番テスト、バグ修正など用途によって複数の環境を作ることでの多くのサービス開発が促進されるとのこと。またそのためには構築・デプロイの自動化(CI/CD)が別途必要になるとの説明がありました。

サンドボックス…直訳すると「砂場」。ユーザーが通常利用する領域から隔離され、保護された領域に構築された環境のこと。

 

終わりに

サーバーレスアプリケーションについての導入レベルのコースを2つ学習してみましたが、サーバーレスの利点やアーキテクチャ、関連サービスについての概要を理解するには良い内容でした。ここから更にサーバーレスのハンズオン学習やサーバーレスアプリケーション開発に進むのも良いですし、他の関心があるサービスを対象とするコースを学習してAWSの幅広いサービスについて理解を広げていくのも良いと思いました。

AWSのVPCハンズオンをやってみた

AWS公式が用意しているAWS初心者向けハンズオン学習メニューがあります。その中にAWSのネットワークサービスであるVPCを構築するハンズオンがあり、AWSでのネットワークに関する基礎と構築方法を学ぶためにやってみました。

pages.awscloud.com

 

AWSにおけるネットワーク関連用語、サービスについて

VPCAWSの任意のリージョンに構築できる仮想ネットワーク空間

サブネットVPC内にIPアドレスの範囲を設定できる機能。1つのVPC内に複数のサブネットを設定できる。インターネットに接続できるパブリックサブネット、インターネットからサブネットへのアウトバウンドをさせないプライベートサブネットを他のサービスを設定して構築し、使用する

ルートテーブル:ネットワークトラフィックの経路を判断する際に使われる一連のルール。VPC内部にルートテーブルを用意し、サブネットごとに使うルートテーブルを指定する

インターネットゲートウェイ:サブネット内にある仮想サーバなどのリソースをインターネットと通信できるようにする機能

NATゲートウェイ:インターネットと接続しないサブネットであるプライベートサブネット内のリソースを、プライベートサブネット内からインターネットへの送信のみ可能とするサービス

VPCエンドポイントVPCと他のサービス間の通信を可能にするVPCコンポーネントVPCエンドポイントを作成することでVPC内のインスタンスVPC外のサービスをプライベート接続で通信できるようになる。接続するサービスの違いによりインターフェイス型とゲートウェイ型に分かれている。

 

どんなことをやったか

AWS上でセキュアなネットワーク空間を構築し、その中に仮想サーバーを作成します。

その上で更に必要なサービスの構築を行い、インターネットから仮想サーバーへのアクセス、仮想サーバーからAWSのマネージドサービスへのアクセスを行いました。

 

使用したサービスの概要

AWS System ManagerAWS 上のリソースを表示したり、インスタンスを制御するために使用する AWS のマネージドサービス。「インスタンスのパッチ管理」「アンチウィルス定義の更新」「ソフトウェアのインストール状況確認」「運用タスクの自動化」等の機能がある。

今回のハンズオンでは、プライベートサブネット内に構築したインスタンスからVPC外サービスへの接続を行うために、接続先として使用した。

S3:オンラインのストレージサービス。世界に一つだけの名称をつけたバケット(データを格納するためのコンテナ)を作成して使用する。

 

大枠の流れ

1 VPCの作成とインターネット接続環境の構築-VPC構築

2 VPCの作成とインターネット接続環境の構築-パブリックサブネットとプライベートサブネット

3 ルートテーブルによる経路設定を理解する 

4 プライベートサブネットからインターネットへのアクセスを行う

5 VPC外サービスへの接続方法-VPCエンドポイント(インターフェイス型)のハンズオン

6 VPC外サービスへの接続方法-VPCエンドポイント(ゲートウェイ型)のハンズオン

 

重要箇所・ハマったポイントなど

・サブネットの分類でパブリックサブネットプライベートサブネットと分けているが、所定のサービスや機能としてそれらが用意されている訳ではない。パブリックサブネットについては、インターネットゲートウェイの作成と、VPC内にサブネットを作成した上で、サブネットに関連づけているルートテーブルにインターネットゲートウェイ向けのルーティング設定を追加することでパブリックなインターネット通信ができるサブネットを構築できる。これをもって「パブリックサブネット」と呼ぶ。

また、プライベートサブネットについては、パブリックサブネットにNATゲートウェイを設置し、プライベート通信向けのルートテーブルにNATゲートウェイのエントリを追加することで、プライベート通信ができるサブネットが完成する。

・EC2インスタンスは起動時間(最低60秒間、秒単位)に応じて料金が請求されるので、動作確認する時以外はインスタンスを停止させておくこと。

 

『この一冊で全部わかるセキュリティの基本』を読んでみた

こんにちは、Continue86です。システムのセキュリティ基礎について、網羅的に知識を得ておきたいと日頃から考えていました。今回『この一冊で全部わかるセキュリティの基本』を読みましたので、学んだことを整理したいと思います。

 

本の概要と私の学び

全体の流れですが、以下の目次になっています。

第1章 セキュリティの基本

第2章 セキュリティの確保に必要な基礎知識

第3章 攻撃を検知・解析するための仕組み

第4章 セキュリティを脅かす存在と攻撃の手口

第5章 セキュリティを確保する技術

第6章 ネットワークセキュリティ

第7章 セキュリティ関連の法律・規約・取り組み

 

本の構成ですが、上記の各章に関連する1項目につき見開き2ページから成るため、興味がある項目のみ選んで読むことが可能です。その上で、第1章ではそもそもセキュリティとは何か、どの様に捉えるものかを理解するための項目・用語の解説がされています。また、第3章から6章ではセキュリティに関する技術の仕組みや対応方法について解説されていまして、この辺りがセキュリティと言われたときにイメージするものに該当する内容です。

2017年9月に発行された本なので、現在における最新のセキュリティ技術や攻撃・防御手法については無論書かれていませんが、第1章から7章まで通読することで基本・技術・関連する法律といった各事項の知識を満遍なく学び直すことができました。

 

まとめなど

1項目につき2ページで読めてしまいますが、約80項目に及ぶ内容が解説されているので全体のボリュームは多く感じました。ここから更にシステム構築・ソフトウェア開発・普段のIT機器利用におけるセキュリティ対策の実践に進むとすると、より技術を深堀りした書籍などを使った学習が必要と思いました。

現時点ではそれらの実践まで進まないにせよ、普段のPCやWeb利用時であったり業務時のセキュリティに関する感度が上がり、個人情報や業務情報を狙った攻撃に対して何を気をつける必要があるか、攻撃される穴はどこに生じるかを明確に知ることが出来たと思います。取り合えずすぐ出来ることとしては、長らく更新していなかったスマホのOSアップデートを急いで実施しました。

 

 

AWSのサーバーレスハンズオンをやってみた

AWS公式が用意しているAWS初心者向けハンズオン学習メニューである"AWS Hands-on for Beginners"。その中のサーバーレスアーキテクチャで翻訳Web APIを構築するハンズオンをやってみました。

pages.awscloud.com

 

サーバーレスアーキテクチャとは

インフラストラクチャを管理する必要がなく、アプリケーションとサービスを構築するためのシステムの設計方法を指します。

サーバー等のインフラを管理の労力を省くことで、サービスの開発や改善に注力することが可能になります。

 

どんなことをやったか

AWS上で翻訳Web APIの構築を行うことで、サーバーレスアーキテクチャの基本を学習しました。サービスの構築のために利用したAWSサービスは、 AWS Lambda、Amazon API GatewayAmazon DynamoDBAWS Translateの4つです。

各サービスの概要

AWS Lambdaサーバーのプロビジョニング/管理なしでプログラムを実行できるサービス。実行回数と実行時間に基づいて料金が生じる。Lambda関数に割り当てるメモリ量は128MB~10,240MB。CPU能力は確保するメモリ量に比例する。関数の実行時間は最大15分。

 

Amazon API Gateway:サーバーをプロビジョニング/管理することなく、APIを作成・管理できるマネージドサービス。可用性の担保、スケーリング、APIキー管理といったAPI開発で必要なことをAPI Gatewayに任せることで、開発者はビジネスの差別化につながる作業に集中できる。REST APIとWebSocketに対応。リクエストベースの料金体系(REST APIの場合)

 

Amazon DynamoDB:フルマネージド型のNoSQLデータベースサービス。3つのAZにデータが保存されるので信頼性が高い。性能要件に応じて、テーブルごとにスループットキャパシティを定義。キャパシティのAutoScaling、オンデマンドキャパシティといった設定も可能。ストレージの要領制限は無し。

 

AWS Translate高速で高品質かつカスタマイズ可能な言語翻訳を手ごろな料金で提供するニューラル機械翻訳サービス。無料の利用枠があり、1か月200万文字の翻訳処理を無料で利用できる。

 

大枠の流れ

1 AWS Lambda ハンズオン① Lambdaを単体で使ってみる

2 AWS Lambda ハンズオン② 他のサービスを呼び出してみる

3 API Gateway ハンズオン① API Gatewayを単体で使ってみる

4 API Gateway ハンズオン② API GatewayとLambdaを組み合わせる

5 DynamoDB ハンズオン① テーブルを作ってみる

6 DynamoDB ハンズオン② API GatewayとLambdaとDynamoDBを組み合わせる

 

各ハンズオンの流れ

AWS Lambda ハンズオン① Lambdaを単体で使ってみる

○簡単なLambda Functionを作成し、基本的な使い方を理解する

 ・Lambda Functionを1から作成する

 ・確保するメモリの量、タイムアウトの値を変更する

 ・自動的に作成されるIAMロールについて確認する

 ・Lambda関数をテスト実行する

 ・ログを出すようにプログラムを修正して保存する

 ・再度、テストを実行する

 ・ログを確認する

 

AWS Lambda ハンズオン② 他のサービスを呼び出してみる

○Lambda 関数から他のAWSサービスを呼び出す

 ・Python SDKのドキュメントを参照し、AWS Translateの呼び出しを実装

 ・IAMロールを修正

 ・レスポンスとして、JSON形式で英語訳を返すようにする

 ・Lambda 関数をテスト実行する

 

API Gateway ハンズオン① API Gatewayを単体で使ってみる

○Mockデータを返すAPIを作成する

 ・APIを新規に作成

 ・sampleリソースを作成し、GETメソッドを作成

 ・統合タイプとしてMockを選択

 (この時点ではLambda 関数との連携は行わず、固定のJSONを返す)

 ・devステージにデプロイ

 ・APIを実行

 

API Gateway ハンズオン② API GatewayとLambdaを組み合わせる

○入力した日本語を英語に翻訳するAPIを作成する

 ・/translateリソースを作成し、GETメソッドを作成

 ・統合タイプとして、Lambda関数を選択する

 ・プロキシ統合を設定し、Input/Outputをパススルーする

 ・メソッドリクエストでクエリパラメータの設定

 ・Lambda関数を修正する

 ・Lambda関数をテスト実行する

 ・APIをデプロイする

 ・APIを叩いてみる

  ・結果は返ってくるか

 

DynamoDB ハンズオン① テーブルを作ってみる

○DynamoDBのテーブルを作る

 ・パーティションキーとしてtimestampを指定する

 ・テーブル設定ではRead CU:1 Write CU:1 の設定を行う

 ・データを手動入力する

 

DynamoDB ハンズオン② API GatewayとLambdaとDynamoDBを組み合わせる

○翻訳履歴をDynamoDBにストアするように修正する

 ・Python SDKのドキュメントを参照し、DynamoDBにストアするようにLambda 関数を修正する

 ・IAMロールの設定を修正

 ・APIを叩く

  ・結果は返ってくるか

  ・DynamoDBにデータがストアされるか

 

重要箇所・ハマったポイントなど

AWSサービスおよびリソースにアクセスする許可を関数に付与するために、IAMロールに必要なアクセス許可のみを持つポリシーをアタッチする

・ハンズオン終了後に作成したリソースを削除すること

・サーバーレスアプリケーション開発について更に理解を深めるには、アプリケーションを作成して継続して運用するといい

 

AWSのアカウント作成&IAMハンズオンをやってみた

AWS公式サイトにて “AWS Hands-on for Beginners"というAWS初心者向けハンズオン学習メニューがあります。その中のAWSアカウント作成&IAM基礎についてのハンズオンをやってみました。

pages.awscloud.com

どんなことをやったか

以下の画像に記載されているように、AWSアカウントの作成、IAM(ポリシー、ユーザー、グループ、ロール)等について動画上で行われる解説と操作を踏まえて、自身でもAWSコンソール上での操作を行いました。

大枠の流れ

学習・実施した内容における大枠の流れは以下です。

1.ハンズオンの説明 + アカウント作成に必要なもの + 作成の流れ(解説)

2.アカウントを作成

3.ルートユーザーと IAM ユーザーについて学ぶ(解説)

4.IAM ユーザーを作成する

5.IAM (ポリシー、ユーザー、グループ、ロール)について学ぶ

6.IAM ポリシーと IAM グループを作ってみる

7.IAM ロールを試してみる

 

重要ポイント・ハマリがちな箇所

ルートユーザーとIAMユーザーの違い、使い分け方

以下画像で確認できます。

初めにAWSアカウント登録を行うと同時にルートユーザーが作成されます。以降の開発・運用においてはIAMユーザーを作成し、必要最小限の権限を付与した上で使用します。

 

IAMポリシーとIAMロールの違い、各用途について

IAMポリシーとは、「AWSのどのリソースでどのような操作を許可するか?」を定めたもの。JSON形式で定義され、AWSで予め用意されているものに加え、ユーザーが独自に定義できる。IAMユーザー、IAMグループ、IAMロールに紐づけて使用する。

AWSのリソース(EC2やS3等)に直接アタッチすることは出来ない。

IAMロールは、あるAWSリソースに対して、他のAWSリソースを操作する権限を与える仕組み。IAMロールに対して必要な操作権限を定義したIAMポリシー(複数可)をアタッチし、そのIAMロールを対象のAWSリソースにアタッチする形で使用する。

例:EC2からS3にアクセスして操作したい場合、そのためのIAMロールを作成した上でS3の操作権限を定義したIAMポリシーをそのIAMロールにアタッチする。続いて、そのIAMロールを対象のEC2にアタッチすれば、対象のEC2からS3にアクセスすることが可能になる。

 

AWS Certified Developer - Associate 認定後の学習について

AWS認定後に学習する意義

資格認定のための学習で得た知識を定着させるためです。

9月にAWS Certified Developer - Associate(DVA)を認定したことで、SAA、SOAと合わせてアソシエイトレベルの3冠を認定できました。

ただ、認定で得た知識を業務でそのまま活かすことが出来る環境に無い場合は、学習で得た知識を維持・更新させるために上記の様な追加学習が必要だと考えるようになりました。

具体的な方法としては、ハンズオン学習を通してより実践に即した形で習得した知識を定着させたいと考えています。

認定に向けての対策学習ではWeb問題集の回答と解説確認を中心に行ってきたため、不足していたAWSコンソール上でサービスを使用しての学習を行っていきます。

 

学習メニュー

AWS Hands-on for Beginnersの以下3つを実施します。

AWSのコンソールを操作する上での初歩から、DVAで得たアプリケーション開発用サービスに関する知識を定着させるためのハンズオン学習までを含んでいます。

pages.awscloud.com

pages.awscloud.com

pages.awscloud.com

 

学習の進捗

9月23日時点で「ハンズオンはじめの一歩」、「アカウント作成後すぐやるセキュリティ対策」まで実施しました。

学習内容のまとめとポイント、気づきなどを追って記事に整理していく予定です。

ハンズオンはじめの一

歩:

AWS アカウントの作り方 & IAM 基本のキ

AWS Certified Developer - Associate 受験準備の記録

AWS 認定 デベロッパー - アソシエイト(DVA)を受験して合格しました。

2023-09-15:DVA-C02 合格

 

AWS 認定 デベロッパー - アソシエイト(DVA)について

AWS認定資格は、3段階の難易度別の枠と専門技術の枠で計12の試験が存在しており、DVAは下から2段階目の中級レベルに該当する資格です。

クラウドベースのアプリケーションで書き込みおよびデプロイを行う能力を認定する資格です。

 

事前知識と受験動機

これまでにアソシエイトレベルのソリューションアーキテクト(SAA)、SysOpsアドミニストレーター(SOA)を取得済みです。そのため、AWSのサービスを使用したシステムの設計・構築・運用に関する基本的な知識を持っていると言えます。

今回、AWS 認定 デベロッパー - アソシエイト(DVA)を受験しようと考えた動機は、アソシエイトレベルの3資格を制覇したかったことと、これまでの業務でアプリ開発の経験が乏しいことから知識面だけでも強化したいと考えたためです。

 

学習期間と使用教材

Cloud License

 上記のWeb問題集を40日程かけて1周+正答率の低い問題セットを復習

AWSサービスについて書かれた技術ブログ

 DVAの問題に頻出するAWSサービスについて、都度検索してヒットした技術ブログを読み込みました。

 

試験準備から受験完了までの感想

上記の試験向け学習を行うことで、AWSのアプリケーション開発に使用される各種サービスの概要、サービスを使用したユースケースについて知識を得ることができました。

ただ、試験準備だけではアプリ開発の一連の工程と、各種AWSサービスの使われ所についてイメージが持ちにくかった。その点はAWSの開発系サービスを使用するハンズオン学習を行っておくべきでした。

本番の試験に出題内容は、試験準備で取り組んだWeb問題集と同等の難易度の問題が多かった印象です。Web問題を解いて解説を読むだけでなく、アプリ開発で使用される用語や開発の工程についてイメージを持つ学習を行えているかどうかにより、初見の問題でも対応することが可能になる様に感じました。

私はその点の学習が足りていなかったため、今後はハンズオン学習などで理解を深めていこうと考えています。

出題される範囲について、自分の知識がどれくらい不足しているか、どの点をこれから補っていけば良いかが分かる受験体験でした。