AWS Summit「Developer Zone杯争奪デベロッパークイズ王決定戦!」予選振返り
5月25日(水)~26日(木)に開催される今年度AWS Summit JAPANに「Developer Zone杯争奪デベロッパークイズ王決定戦!」があります。この予選会が昨夜あったので、気軽に参加してきました。幅広いトピックが取り上げられていて勉強になったので、問題、解説等をメモしておきたいと思います。
開催形態
予選はGoTo Webinarを使ったAWSのいつものウェブセミナーの形式で開催され、4択問題に参加者全員がアンケート機能で回答という方式でした。出題数は20問で、うち5問は高難度問題で配点5点、残り15問は配点1点で、計20問、40点満点。制限時間は1問60秒。進め方は5問出題ごとに、そこまでの回答と解説という形でした。
司会はAWS DevAxチームの金森さん。解答・解説におなじみ福井さんと、SAの落水さん(以下敬称略)。
問題1~5
金森「お、意外と割れた?」
福井「意外と割れてますね」
金森「問題作るときにS3と悩んだんですよね」
福井「それも考えられますね」
落水「たしかに、どちらも正式名称って普段あまり触れないですよね」
Simple Storage Serviceでしたっけ…?
a = 100;
result = 0;
for(i = 0; i < a; i++) {
if (i % 2 == 0) { result + i }
}
print(result)
金森「回答の時はコード見えなくなっちゃうのはご容赦いただいて」
福井「ああ、それは難しいね。覚えておかないといけないものね」
落水「割れましたね。皆さん、かなり悩まれてますね」
落水「どの選択肢もありそうなものなので、悩まれるかもしれないですね」
金森「ぜひ、この後でAppSyncを触っていただければ」
福井「Developerでも最近はオブジェクト指向とは限らないですよね。ひょっとしたら、年配者の方がよく知ってるかもしれない」
金森「オブジェクト指向も学ぶのかなと思ってるんですけど、関数型から入ったりするんですかね」
福井「可能性はありますね」
問題1~5の回答と解説
問題1は「1. Clousuer」が正解。配点は1点。
金森「Java、C#、Pythonみたいな人気の言語はサポートしてますね」
福井「問題文にも付されてる通りコンテナとか使えば使えますが、AWSが提供するランタイムとしてはClousuerは現状ないですね」
金森「Clousuerが使いたいよという方は、ぜひお近くのAWSメンバーまでフィードバックを」
問題2は「2. Amazon Elastic Compute Cloud」が正解。配点は1点。
金森「これ4番と間違えた人も結構おいでじゃないでしょうか」
福井「えーって言ってる人もいそうですね」
問題3は「d. 0」が正解。配点は1点。
金森「1~100まで偶数を足してるように見せかけて、代入してないんですね」
落水「かなり意地悪な問題ですね」
問題4は「1. GraphQL」が正解。配点は1点。
金森「最近使われるお客様も増えてきてるんじゃないですかね」
福井「そうですね。ただときどきGraphDBと混同しがちではありますね」
問題5は「1. 同じ関数やメソッドの呼び出しに対してオブジェクト毎に異なる実装を利用できる性質」が正解。配点は1点。
福井「これは1番。多態性ですね」
問題6~10
金森「正規表現って考えれば考えるほど混乱してきません?」
落水「普段頭の中でイメージすることとかないですからね」
福井「特徴的な『+』とか『?』とかを考えてもらうとわかるかな?」
金森「これは皆様、普段見慣れているものもあるかな。さすがに404とかはいれませんでした」
福井「割れてますね。結構難しいのかもしれないですね。400番台や500番台はわりと見ているかもしれませんが」
金森「私この機能結構好きなんですけどね」
福井「デフォルトモードがあって、それなりによろしくやってくれますからね」
Dockerfile
FROM amazonlinux:2
CMD ["hello"]
ENRYPOINT ["/bin/echo"]
Docker CLI
docker container run --entrypoint uname aws-summit-2022
福井「普段Docker触られてる人には難しくないかもしれないですが」
金森「どうかな。触っている人ほど…」
福井「これはいい問題ですね。性格が出て…」
金森「落水さんが考えてくれました。これは学びがあっていいもんだだと思いますが」
金森「samは小さい関数とかサーバレスのアプリケーションとか書くときにはすごく楽ですよね。いまは他にもCDKとかいろんな選択肢がありますが。OSSのServerless Frameworkとかも」
福井「そうですね、人気ありますね」
問題6~10の回答と解説
問題6は「A. arn:aws(-cs|-us-gov)?:([[:alnum:]]+:([[alnum:]]|\)*:([0-9])({0,12}:.*$ b)」が正解。配点は1点。実際に検証するデモが行われました。検証用スクリプトがこうだったかな。写経(目で見て手入力で写してる)ので間違ってたらごめんなさい。
TEST_CASE_FILE="q6-test-cases.txt"
TEST_CASE_COUNT=$(wc -k < "$TEST_CASE_FILE")
REGEX_SAMPLES=(
"arn:aws(-cs|-us-gov)?:([[:alnum:]]+:([[alnum:]]|\)*:([0-9])({0,12}:.*$ b)"
"arn:aws:iam:ap-northeast-1:([0-9]){0,12}:.*$"
"aws:arn:([[:alnum:]]|-)+:([[:alnum:]]|-)*:([0-9]){0,12}:.*$"
"arn:aws(-cs|-us-gov)?:([0-9]){0,12}:.*$"
)
for i in {0..3}; do
echo "${REGEX_SAMPLES[$i]}"
echo Result: $(grep -E -c "${REGEX_SAMPLES[$i]}" "$TEST_CASE_FILE")/"$TEST_CASE_COUNT"
echo "====="
done
テストケースファイル(q6-test-cases.txt)が多分こんな感じ。
arn:aws:iam::123456789012:user/evelopment/product_1234
arn:aws:s3:::examplebucket/developers/design_info.doc
arn:aws-cn:ecs:us-east-1:123456789012:cluster/my-cluster-1
arn:aws:workspaces-web:ap-northeast-1:1223456789012:aaa
福井「中国リージョンの記述をご存じかどうかはちょっとポイントですね」
金森「1番目は全部当たりますが他は0ですね。4番目が当たらないのは?」
落水「3つ目の『:』に囲まれたところはサービスの名前空間なのですが、そこを12桁の数字で、つまりアカウントIDをパースしようとしてるんですね。現状、サービス名が数字だけというものはないので、マッチしません」
金森「ちなみに正答率は50%くらいでした」
問題7は「a. 401: Unauthorized」が正解。配点は1点。
金森「201はCreated、dがつくんですよね」
福井「これ意地悪だなあ。引っかかった人いると思うな」
問題8は「3. cross-region」が正解。配点は1点。
金森「Javaのアプリって色々なところで動くんですよね。単一のリージョンだったり、複数のリージョンだったり、モバイルだったり」
福井「そこでリトライの条件とかを適切に設定してくれるんですよね」
金森「で、autoを選ぶと実行環境を推定して勝手に選んでくれるというところまで提供している機能になっています」
問題9は「3. Linux」が正解。配点は1点。
落水「docker CLIでentrypointを上書きするとDockerfileのCMDインストラクションは無視されるんですよ。なので、なにも指定しないとechoに対してhelloが渡るんですけど、unameで上書きしているのでunameの実行結果がそのまま出ると」
金森「皆さんももしよければこのCMDとENTRYPOINTの動きはいろいろと試していただくと」
問題10は「2. sam init --tracing」が正解。配点は1点。
福井「これは比較的新しい機能なので、ご存じない方もいらっしゃったかなと」
金森「他は全部エラーになりますね」
問題11~15
金森「そもそもOpenID Connectに複数のフローがあること自体あまり知らないかもですが、よく見ていただくと想像つくかも」
福井「そうですね。よく見ていただくと、ああ、と思われるかなと」
金森「OpenIDはRFCを読む練習にもいいんですよね。最初に読んだRFCがこれです」
福井「私はSMTPだったかな。時代がずいぶん違うなあ」
落水「時間計算量のオーダーの意識って、設計でもまあやるんですが、コードをバリバリ書く人に有利かもしれませんね。メソッドとか呼ぶときに、リファレンス見てこれはオーダーいくらだなとか意識すると思うので」
福井「たしかに。競技プログラミングとかしてる方はすごく意識しますよね」
金森「これSAとして参加したのはいつからですかね、福井さんが一番先?」
福井「僕はそんなに古くないんですよ。2015年かな?」
金森「福井さん、それ、ネタバレ」
福井「もうダメだってTweetしてる人がいますね」
落水「Twelve-Factor Appを読んでる人もBeyond Twelve-Factor Appは読んでないかもですね」
金森「Twitterがみなさん、分からないという嘆きであふれてますね」
福井「『もうダメだ』って多いな」
問題11~15の回答と解説
問題11は「3. Authorization Code Flow」が正解。
金森「OpenID Connectには1、3、4があって、2番はOAuthのものですね。このうち3と4で悩みそうですが、違いはIdP(IDプロバイダ)からAuthorization Codeを返しているところですね。Hybridの場合はモバイルクライアント等を意識しているので、この段階でID TokenとかAccess Token返しちゃうんですよね。Authorization Code Flowの場合RP(リソースプロバイダ)がID TokenとかAccess Tokenを受取るのでクライアント側にトークンが渡らないのがポイントです。この辺りクライアントに応じてフローを使い分けます」
福井「うーん、勉強になりますね」
問題12は「3. 1からnまでの自然数の和の計算」が正解。
落水「3番は公式があるので、nによらず固定の計算量で答えが出せるんですね」
金森「これもなかなかぱっと浮かばないので、いい問題ですね」
問題13は「c. 2012年」が正解。
金森「2016年はLambdaの発表年のつもりで問題に組み込んだのですが、それは2014年だったという」
問題14は「3. アプリケーションをデプロイすると自動的にCDNが設定される」が正解。
福井「VPCにアクセスできるようになったアップデートが最近の目玉ですね」
落水「いろんなユースケースに対応できるようになりましたね」
問題15は「4. Config」が正解。
福井「これもマニアック問題ですね」
金森「LogsとDisposabilityは重要だと思ってるので、入れさせていただきました」
問題16~20
福井「DynamoDB使ってる方はご存じではないかと」
金森「昔から使ってる人で容量読めてる人は、使ったことないかもですね」
福井「すごいヒント出しましたね」
金森「これが出てきたことで利用量の見積もりがしやすくなって、実際の動き見ながら変えていけるようになったのいいですよね」
福井「そうですね。…いやほぼ言ってるような感じが」
福井「これは結構難しい…昔から使ってる人ほど難しいかも」
金森「でも普段使ってないものを選ぶのも手じゃないですか?」
福井「ああ、なるほど…スーパーヒントをありがとうございます」
落水「普段GUIで使ってる方はなじみがないかもしれませんね」
金森「VScodeのGitプラグインがほんとよくできてまして。Gitのオプションを全部覚えた自信が常にないです」
金森「去年のre:Inventで結構注目されてた機能なので」
福井「デモもやってましたしね」
金森「あ、ヒント多すぎですと言われてしまった」
金森「トークにヒントありすぎなのでぎりぎりまで答えない…とか言ってる人いますけど、そのうち回答し損ねて時間切れとかしちゃいますよ?」
金森「レベル高すぎの予選会とも言っていただいてて、ちょっと安心しました。簡単すぎるよりはそっちの方が楽しいと思って頑張って考えました。
落水「カバー範囲広かったですね」
福井「RFCとかオブジェクト指向とかまでありましたからね」
問題16~20の回答と解説
問題16は「4. On-demand Capacity mode」が正解。
金森「見積りがしにくい時は使ってみてください」
問題17は「4. git switch」が正解。
金森「git checkoutをいろんな目的で使っちゃうのをやめて、ちゃんとコマンド分けようぜという取り組みですね。すみません、checkout使ってます」
福井「私も使ってます」
金森「せっかくなので皆様、gitのバージョン上げてgit switch使うようにしましょう」
問題18は「2. Figma」が正解。
福井「UIデザイナー とコードが連携できるのはとても素晴らしい機能なので、ぜひお使いいただければと思います」
金森「下のURLのブログを見ていただくと簡単に試せます」
問題19は「4. 1~3に正しい記述はない」が正解。
福井「これもひっかけですねえ」
問題20は「3. 指定したCognitoUserpool、IDPoolのデータをAmplify管理下にできる」が正解。
金森「IDPoolまで行けますよというのがポイントですね」
福井「まずCognitoにUserPoolとIDPoolがあるというのを知っていると、すこし回答しやすかったかもしれないですね」
AWS Summitのご紹介
予選が一通り済んだ後は、本戦も行われるAWS Summit JAPANの紹介でした。
Developer Zoneのセッションから以下が紹介されていました。内容は、セッションページでご確認ください。
最小限のコーディングでフルスタックアプリ開発を!Amplify Studioを活用したアプリ開発Live(DEV-06)
Game Server RTA in Summit Tokyo 〜多分これ(GameLift)が一番早いと思います〜(DEV-08)
終わりに
回答にも参加しましたが、難しかったな、開発やらないとなというのが感想でした。自己採点では20点、ちょうど半分ですね。個人感想戦もやりたかったのだけど、トーク部分がずいぶん勉強になったなと思ってメモを整理していったらそれだけでずいぶん長くなってしまったので、割愛。
AWS Summit JAPANはいよいよ今週の水曜日、木曜日。デベロッパークイズ王決勝戦観戦も含めて、楽しみですね。
(2022.05.24 更新)問題9のDockerfile内、 "CMD" の部分が "CMF" となっていたため、修正しました。ご指摘ありがとうございました。