長く使えるAWSの技術は何か？

本記事は、[Japan APN Ambassador Advent Calendar 2021](https://qiita.com/advent-calendar/2021/japan-apn-ambassador)の22日目の記事です。

いきなりですが、**「長く使えるAWSの技術」**ってなんですかね？

わたし、はじめて触ったAWSのサービスはEC2とS3でした。
当時はEBSボリュームなかったので、EC2のOSイメージを保存しておくには、
CLI実行してOS上で必要なファイル群を一式手でbundleして、
S3に手でアップロードして、手でAMI登録しないといけなかったんです。

ということは、長く使えるAWSの技術は、EC2とS3？

別の視点で、AWSサービスの中で一番最初にリリースされたサービスは、SQSですね。

では、長く使えるAWSの技術はSQS？

##長く使えるAWSの技術
今回の記事でお題にしたい「長く使えるAWSの技術」とは、
**これから先も、ITエンジニアとして長期間に渡って仕事に活用していけそうな技術は何か**、
ということが言いたかったです。

なんでこのお題にしようと思ったかというと、
最近エンジニアの育成についてディスカッションする機会があったんですよ。
で、その時に

「AWS認定試験に合格しました、はい、インフラの設計や構築できます、じゃないよね」

という話題になりました。

はい、そのとおりだと思います。

マネジメントコンソールでポチポチやって、VPCやEC2作れます。
わたしAWSﾁｮﾄﾃﾞｷﾙ、じゃないですよね。

これは、AWSを活用してお客様のシステムの設計・開発・運用をされたり、
AWSに関するコンサルティングのお仕事をされている方々であれば、
実感として同意いただけるのではないかと思います。

**(もちろん、AWS認定試験の受験は、AWSを勉強するための非常に良い機会です！
そこを否定する意図はないです)**

##仕事でAWSを使う場合に必要になる技術とは
実は、初期の[AWS認定ソリューションアーキテクト - アソシエイト試験](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf)の試験ガイドには、
AWSを使う上で、前提となる知識が明記されてました。

まだネットに残ってました。
[https://d1.awsstatic.com/training-and-certification/docs-sa-assoc/AWS%20Certified%20Solutions%20Architect-%20Associate_Exam%20Guide_FINALJA.pdf](https://d1.awsstatic.com/training-and-certification/docs-sa-assoc/AWS%20Certified%20Solutions%20Architect-%20Associate_Exam%20Guide_FINALJA.pdf)

これは、AWS認定試験に「SAA-C01」とかの試験番号が付与される前の話です。

以下、引用します。
>IT 全般の知識
• ウェブサーバー、キャッシュ、アプリケーションサーバー、ロードバランサー、ストレージなどの一般的な多層アーキテクチャに関する高度な理解
• リレーショナルデータベース管理システム (RDBMS) と NoSQL に関する理解
• メッセージキューおよびエンタープライズサービスバス (ESB) に関する知識
• 疎結合およびステートレスシステムの知識
• 分散システムにおける各種整合性モデルに関する理解
• コンテンツ配信ネットワーク (CDN) に関する知識
• LAN/WAN ネットワークテクノロジーに関する実践経験
• ルートテーブル、アクセスコントロールリスト、ファイアウォール、NAT、HTTP、DNS、IP、OSI ネットワークに関する経験
• RESTful ウェブサービス、XML、JSON に関する知識
• ソフトウェア開発のライフサイクルの理解
• 情報およびアプリケーションセキュリティの概念、メカニズム、ツールを使用した実務経験
• エンドユーザーコンピューティングとコラボレーションテクノロジーに関する理解
>

昔の試験ガイドには、ソリューションアーキテクトたるもの、
AWSの知識に加えて、
上記の**IT全般の知識が必要である**、と明記されていました。

いやもう、これほんとにそうだと思います。

現在のSAA-C02の試験ガイドでは、この「IT全般の知識」の記載はなくなっているのですが・・
個人的には改めて記載すべきじゃないか、と考えています。

深さはともかくとして、TCP/IPの基礎知識がないと、
VPCの設計できない(サブネット分割すらできない)ですね。

RDS利用すればDBのインスタンスは立てられますが、
クエリ実行するためにはSQLの知識が必要です。

Performance Insights使えば重いSQLは教えてくれますが、
そのパフォーマンスチューニングとなると、
データ構造であったり、
データベースエンジンがデータをどのようにストレージに保存しているか、
SQLの書き方でデータベースからのデータの取り出しがどう変わるのか、
効果的なインデックス設計、
DBエンジンに応じた各種パラメータの意味と、ワークロードに応じた値の設定、
などなど、知らないといけないことたくさんですね。

なので、AWSサービスに関する知識や使い方、
Well-Architected Frameworkなどのベストプラクティスを覚えることはもちろん大事なのですが、
あわせて上記の昔の試験ガイドに書かれていたような、
**AWSという「大規模分散システム」を理解し、使いこなすためのIT全般の知識**、
というものを意識してAWSを勉強すると、より効果的なのではないかと思います。

##おっさん、エンジニアとしてのキャリアを振り返る
少し話が変わるのですが、「[ふろむだ](https://twitter.com/fromdusktildawn)」さんという、ベストセラー作家さんがおられます。

ご本人と面識はないですし、そもそも本名も明かされてはいないのですが、
ふろむださんの「[分裂勘違い君劇場](https://www.furomuda.com/)」というブログが好きで、
Twitterのつぶやきもよく読ませていただいていました。

ふろむださんはどうやら、以前ITエンジニアとしてお仕事をされていたようなんですが、
以下のつぶやきを拝見して、「これだ！」と思わず膝を打ったことがありました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ITエンジニアのスキルはすぐに陳腐化するってウソだなーと思う。十数年も前に覚えたUNIX、正規表現、ネットワーク、サーバ管理、RDB、オブジェクト指向、スクリプト言語類などなどどれも未だに役立ってる。NoSQLなどもRDBをよく理解しているほどその仕様の意味がするする頭に入る。</p>&mdash; ふろむだ (@fromdusktildawn) <a href="https://twitter.com/fromdusktildawn/status/290624760398876673?ref_src=twsrc%5Etfw">January 14, 2013</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

いやほんとそうなんスよ！
これ2013年のつぶやきなんですけど、「UNIX」を「Linux」に置き換えると、
現在AWSを利用する場合も完全に役に立ちますよね。

このふろむださんが挙げられてるスキル、
わたしがIT業界に入った社会人一年目(20年前)から、少しずつ使い始めたものばかりですが、
今でも普通に役に立ってますね。

なので、「長く使えるAWSの技術は何か？」は、
人によって色々な意見はあるでしょうが、
「**AWSサービスを支えている、IT全般の知識**」になるのではないかと思います。

##ふーん、じゃあお前はその「IT全般の知識」を完全に理解してんの？
理解できておりません申し訳ございません。

AWSのサービスアップデートに個人で完全に追随するのはほんと無理ですし、
クラウドを支えている根っこの技術についても、

「自分はこんな基本的なことも知らないのか・・やっぱりこの業界向いてない」

と落ち込むことばかりです。

が、そこで落ち込んでばかりいるのではなく、
**好奇心を持って新しい知識を得る努力を続けられるかどうか**、
そこが結構大事なんじゃないかな感じる今日この頃です。

なので、「インターネット老人会」と揶揄されることもあるかもしれませんが・・
会社の若いみなさんにも(若くないみなさんにも)、AWSの技術や楽しさと同時に、
コンピュータやネットワーク、Web、プログラミング、情報セキュリティといった
ベーシックな内容の大切さも、Ambassadorとして伝えていきたいと思います！

現場からは以上です。