MY Scribbling...

AWS Community Hero Masanori YAMAGUCHI の 雑なメモ

JAWS-UG千葉・金沢・初心者支部合同ハンズオンを開催しました

JAWS-UG千葉支部、金沢支部、初心者支部の合同ハンズオンを開催しました。イベントオーガナイザーとして、イベントの企画、金沢支部・初心者支部との合同開催の調整、そしてハンズオンのチューターを行いました。 夏休み・夏祭りっぽく Summer of FIREWORKShop(FirewokrsとWorkshopを組み合わせた造語)というサブタイトルをつけ、オフライン・オンラインのハイブリッド開催を調整しました。 これまで、オンラインが主体だった千葉支部、金沢支部、初心者支部も徐々にオフラインへ活動の場を移行していくことへの第一歩としてのチャレンジです。

ハンズオンは、より多くの方に楽しんでいただけることと、夏休みを使った自由研究(?)に活かしてもらえるようなラインナップとしています。 具体的には、AWS入門者向けのVPC作成〜マネージドサービスによるオートスケーリングハンズオン、夏休みの宿題にIoT Coreハンズオン、デジタルツインを感じるIoT Twinmakerと3本のハンズオンで構成しています。

タイムテーブルはこんな感じ。

オフライン・オンラインを全体で128名の方が参加いただき、たくさんQAも貰いながら、熱くAWSを感じ学べる一日でした。ご参加いただきました皆さん、ありがとうございました。

参加いただいた方からのアンケートも満足度の高い回答が多く、今回のハンズオンイベントを企画し、実施して本当に良かったと感じています。

アンケート回答者のうち3支部の参加割合

関東が多いが全国から参加いただけたのはハイブリッド開催のメリット

さまざまな職種の方に参加いただき、幅広いラインナップを構成してよかった

大満足という回答も多くもらえて実施して本当によかった!

温かいコメントもとてもありがたいです。

  • 非常に分かりやすかったです
  • 順を追って拡張性や冗長性を上げていくので、どのサービスがなんの役に立つとか、通信の方向について理解しやすかった。 *手順書が綺麗ですばらしい。
  • 初心者には中々ハードな内容でしたが、完走できてよかったです。
  • 詰まることなく最後までついていけたので難易度的にもとてもやりやすかったです。
  • 短い時間でとても分かりやすく網羅的で勉強になりました。
  • 最近全く触れてなかったのですが、IoTの進化に驚きました。
  • IoTCoreは試してみたいけど、独学では試しずらいところだったので、ハンズオンができてよかった。
  • なんというかIoT系のサービスは特殊なワードが多いというか、理解しづらい印象なので、おそらく解説なしでハンズオンの資料だけを見ながらやった場合、全然理解できなかったと思います。。。なので、今回ハンズオンという形で実際の画面を見ながら、操作ができて本当に良かったです!!
  • 作ってみるとすごいな、こんなものがぽちぽちでできるんだという感想

セッション登壇、ハンズオン準備&開催、ブログ公開などアウトプットにはさまざまな形がありますが、ハンズオンはQAから自分の理解が深まることや、手順を作って説明することで曖昧な知識を整理できるなど、企画開催側にも多くのメリットがあります。今後は、自分が少し苦手な分野のハンズオンにもチャレンジし企画して行こうと思います。

フォージビジョンに(再)入社しました

2月末にKDDI株式会社を退職し、フォージビジョン株式会社へ入社しました。

退職の理由ですが、KDDIに不満があって退職するわけではありません。暖かく迎えてもらい、大橋さんをはじめ多くの優秀なエンジニアに囲まれ、その中で社内コミュニティを新しく立ち上げたり、これまでのAWSを活用したシステム設計や運用の知見を活かしソリューションアーキテクトとして複数システムのアーキテクチャ設計を支援してきました。リモートワークが中心でしたが同僚や上司とのコミュニケーションが活発で働きやすい組織であると感じていました。

なぜ出戻りという形でフォージビジョンに入社したかというと、いくつかの理由があります。

1つは退職後もフォージビジョンの代表取締役から直接、会社の事業、未来を描くためにと私が必要であるとお話しを頂いていたことです。退職前からもお話しは頂いていましたが、新しい世界にチャレンジしたいという私の希望を受け入れてくれました。ただ、退職後もその考えは変わらないことを継続的にお話し頂いており、その中でフォージビジョンの新しいチャレンジを任せたいと改めてお話しを頂いたことです。(AWS Heroの認定を受けた時のメッセージも心に残っています)

もう1つの理由は私がフォージビジョンを退職した後、フォージビジョン在職中にとてもお世話になった方が人生において大きな苦難に遭い、それを乗り越えられたことです。このエントリでは詳細に触れませんがFacebookで繋がっている方はご存知かと思います。転職という道を選択していた自分の責任ではあること、また自分を買い被り過ぎているかも知れませんが、この時に同じ会社で支えられなかったことはもちろん、大変なときに声をかけることも出来なかったことを情けなく感じていました。

家族とも相談し、20年、30年後に自分の後悔しない道は何か考えた結果、KDDIを退職し、フォージビジョンに戻るということを選択しました。

この選択を受け入れ送り出してくれたKDDIの上司、同僚の方々、そして大橋さんには感謝しかありません。また、KDDIに入社した際、応援のメッセージを頂きました皆様には、その期待を裏切ることとなり大変申し訳ありません。

今後、フォージビジョンの執行役員として、代表取締役の喜多、そしてAWSチームの仲間とともに新しいチャレンジとお客様のクラウド活用をご支援し、お客様とともに成長してゆけるよう努めて参ります。

JAWS-UGやTech-onなどのコミュニティ活動も継続していきたいと思いますので、今後とも宜しくお願い致します。

M1 Mac でビルドした コンテナイメージをArm64なAWS Fargateで起動する

この記事は AWS Advent Calendar 2021 22日目の記事です。

re:Invent 2021 直前の11月25日 に AWS Fargate の AWS Graviton2 のサポートが発表されました。

aws.amazon.com

今までAWS Fargateで起動するDockerイメージはx86_64(64ビット x86ベースシステム)用のコンテナイメージとしてビルドする必要がありましたが、Gravition2に対応したことにより、ARM64(64ビット ARMベースシステム)用にビルドしたコンテナイメージを起動することができるようになりました。

マルチアーキテクチャイメージやAmazon ECRでイメージマニフェストにARM64を含むイメージを利用し、AWS Fargateのアーキテクチャによって起動するイメージを切り替えることも可能となります。

今までテスト用途などでAWS Fargate用のコンテナイメージをローカルでビルドする場合は、Cloud9上でdocker buildしECRのプッシュするなどひと手間必要だったのですが、AWS FargeteがGravition2に対応したことにより、同じARM64アーキテクチャなM1 MacでビルドしたコンテナイメージをAWS Fargate上で動作させることできるようになったことが個人的にとても嬉しかったので記事にしてみました。

今回は Toriさんの everlasting-hey-yo を使ってM1 MacでビルドしたコンテナイメージをAWS Fargate上で動作させることができるか試してみます。

まず、Githubのeverlasting-hey-yoリポジトリから、Dockerfileとhey-yo.shを作業ディスプレイにPullしてきます。Dockerfile、hey-yo.shは何も編集せずにそのまま利用します。

Dockerfile

FROM busybox

COPY . .
RUN chmod +x ./hey-yo.sh

ENTRYPOINT [ "./hey-yo.sh" ]

hey-yo.sh

$ cat hey-yo.sh
#!/bin/sh

DEFAULT_MSG="Hey, Yo!"
ANOTHER_MSG="Check It Out! Yo!"

trap IWillNeverDie 15

Output () {
  MSG="$1"
  if [ "x${TIMESTAMP}" != "x" ]; then
    TS=$(date -Iseconds)
    MSG="${TS} ${MSG}"
  fi
  echo "${MSG}"
}

IWillNeverDie () {
  if [ "x${LET_ME_DIE}" != "x" ]; then
    Output "Hey, he..."
    sleep 3
    exit 0
  else
    Output "Hey, Hey, ${DEFAULT_MSG}!!"
  fi
}

while true
do
  MSG="${DEFAULT_MSG}"
  # GIVE_ME_PATTERNS
  if [ "x${GIVE_ME_PATTERN}" != "x" ]; then
    if [ $((${RANDOM} % 2)) = 1 ]; then
      MSG="${ANOTHER_MSG}"
    fi
  fi
  Output "$MSG"
  sleep 1
done

コンテナイメージをビルドします。

$ docker build .
[+] Building 4.5s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                          0.0s
 => => transferring dockerfile: 36B                                                           0.0s
 => [internal] load .dockerignore                                                             0.0s
 => => transferring context: 2B                                                               0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                             3.4s
 => [internal] load build context                                                             0.0s
 => => transferring context: 60B                                                              0.0s
 => [1/3] FROM docker.io/library/busybox@sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd03  0.8s
 => => resolve docker.io/library/busybox@sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd03  0.0s
 => => sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd0397f25fae164abe1e8a 2.29kB / 2.29kB  0.0s
 => => sha256:db67d231d7de3d552b371543cf04d8f702482bc04d841997fcee2b1400d2cb83 527B / 527B    0.0s
 => => sha256:b34806a1af7a987f39848926ad7e4f8f191468473b1a97a6155ec855545bab 1.47kB / 1.47kB  0.0s
 => => sha256:092c822dea67ab2d03cf39c60d0f28925815e05899e5e780fd16b09c8d 828.49kB / 828.49kB  0.3s
 => => extracting sha256:092c822dea67ab2d03cf39c60d0f28925815e05899e5e780fd16b09c8da2756d     0.4s
 => [2/3] COPY . .                                                                            0.0s
 => [3/3] RUN chmod +x ./hey-yo.sh                                                            0.2s
 => exporting to image                                                                        0.0s
 => => exporting layers                                                                       0.0s
 => => writing image sha256:62e66d37c42a889b37137ee096e8b5969aeeaee6781a7b6f8c77ce02fa720bc5  0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

続いてビルドしたイメージをECRにプッシュします。(事前にECR上のリポジトリは作成しておく必要があります)

$ docker tag 62e66d37c42a 12345678912.dkr.ecr.ap-northeast-1.amazonaws.com/everlasting-hey-yo:20a133e
$ aws ecr get-login-password --region ap-northeast-1 --profile ecr-push | docker login --username AWS --password-stdin 12345678912.dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded
$ docker push 12345678912.dkr.ecr.ap-northeast-1.amazonaws.com/everlasting-hey-yo:20a133e
The push refers to repository [12345678912.dkr.ecr.ap-northeast-1.amazonaws.com/everlasting-hey-yo]
90ee5dfb3b89: Pushed
2da41e23cf2a: Pushed
48160e1f49aa: Pushed
20a133e: digest: sha256:5efe060bd6e2b0b82c8acdaf41df7d7bb8ce6cf8f6f066e9e67a1d6d86ebd200 size: 9

ECRのリポジトリにコンテナイメージがPushされました。

f:id:kinunori:20211222191302p:plain

つづいてタスク定義を作成していきます。マネージメントコンソールの場合、新しいECSコンソールでなければ、アーキテクチャの選択(Graviton2なタスク定義を作成)できないので注意です。

f:id:kinunori:20211222191322p:plain f:id:kinunori:20211222191338p:plain

タスク定義作成後は、これまでFargateでタスクを起動する時と同じように、サービスを登録していきます。

f:id:kinunori:20211222191356p:plain

タスクが実行中になりましたので、実際に動作をみてみましょう。うまく動作しているのであればログに Hey, Yo! が1秒間隔で出力されているはずです。

f:id:kinunori:20211222191426p:plain

無事動作していることが確認できました。

f:id:kinunori:20211222191456p:plain

M1 MacでビルドしたコンテナイメージをARM64なFargate上で動作させることができました。
実際にはマルチアーキテクチャーイメージを用いるケースが多いと思いますが、テスト用にM1 MacでビルドしたコンテナイメージをAWS Fargateでサクッと動かせるのは個人的に嬉しいアップデートでした。