マストドン(Mastodon)のインスタンスを AWS でホストしてみた

マストドンをホストするための構成を CloudFormation テンプレート化してくれているので、それをデプロイしてみました。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

マストドンが盛り上がってるらしい?

コンバンハ、千葉(幸)です。

理由は特に知らないのですが、何やら最近マストドンが盛り上がっているらしいですね。理由は知らないのですが。

そんな中、マストドンのインスタンスを AWS でホストする、という試みを見つけました。

単純にホストするだけであれば EC2 インスタンス 1 台でもできるそうですが、なるべくマネージドサービスを使用する構成で考えられているようです。マストドン触ったことないけどやってみるか!ということで入門してみました。

今回作成するマストドンインスタンスの構成

構成、手順、必要となる CloudFormation テンプテートについては以下にまとめられています。

主要なリソースを表したアーキテクチャは以下の通りです。

Mastdon_architecture

(画像は上記ページより引用)

ここでは省略されていますが、以下のリソースも一緒にデプロイされます。詳細は末尾に記載します。

  • VPC
  • 各種 CloudWatch アラーム
  • Route53 ホストゾーン
  • ACM 証明書
  • SNS トピック
  • Lambda 関数
  • AWS KMS キー
  • などなど

わたしは触ってすぐ消したのでコストはあまり意識しませんでしたが、おおまかなコスト感も記載されています。1~50 名程度の小規模な利用で月額 60 USD 程度、ということでした。実際に運用を検討される方は改めて試算し直すことをおすすめします。

Service Configuration Monthly Costs (USD)
ECS + Fargate 3 Spot Tasks x (0.25 CPU + 0.5 GB) $11.56
RDS for Postgres t4g.micro (Multi-AZ) $23.61
ElastiCache for Redis t4g.micro (Single-AZ) $11.52
ALB Load Balancer Hours $16.20
S3 25 GB + requests $0.58
Route 53 Hosted Zone $0.50
Total $63.97

▲これはあくまで例であり、リージョンや使用量によって変わることに注意してください

マストドンインスタンス作成の事前準備

基本的には用意された CloudFormation テンプレートをデプロイするだけなのですが、先行して行っておく準備があります。

  • ドメインの確保
  • ローカルの Docker 実行環境によるシークレットキー等の生成
  • SES のサンドボックスからの移動

ドメインの確保

ここで決めたドメイン名でマストドンに接続することになります。

今回わたしは Freenom というサイトでchibayuki.tkというドメインを取得しておきました。詳細な手順は以下エントリが参考になります。

ローカルの Docker 実行環境によるシークレットキー等の生成

Docker コンテナをローカルで実行しシークレットキーやキーを生成しておきます。これが CloudFormation スタック作成時にパラメータとして必要になります。

今回は AWS Cloud9 環境で操作を行いました。

まずは docker run を実行。ローカルには該当するイメージがないのでリモートからプルされてきます。

$ docker run -it tootsuite/mastodon:latest sh
Unable to find image 'tootsuite/mastodon:latest' locally
latest: Pulling from tootsuite/mastodon
eaead16dc43b: Pull complete
003c996cdc07: Pull complete
e81bb6ec9daa: Pull complete
27b926f2cb64: Pull complete
0fb313e2eed1: Pull complete
74c315f0f4a4: Pull complete
7717fbaa7d07: Pull complete
92451a4e1c05: Extracting [=====================================>             ]  122.6MB/163.792451a4e1c05: Pull complete
e707434f5b7e: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:ab6a6f22cda097ff15ba832db177fdf9125d18bb8bd2ec1468822b96a8356926
Status: Downloaded newer image for tootsuite/mastodon:latest

各種キーを生成します。ここで生成した内容をどこかに控えておいてください。

# Generate SECRET_KEY_BASE
$ bundle exec rake secret
61eb113d47(略)

# Generate OTP_SECRET
$ bundle exec rake secret
b57dbb0d45c(略)

# Generate VAPID_PRIVATE_KEY and VAPID_PUBLIC_KEY
$ bundle exec rake mastodon:webpush:generate_vapid_key
VAPID_PRIVATE_KEY=LbK_BuFk-tN(略)
VAPID_PUBLIC_KEY=BK_JVeBmBWJfRptYD2Rr(略)

SES のサンドボックスからの移動

今回の構成ではマストドンからのメール送信は Amazon SES を通じて行われるため、使用するリージョンの SES がサンドボックスの場合には緩和の申請を出しておきます。

サンドボックスの場合、ダッシュボードで以下のような表示がされています。

Mastdon_SES_sandbox

以下のようなフォームを埋めて送信することでサンドボックスから移動できます。

Mastodon_SES_sandbox_move

24時間以内に応答があるとのことです。詳細は以下ページを参照してください。

わたしは東京リージョンでは元々緩和済みであったため、特に追加の手順なく先に進みました。サンドボックス状態であっても検証済みの宛先へのメール送信はできるので、ひとまず試す、ということであればサンドボックスからの移動は必須ではないはずです。

マストドンインスタンス用 CloudFormation スタックの作成

GitHub の README に書かれているリンクからスタックの作成画面に遷移します。今後もテンプレートのバージョンが新しくなっていくことが予想されますが、わたしが試した際には以下のリンクでした。

https://console.aws.amazon.com/cloudformation/home?#/stacks/create/review?templateURL=https://s3.eu-central-1.amazonaws.com/mastodon-on-aws-cloudformation/v0.7.0/quickstart.yml&stackName=mastodon-on-aws

指定するパラメータは以下の通りです。Mastodon config の値は先ほど生成したものを指定します。

パラメータ 必須 概要
AlertingEmail いいえ アラーム・イベントの通知先メールアドレス
AlertingHttpsEndpoint いいえ アラーム・イベントの通知先HTTPSエンドポイント
DomainName はい マストドンインスタンスのドメイン名
OtpSecret はい Mastodon config OTP_SECRET
SecretKeyBase はい Mastodon config SECRET_KEY_BASE
Spot はい Fargate Spotの利用有無
VapidPrivateKey はい Mastodon config VAPID_PRIVATE_KEY
VapidPublicKey はい Mastodon config VAPID_PUBLIC_KEY

画面下部のチェックを入れ、スタックの作成を実行します。

Mastdon_CloudFormation

わたしの環境では 25 分弱で作成が完了しました。

付随して行う設定あれこれ

ホストゾーンの設定

スタックの作成途中にホストゾーンのネームサーバの設定を行いました。

CloudFormation によって、パラメータで指定したドメイン名のホストゾーンが作成されます。NS レコードに登録されたネームサーバを控えておきます。

mastdon_route53

今回は Freedom でドメインを取得しているので、その管理画面でネームサーバの更新を行います。

mastdon_freenom_nameserver

これで今回作成されたホストゾーンが権威 DNS サーバとして機能できるようになりました。

なお、参考までにホストゾーンには以下のレコードが追加されています。

  • インターネット向け ALB を指すエイリアスレコード
  • ACM 証明書の検証用 CNAME レコード
  • DKIM 用の CNAME レコード

実行中タスクでのコマンド実行

この手順はただマストドンを利用するだけであれば必要ありませんが、実行しておきます。

作成された ECS クラスターのうち、Web サービスの機能を司るタスクの ID を確認しておきます。タスク定義名から判別できます。

Mastdon_Amazon_ECS_cluster

任意の場所から AWS CLI でコマンド実行し、タスク上でインタラクティブに操作できるようにします。AWS CLI を実行する環境にはセッションマネージャープラグインが必要となるのでインストールしておきます。

今回わたしは以下バージョンの AWS CLI で操作しました。

$ aws --version
aws-cli/1.19.112 Python/2.7.18 Linux/4.14.296-222.539.amzn2.x86_64 botocore/1.20.112

先ほど確認したタスクを指定してaws ecs execute-commandを実行します。セッションが開始されます。

$ aws ecs execute-command --cluster mastodon-on-aws-Cluster-1TAWY8XYNP74M-Cluster-K6QdpvQI6OsC --container app --command /bin/bash --interactive --task 22f9c690eebe439bb46b282c4e7f4072

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-0d6831467b7ed4a07
root@ip-10-0-12-21:/opt/mastodon#

せっかくなので環境変数を確認してみます。いろいろ設定されていますね。

root@ip-10-0-12-21:/opt/mastodon# env
SMTP_SERVER=email-smtp.ap-northeast-1.amazonaws.com
AWS_EXECUTION_ENV=AWS_ECS_FARGATE
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/04ba18d7-d81d-4694-b346-19f49074701c
HOSTNAME=ip-10-0-12-21.ap-northeast-1.compute.internal
OTP_SECRET=b57dbb0d45(略)
REDIS_HOST=mar1t1gnapu19fe2.ltydwh.ng.0001.apne1.cache.amazonaws.com
AWS_DEFAULT_REGION=ap-northeast-1
AWS_REGION=ap-northeast-1
PWD=/opt/mastodon
ECS_CONTAINER_METADATA_URI_V4=http://169.254.170.2/v4/22f9c690eebe439bb46b282c4e7f4072-527074092
S3_REGION=ap-northeast-1
NODE_ENV=production
S3_ENABLED=true
DB_USER=mastodon
HOME=/root
LANG=C.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
RAILS_SERVE_STATIC_FILES=true
BIND=0.0.0.0
SMTP_PORT=587
ECS_AGENT_URI=http://169.254.170.2/api/22f9c690eebe439bb46b282c4e7f4072-527074092
SMTP_LOGIN=AKIAQ3BIIH73QIRS4OFV
TERM=xterm-256color
DB_HOST=mastodon-on-aws-database-1hvnywla4523y-dbinstance-yyony6qlma0e.cluh7scr0und.ap-northeast-1.rds.amazonaws.com
ECS_CONTAINER_METADATA_URI=http://169.254.170.2/v3/22f9c690eebe439bb46b282c4e7f4072-527074092
SHLVL=1
LOCAL_DOMAIN=chibayuki.tk
SMTP_PASSWORD=BLlVP53XenqS61eVvc(略)
SECRET_KEY_BASE=61eb113d47e63a6(略)
DB_NAME=mastodon
SMTP_FROM_ADDRESS=noreply@chibayuki.tk
ES_ENABLED=false
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/ruby/bin:/opt/node/bin:/opt/mastodon/bin
VAPID_PRIVATE_KEY=LbK_BuFk-tNygXMn(略)
RAILS_ENV=production
S3_BUCKET=mastodon-on-aws-bucket-bl1indbjqejf-bucket-pbrnb0vbotui
DB_PASS={SLgEP;gi4O$(略)
VAPID_PUBLIC_KEY=BK_JVeBmBWJfR(略)
_=/usr/bin/env

tootctl というマストドンの管理用のツールが使用できるようになっているようです。最低限バージョンの確認とロールの変更をやってみました。(説明の順番が前後しますが、ロールの変更は一度サインアップしてからそのユーザー名を指定して行っています。)

root@ip-10-0-12-21:/opt/mastodon# which tootctl
/opt/mastodon/bin/tootctl

root@ip-10-0-12-21:/opt/mastodon# RAILS_ENV=production bundle exec /opt/mastodon/bin/tootctl --version
4.0.2

# Chibayukiというユーザー名でサインアップした後に実行
root@ip-10-0-12-21:/opt/mastodon# RAILS_ENV=production bundle exec /opt/mastodon/bin/tootctl accounts modify Chibayuki --role Owner
OK

(わたしが試した際は tootctl は実行するとほとんどkilledとなり、たまに成功する、という感じでした。スペックを上げれば解消するのか?など分かっていないです。)

マストドンを触ってみる

指定したドメイン名の Zone Apex であるChikayuki.tkにアクセスすることでマストドンのエクスプローラー画面が表示されました。右下の「アカウント作成」からサインアップしてみます。

Mastodon_explore

ユーザー名、ID、メールアドレス、パスワード(確認用含む)を入力し「登録する」を押下します。

Mastodon_signup

メールが送信されました。

Mastodon_setup

わたしの場合は迷惑メールに振り分けられていましたが、メールから確認を実行します。

Mastdon_mail_activate

ログイン画面で必要情報を入力したら、ようやくマストドンにログインできました。あとは好きなように使いましょう。

とりあえず toot(Twitterにおけるツイート)なるものをしてみました。楽しい。

パオーン?

ユーザー設定からいろいろな管理項目も触れました。環境の情報が覗けて面白いですね。

Mastodon_management

「Sidekiq」という項目を選んでみるとこのような画面に。今回の構成では Sidekiq 専用の ECS タスクが動いています。

Mastdon_Sidekiq

ひとまず動くところまで確認できたので満足しました。

マストドンインスタンスのお片付け

環境が不要な場合には忘れずに削除しましょう。

基本的には CloudFormation スタックを削除するだけですが、Route53 パブリックホストゾーンはレコードセットを削除してからでないと消せません。先にレコードセットを手で消してからスタックを削除するか、スタック削除後に残ったものを手で消しましょう。

今回わたしが試した範囲では S3 バケットにオブジェクトが格納されることはありませんでしたが(画像をアップロードすると S3 バケットに格納される?)、S3 バケットも同様に中身を消してから出ないと削除できないので注意しましょう。

終わりに

マストドンインスタンスを AWS でホストする構成を試してみました。

単純にホストするだけであれば EC2 1 台でもできますが、なるべくマネージドサービスを利用するように検討された構成が面白いですね。しかもほとんど準備された CloudFormation テンプレートをデプロイするだけ、というのが嬉しいところです。(逆に考えるとコンテナの中身を理解せずとも動かせてしまう、ということでもありますが……)

ちょっとどんなもんか試してみたい、という方はコストに気をつけながら試してみてはいかがでしょうか。

以上、 チバユキ (@batchicchi) がお送りしました。

おまけ:CloudFormation のあれこれ

ブログの中に載せるとテンポが悪くなりそうだったので、作成されるリソースの中身と実行時のイベントを末尾に載せます。

今回使用したのは以下バージョンのテンプレートです。

https://s3.eu-central-1.amazonaws.com/mastodon-on-aws-cloudformation/v0.7.0/quickstart.yml

CloudFormation テンプレートに含まれるリソース

テンプレートに含まれるリソースの一覧です。タイプがAWS::CloudFormation::Stackとなっているものはネストされておりさらに別の CloudFormation スタックが呼び出されます。

論理 ID タイプ
Alb AWS::CloudFormation::Stack
AlbListener AWS::CloudFormation::Stack
Alerting AWS::CloudFormation::Stack
Bucket AWS::CloudFormation::Stack
Cache AWS::CloudFormation::Stack
Certificate AWS::CloudFormation::Stack
ClientSg AWS::CloudFormation::Stack
Cluster AWS::CloudFormation::Stack
Database AWS::CloudFormation::Stack
Dkim1Record AWS::Route53::RecordSet
Dkim2Record AWS::Route53::RecordSet
Dkim3Record AWS::Route53::RecordSet
EmailIdentity AWS::SES::EmailIdentity
EmailUser AWS::IAM::User
EmailUserAccessKey AWS::IAM::AccessKey
HostedZone AWS::CloudFormation::Stack
Key AWS::CloudFormation::Stack
LambdaLogGroup AWS::Logs::LogGroup
LambdaPolicy AWS::IAM::Policy
LambdaRole AWS::IAM::Role
Record AWS::CloudFormation::Stack
S3Policy AWS::IAM::ManagedPolicy
Secret AWS::CloudFormation::Stack
SidekiqService AWS::CloudFormation::Stack
SmtpPasswordConverter Custom::SmtpPasswordConverter
SmtpPasswordConverterLamdaFunction AWS::Lambda::Function
StreamingApiService AWS::CloudFormation::Stack
StreamingApiTarget AWS::CloudFormation::Stack
Target AWS::CloudFormation::Stack
Vpc AWS::CloudFormation::Stack
WebService AWS::CloudFormation::Stack

ネストされた CloudFormation テンプレートに含まれるリソース

ネストされた CloudFormation テンプレートに含まれるリソースは以下のとおりです。CloudWatch アラームがかなりの数用意されていることが分かります。

論理 ID 作成されるリソース
Alb CloudWatchアラーム*2、ALB、SecuriryGroup
AlbListener リスナー、SecuriryGroupインバウンドルール
Alerting SNSトピック*2、トピックポリシー、CloudWatchアラーム
Bucket S3バケット、バケットポリシー
Cache ElastiCacheクラスター、パラメーターグループ、サブネットグループ、SecuriryGroup、CloudWatchアラーム*8
Certificate ACM証明書
ClientSg SecuriryGroup
Cluster ECSクラスター
Database さらにネストされた上で(DBインスタンス(PostgreSQL)、DBサブネットグループ、SecuriryGroup、イベントサブスクリプション、CloudWatchアラーム*7)
HostedZone ホストゾーン
Key KMSキー、エイリアス、Eventsルール
Record Route53レコードセット
Secret シークレット
SidekiqService ECSサービス、タスク定義、IAMロール*2、Eventsルール、SecuriryGroup、ロググループ、CloudWatchアラーム
StreamingApiService ECSサービス、タスク定義、IAMロール*2、Eventsルール、SecuriryGroup、ロググループ、CloudWatchアラーム
StreamingApiTarget ターゲットグループ、リスナールール、SecuriryGroup、CloudWatchアラーム*2
Target ターゲットグループ、リスナールール、SecuriryGroup、CloudWatchアラーム*2
Vpc ※後述
WebService ECSサービス、タスク定義、IAMロール*2、Eventsルール、SecuriryGroup、ロググループ、CloudWatchアラーム

Vpcスタックの中ではリソースもあればさらにネストされたスタックもあります。このような内訳になっています。

論理 ID さらにネスト 作成されるリソース
FlowLogModule フローログ、ロググループ、IAMロール
SubnetAPrivate サブネット、NACL、NACLルール、ルートテーブル、NACL割り当て、ルートテーブル割り当て
SubnetAPublic 同上
SubnetBPrivate 同上
SubnetBPublic 同上
VPCEndpointDynamoDB VPCエンドポイント
VPCEndpointS3 VPCエンドポイント
VpcPlain VPC、インターネットゲートウェイ、ゲートウェイ割り当て

CloudFormation スタック作成時のイベント

時系列に並べたものが以下です。リソースごとの所要時間や全体の流れをイメージしたい方はどうぞ。

タイムスタンプ 論理 ID ステータス 状況の理由
2022-11-23 17:51:41 UTC+0900 mastodon-on-aws CREATE_IN_PROGRESS User Initiated
2022-11-23 17:51:44 UTC+0900 EmailIdentity CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 EmailUser CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:45 UTC+0900 LambdaRole CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 Alerting CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 HostedZone CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 Bucket CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 EmailUser CREATE_IN_PROGRESS -
2022-11-23 17:51:45 UTC+0900 Cluster CREATE_IN_PROGRESS -
2022-11-23 17:51:46 UTC+0900 HostedZone CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:46 UTC+0900 Cluster CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:46 UTC+0900 LambdaRole CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:47 UTC+0900 Bucket CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:47 UTC+0900 EmailIdentity CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:47 UTC+0900 Alerting CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:51:57 UTC+0900 Alerting CREATE_COMPLETE -
2022-11-23 17:51:59 UTC+0900 Key CREATE_IN_PROGRESS -
2022-11-23 17:51:59 UTC+0900 Vpc CREATE_IN_PROGRESS -
2022-11-23 17:52:01 UTC+0900 Key CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:01 UTC+0900 Vpc CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:08 UTC+0900 Cluster CREATE_COMPLETE -
2022-11-23 17:52:21 UTC+0900 EmailUser CREATE_COMPLETE -
2022-11-23 17:52:21 UTC+0900 Bucket CREATE_COMPLETE -
2022-11-23 17:52:22 UTC+0900 S3Policy CREATE_IN_PROGRESS -
2022-11-23 17:52:23 UTC+0900 LambdaRole CREATE_COMPLETE -
2022-11-23 17:52:23 UTC+0900 S3Policy CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:23 UTC+0900 EmailUserAccessKey CREATE_IN_PROGRESS -
2022-11-23 17:52:24 UTC+0900 EmailUserAccessKey CREATE_COMPLETE -
2022-11-23 17:52:24 UTC+0900 EmailUserAccessKey CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:25 UTC+0900 SmtpPasswordConverterLamdaFunction CREATE_IN_PROGRESS -
2022-11-23 17:52:28 UTC+0900 SmtpPasswordConverterLamdaFunction CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:33 UTC+0900 HostedZone CREATE_COMPLETE -
2022-11-23 17:52:34 UTC+0900 SmtpPasswordConverterLamdaFunction CREATE_COMPLETE -
2022-11-23 17:52:35 UTC+0900 Certificate CREATE_IN_PROGRESS -
2022-11-23 17:52:36 UTC+0900 LambdaLogGroup CREATE_IN_PROGRESS -
2022-11-23 17:52:37 UTC+0900 LambdaLogGroup CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:37 UTC+0900 Certificate CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:52:38 UTC+0900 LambdaLogGroup CREATE_COMPLETE -
2022-11-23 17:52:40 UTC+0900 LambdaPolicy CREATE_IN_PROGRESS -
2022-11-23 17:52:41 UTC+0900 LambdaPolicy CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:53:00 UTC+0900 S3Policy CREATE_COMPLETE -
2022-11-23 17:53:18 UTC+0900 LambdaPolicy CREATE_COMPLETE -
2022-11-23 17:53:20 UTC+0900 SmtpPasswordConverter CREATE_IN_PROGRESS -
2022-11-23 17:53:22 UTC+0900 SmtpPasswordConverter CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:53:23 UTC+0900 SmtpPasswordConverter CREATE_COMPLETE -
2022-11-23 17:53:53 UTC+0900 EmailIdentity CREATE_COMPLETE -
2022-11-23 17:54:05 UTC+0900 Dkim2Record CREATE_IN_PROGRESS -
2022-11-23 17:54:05 UTC+0900 Dkim3Record CREATE_IN_PROGRESS -
2022-11-23 17:54:05 UTC+0900 Dkim1Record CREATE_IN_PROGRESS -
2022-11-23 17:54:07 UTC+0900 Dkim2Record CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:54:07 UTC+0900 Dkim1Record CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:54:07 UTC+0900 Dkim3Record CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:54:15 UTC+0900 Vpc CREATE_COMPLETE -
2022-11-23 17:54:17 UTC+0900 ClientSg CREATE_IN_PROGRESS -
2022-11-23 17:54:17 UTC+0900 Alb CREATE_IN_PROGRESS -
2022-11-23 17:54:19 UTC+0900 ClientSg CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:54:19 UTC+0900 Alb CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:54:30 UTC+0900 ClientSg CREATE_COMPLETE -
2022-11-23 17:54:39 UTC+0900 Dkim3Record CREATE_COMPLETE -
2022-11-23 17:54:40 UTC+0900 Dkim2Record CREATE_COMPLETE -
2022-11-23 17:54:40 UTC+0900 Dkim1Record CREATE_COMPLETE -
2022-11-23 17:55:33 UTC+0900 Key CREATE_COMPLETE -
2022-11-23 17:55:35 UTC+0900 Secret CREATE_IN_PROGRESS -
2022-11-23 17:55:35 UTC+0900 Cache CREATE_IN_PROGRESS -
2022-11-23 17:55:36 UTC+0900 Secret CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:55:36 UTC+0900 Cache CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:55:47 UTC+0900 Secret CREATE_COMPLETE -
2022-11-23 17:55:49 UTC+0900 Database CREATE_IN_PROGRESS -
2022-11-23 17:55:50 UTC+0900 Database CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:56:12 UTC+0900 Alb CREATE_COMPLETE -
2022-11-23 17:56:14 UTC+0900 Record CREATE_IN_PROGRESS -
2022-11-23 17:56:16 UTC+0900 Record CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 17:57:03 UTC+0900 Record CREATE_COMPLETE -
2022-11-23 18:06:10 UTC+0900 Cache CREATE_COMPLETE -
2022-11-23 18:08:53 UTC+0900 Certificate CREATE_COMPLETE -
2022-11-23 18:08:55 UTC+0900 AlbListener CREATE_IN_PROGRESS -
2022-11-23 18:08:57 UTC+0900 AlbListener CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:09:07 UTC+0900 AlbListener CREATE_COMPLETE -
2022-11-23 18:09:09 UTC+0900 StreamingApiTarget CREATE_IN_PROGRESS -
2022-11-23 18:09:09 UTC+0900 Target CREATE_IN_PROGRESS -
2022-11-23 18:09:11 UTC+0900 StreamingApiTarget CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:09:11 UTC+0900 Target CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:09:33 UTC+0900 StreamingApiTarget CREATE_COMPLETE -
2022-11-23 18:09:33 UTC+0900 Target CREATE_COMPLETE -
2022-11-23 18:10:29 UTC+0900 Database CREATE_COMPLETE -
2022-11-23 18:10:31 UTC+0900 SidekiqService CREATE_IN_PROGRESS -
2022-11-23 18:10:31 UTC+0900 StreamingApiService CREATE_IN_PROGRESS -
2022-11-23 18:10:31 UTC+0900 WebService CREATE_IN_PROGRESS -
2022-11-23 18:10:34 UTC+0900 WebService CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:10:34 UTC+0900 StreamingApiService CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:10:34 UTC+0900 SidekiqService CREATE_IN_PROGRESS Resource creation Initiated
2022-11-23 18:14:05 UTC+0900 WebService CREATE_COMPLETE -
2022-11-23 18:14:05 UTC+0900 StreamingApiService CREATE_COMPLETE -
2022-11-23 18:14:05 UTC+0900 SidekiqService CREATE_COMPLETE -
2022-11-23 18:14:06 UTC+0900 mastodon-on-aws CREATE_COMPLETE -

人が作った壮大な CloudFormation テンプレートを流すときは興奮しますね。