AWS Verified Access
AWS Security Incident Response
Application Signals
DevOps Guru
DevOps Guru for RDS
FIS
AWS Transcribe
『Heroku→AWS移行でのトラブル全部見せます | ドクセル』
SES
Redshift
AWS Console-to-Code
SNS
『Canva、SNS SQSよりAmazon KDSを選択し、1日250億件のイベントで85%の節約を実現 - InfoQ』
SAM
jsii
Athena
Application Load Balancer
ALB
AWS Control Tower
Aurora
SageMaker
SageMaker Studio Code Editor
『まるでCloud9なSageMaker Studio Code Editorを一撃で構築する』
IAM Identity Center
AWS IDE Toolkits
あれ
CodeCatalyst
CloudSearch
CodeCommit
Monitron
AWS Load Balancer Controller
LLRT
EKS
myApplications
AWS CLI
Amazon Q
App Studio
Honeycode
IVS
Amazon Interactive Video Service
Mechanical Turk
Cloudscape
CodeGuru Reviewer
LocalStack
CloudWatch
Cloud9
『社外の開発メンバーをAWSアカウントに入れるときのIAM設定を考えている』
CDK
PartyRock
Lambda
Bedrock
あれ
『Amplify爆死レポート』をFediverseに流したところ、「わっかるー」と帰ってきた人とFFになった。
その人のタイムラインを遡っていたら、Azureの愚痴が度々書かれており、「AWSからAzure行くぞッ!」と思っていた矢先だったため、「Azureもあかんか……」となっている。逃げ道が無いではないか。
AppSync
AWS Amplifyで検証用アプリを作ったあとに削除したら、大本のアプリのBackend environmentsが意図せず消された
再現手順
Amplifyを触ったことがある人を対象としているため、画像を貼ったりせず、事細かには説明しない。適宜補完してほしい。
本番と見なすAmplifyのアプリを作成する
ダミーのウェブアプリを作る
- Githubに空のレポジトリを作成する
- GithubからレポジトリをCloneする
- ローカルの端末で
npx create-react-app amplify_the_destroyer
などと実行して、テスト用に適当なウェブアプリを作成する。ここでnext.jsで作るとややこしいことになるのでやってはいけない。
Amplifyのウェブコンソールでの作業
- Amplifyのウェブコンソールから「アプリケーションを構築」を押して、アプリ(名前はto_be_destroyedとする)を作成する。
ローカルの端末での作業
- Backend environmentsにstagingがあるので、これを
amplify pull --appId {appId} --envName staging
で取得する。 git add .
、git commit -m "init"
、git push
を実行して、レポジトリにコードを反映させる。
Amplifyのウェブコンソールでの作業
- Hosting environmentsからGithubを選択して、上記レポジトリのmainブランチと連携させる。
- 「ビルドの設定」画面で、Environmentを「新しい環境を作成」にし、Environment名は空欄のままにする。
- デプロイを開始し、デプロイされるのを待つ。
作業結果
下の画像のようになれば成功だ。Amplifyを使っている人には見慣れた光景かと思う。
この後、ローカルの端末でamplify pull --appId {appId} --envName main
を実行してmainと同期し、その結果をGithubのレポジトリにpushしておく。
本番環境とは切り離された検証環境のつもりでAmplifyで別アプリを作成する。
- Amplifyのウェブコンソールから「アプリケーションを構築」を押して、アプリ(名前はdestroyerとする)を作成する。
- Hosting environmentsからGithubを選択して、上記レポジトリのmainブランチと連携させる。
- 「ビルドの設定」画面で、Environmentを「新しい環境を作成」にし、Environment名は空欄のままにする。
- デプロイを開始し、デプロイされるのを待つ
Amplifyのウェブコンソール上でdestroyerを削除して、to_be_destroyedのBackend Environmentsが削除されるのを確認する
- Amplifyのウェブコンソールでdestroyerを開き、「アプリの削除」を押して削除する。
- destoryerが削除されたら、to_be_destroyedのBackend Environmentsが削除されているのを確認する。
mainが「Deletion completed」となっているのが確認できる。
原因
Amplifyにレポジトリ連携でデプロイする時、team-provider-info.jsonがレポジトリに入っていると、別Appであっても同一のCloudFormationスタックが用いられる。
そのため、Appを削除するとCloudFormationによって他Appと共用となってしまっているバックエンド環境が削除される。
対策(未検証)
- Amplifyと連携しているレポジトリからteam-provider-info.jsonを消す
- .gitignoreにteam-provider-info.jsonを追加する
- CloudFormationのスタック削除保護を有効化する
- バックアップを設定する
後記
代理店を通じてAWSにBackend Environmentsの復旧を依頼したが、Backend Environmentsに掛かるDynamoDB・S3は復旧できないとのこと。
amplify pullを実行すると、.gitignoreに色々追記されるが、team-provider-info.jsonは除外設定にならない。
本事象は私のプロジェクトの本格運用前に発生した。本格運用が始まった状態でこの問題が発生した場合にはより深刻な影響を及ぼしただろう。
DynamoDBのデータは、DataStoreがDynamoDBと同期していたブラウザのIndexedDBより救出された。
今年の2月に開始された弊プロジェクトでは、この他にも2度ほどAmplifyのバグを踏んでいる。
CloudFormation
CloudShell
Amazon Linux 2023
QLDB
Amplify
DynamoDB
あれ
AWSもベクトルDBサービス出してくれや
サーバーレスで安価なので頼む
AWSでのクラウド破産対策
- BillingからBudgetsを設定
- 設定した閾値を超えた場合に通知が来る
あれ
AWSでベクトル検索しようとするとAmazon OpenSearchとかいうのを使うのが正攻法なのだけど、OpenSearchはEC2インスタンスが立ち上がってしまって費用的にも労力的にも良くない。そこで、ベクトル検索ライブラリで生成したインデックスをAmazon DynamoDBのインデックスにすればサーバーレスで安価に運用できる気がしている。
未検証。できるかどうか不明。果たして、任意のインデックスをレコードに設定することができるのか?
というか、そういう機能をAWSが作るべきだと思う。作るでしょ。そのうち。