Lambda のイベントフィルタリング を試してみた
参考URL
Lambda のイベントフィルタリング - AWS Lambda
【アップデート】Lambdaのイベントソースマッピングでイベントのフィルタが可能になりました | DevelopersIO
やったこと
DynamoDB作成
適当な名前でDynamoDBを作成。
DynamoDB ストリーム の設定はONにする。
※色々試した後なので、既にレコードが入っている状態
Lambdaの作成
適当な名前でLambdaを作成。
元々のソースコードを修正。
とりあえずなんかしら console.log を出力するようにする。
修正したら「Deploy」を押下してデプロイする。
Lambdaに設定されているロールの設定
設定 >> アクセス権限 を選択するとロール名が表示されるので、クリックする。
AmazonDynamoDBFullAccess
を付与する。
※FullAccessじゃなくて、もっと適切なロールがあるかも。
とりあえず動かしたいので、FullAccessにする。
DynamoDB ストリームの設定 ※メインイベント!!!
設定 >> トリガー >> トリガーを追加 を選択する。
新規作成したDynamoDBを設定する。
※バッチサイズは今回はとりあえずなんでもいい。
追加の設定 >> フィルタリング条件 から、下記のようにフィルターを設定する。
設定したのは下記のようなフィルター。
※フィルターの書き方は参考URL参照
- フィルター1
- eventNameは「INSERT」
- expiredAt という項目が存在しない
- フィルター2
- eventNameは「UPDATE」
- expiredAt という項目が存在しない
実際に動かしてみる
下記2パターンのデータをINSERTしてみる。
DynamoDB コンソールの「項目を作成」から追加する。
■expiredAt なし { "key": "expiredAt does not exists", "age": 20, "name": "masuda" } ■expiredAt あり { "key": "expiredAt exists", "age": 25, "name": "onuma", "expiredAt": 123456 }
CloudWatch からログを確認すると、expiredAt が設定されていないレコードのみログ出力される。
既にINSERTしたデータを更新(age を+1)する。
すると、やはり expiredAt が設定されているレコードのみログ出力される。
Amazon ECS 入門ハンズオン をやってみた
URL
catalog.us-east-1.prod.workshops.aws
Cloud9 で作業環境の作成
下記キャプチャの通り操作し、Cloud9の環境を作成する。
細かい設定の意味はわからない。
とりあえずハンズオンに従った設定にする。
Cloud9にはデフォルトでdockerがインストールされているらしい。
docker version
を入力して確認する。
AWS Cloud9 環境のパブリック IP アドレスを取得。
後で使うらしい。
コンテナイメージの作成
Dockerfile の作成
Dockerfileを Cloud9上で作成する。
※このファイルの簡単な説明はハンズオンのURL参照
docker build でイメージ作成。
※表示メッセージ長いので、最初の方のキャプチャだけ。
docker image でイメージができてること確認。
コンテナを動かす
Cloud9 環境で動いているコンテナイメージを確認。
ドッカーを起動。
オプションの説明は下記の通り。(ハンズオンURLからコピペ)
- -d : コンテナをバックグラウンドで動かすために、デタッチドモードを有効にする
- -p : 指定したポートを、ホスト側に公開する。ホスト側の 8080 ポートを、コンテナ側の 80 ポートに割り当てる。
- --name : コンテナに名前を付ける
コンテナからのレスポンス確認
curl localhost:8080
を投げてみる
Cloud9上の簡易的なWebブラウザで確認してみる
コンテナのデバッグ作業
※うまく起動しない場合の作業みたいなので、うまくいっている為いったんスルー。
ECRにアップロード
ECRのコンソール画面を開く。
リポジトリを作成する。
リポジトリの詳細を見ると、イメージがない状態。
ここにイメージをアップロードしていく。
「プッシュコマンドの表示」からイメージプッシュのコマンドが見られる。
コマンドでECRにアップロード
Cloud9上のコンテナイメージとECRを紐づける為、リポジトリの名前を使ったタグを付与する。
Tagの構文は下記。
ホスト名/イメージ名[:タグ名]
先ほど控えておいたURIの後ろに「:Tag名」でよさそう。
docker build -t 作ったTag .
を実行。
docker images
でTag付与できているかを確認。
リポジトリアップロードの為に、ログインをする。 ※ECRコンソール画面の「プッシュコマンドの表示」にコマンドあり。
docker push さっきつけたTag名
で push する。
ECRのコンソール画面を見ると、イメージが push されていることが確認できる。
ECSの作成
VPCの作成
セキュリティグループの修正
作成したVPCのセキュリティグループにインバウンドルールを追加。
まずは、自分のPCからアクセスできるようマイIPを追加。
次に、Cloud9からアクセスできるよう、控えておいた Public IP アドレスを追加。
ECSクラスターの作成
作成したら、エラーになった。
初めて作成するときはエラーになることがあるらしい。
※ハンズオンのURLにその旨の記載あり。
もう1回やったらちゃんと作成できた。
タスク定義の作成
下図の赤線だけ設定したら、あとは「次へ」で作成する。
タスク定義が作成された。
サービスの作成
作成したECSクラスターを選択する。
サービスタブの作成を選択。
「環境」の設定はデフォルトのまま(ハンズオンで特に言及されていなかったので)
「デプロイ設定」は下記の通り。
「ロードバランシング」の設定も行う。
それ以外はデフォルトの設定のまま。「作成」を選択する。 すると、サービスが作成される。数分かかる。
数分後、デプロイ成功。
インターネットからアクセス
ここまでの手順で、AWS Cloud9 で作成したコンテナを ECS と Fargate の上で稼働することができているらしい。
インターネットからアクセスするための名前が自動的に付与されているみたいなので、作成したサービスを選択する。
そして、「ネットワーキングタブ」の「オープンアドレス」を選択する。
すると、Chromeが起動して「Hello, World」が表示された。
Pt.03 - [外部パッケージ呼び出し編]Go言語公式チュートリアルをやってみた
参考URL
【Go】パッケージ/モジュールやgo modコマンドについてまとめ - フラミナル
go.mod ファイル、go.sum ファイル、go mod tidy コマンドがこの後出てくるが、それについての説明がある。
完全に分かったわけじゃないけど、一番イメージがつかみやすい記事だった。
外部パッケージ「quote」を使う
Pt.02でやったソースに赤字下線部分を追記する。
※Pt.02 - [Hello, World編]Go言語公式チュートリアルをやってみた - モチベーション維持のための技術系ブログ
go mod tidy
コマンドを実行する。
これで、hello.go ファイルの import に書いている quote パッケージがダウンロード?インストール?されて使えるようになる。
go.mod ファイルに、import されたパッケージの情報が書かれる。
go.sum ファイルもできる。
実行すると、こんな感じで表示される。
quote は 4つの関数をもっていて、それぞれ短いことわざを返すだけの関数みたい。
※quoteパッケージのドキュメントより:quote package - rsc.io/quote/v4 - Go Packages
2023/01 の目標
Pt.02 - [Hello, World編]Go言語公式チュートリアルをやってみた
Hello, World! を表示
コードやコマンドはチュートリアルにあるので、画像キャプチャをメインで残す。
作業用ディレクトリを作って、そこに移動。
go mod init example/hello
コマンドで初期化。
go.mod ファイルが生成される。
「Go Modulesの初期化処理」といった感じのようで、ここにモジュールパスや外部ライブラリパスが書かれていくみたい。
(typescript でいうところの package.json みたいなものなのかなと予想。まだはっきりは言えないけど)
ちなみに go.mod ファイルの中はこんな感じ。
hello.go ファイルを作成。
go run .
コマンドで実行。Hello, World! が表示される
ちなみに、 go run
(ドットなし)では実行できなかった。
参考URL
- Go Modulesを利用してローカル環境でGo言語を実行する手順 | Enjoy IT Life
- Goでプロジェクトを始めたい際に楽できるツールを作った - Don't Repeat Yourself
go mod init がよくわからなかったので、参考にした。
それでも正直よくわかってない…
勉強していくうちに理解できると信じて先に進む。
【12月分】忘れちゃいそう、でも覚えておきたい用語をジャンルレスにメモ
英語
- prerequisites
- 前提条件
- brief
- 簡潔に
- along the way
- ~の途中で(途中の間、継続的だったり繰り返されてるイメージ)
- typically
- 通常