From f16fdc9691c69f56ba1af29b3295ec331580c799 Mon Sep 17 00:00:00 2001 From: ma91n Date: Thu, 28 May 2026 11:25:19 +0900 Subject: [PATCH 1/4] =?UTF-8?q?moto=20=E3=81=AB=20Terraform=20=E3=82=92?= =?UTF-8?q?=E6=89=93=E3=81=A1=E8=BE=BC=E3=81=BF=E3=80=81=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E3=81=AA=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E9=A7=86?= =?UTF-8?q?=E5=8B=95=E3=81=AE=E6=A7=8B=E6=88=90=E3=82=92=E5=8B=95=E3=81=8B?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=BF=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...13\343\201\227\343\201\276\343\201\231.md" | 2 +- ...27\343\201\246\343\201\277\343\201\237.md" | 441 ++++++++++++++++++ source/images/2026/20260528a/image.png | Bin 0 -> 20563 bytes source/images/2026/20260528a/image_2.png | Bin 0 -> 20563 bytes source/images/2026/20260528a/thumbnail.png | Bin 0 -> 14448 bytes 5 files changed, 442 insertions(+), 1 deletion(-) create mode 100644 "source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" create mode 100644 source/images/2026/20260528a/image.png create mode 100644 source/images/2026/20260528a/image_2.png create mode 100644 source/images/2026/20260528a/thumbnail.png diff --git "a/source/_posts/2026/20260518a_Terraform\351\200\243\350\274\2112026\343\202\222\351\226\213\345\247\213\343\201\227\343\201\276\343\201\231.md" "b/source/_posts/2026/20260518a_Terraform\351\200\243\350\274\2112026\343\202\222\351\226\213\345\247\213\343\201\227\343\201\276\343\201\231.md" index 8885f41b019..eb113dfc97b 100644 --- "a/source/_posts/2026/20260518a_Terraform\351\200\243\350\274\2112026\343\202\222\351\226\213\345\247\213\343\201\227\343\201\276\343\201\231.md" +++ "b/source/_posts/2026/20260518a_Terraform\351\200\243\350\274\2112026\343\202\222\351\226\213\345\247\213\343\201\227\343\201\276\343\201\231.md" @@ -27,7 +27,7 @@ lede: "今年もフューチャー技術ブログでは、Terraformを題材と | 5/25(月)| 永井辰弥さん | TBD | | 5/26(火)| 棚井龍之介さん | [Terraform × Policy as Code:管理策を実装し、追跡可能なガードレールへ](/articles/20260526a/) | | 5/27(水)| 香村真紀さん | [Terraform で AWS SAM CLI を利用して、ローカルで Lambda のテストとデプロイを試してみた](/articles/20260527a/) | -| 5/28(木)| 市川裕也さん | Terraform × ISMS | +| 5/28(木)| 市川裕也さん | [moto に Terraform を打ち込み、基本的なイベント駆動の構成を動かしてみた](/articles/20260528a/) | Terraform連載は2023年から始まり、4年連続の開催となります。技術カットの連載企画の中では比較的ご長寿連載になりました。 diff --git "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" new file mode 100644 index 00000000000..4507ff1af70 --- /dev/null +++ "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" @@ -0,0 +1,441 @@ +--- +title: "moto に Terraform を打ち込み、基本的なイベント駆動の構成を動かしてみた" +date: 2026/05/28 00:00:00 +postid: a +tag: + - Terraform + - moto + - モック +category: + - Infrastructure +thumbnail: /images/2026/20260528a/thumbnail.png +author: 市川裕也 +lede: "Terraform を打ち込むことができる AWS エミュレータの「moto」を紹介します。" +--- +# はじめに + +こんにちは。 CSIG の市川です。 + +[Terraform連載](/articles/20260518a/)ということで、Terraform を打ち込むことができる AWS エミュレータの「moto」を紹介します。 + +ローカルや CI 上で AWS・ Terraform のテストをしたいときのエミュレータとして、これまでは LocalStack が採用されるケースが多かったかと思います。 + +ただ 2026 年 3 月に Community Edition が廃止され、統合イメージへの移行と認証トークンの必須化が行われました。その後フィードバックを受けて非商用限定の Hobby プランも用意されましたが、いずれにせよ「アカウント登録 + 認証トークン」が必要になっています。 (参考: https://www.localstack.cloud/pricing#Tab%201) +「ローカルで気軽に使いたい」「CI 上で認証なしで使いたい」というユースケースに対しては、以前ほど手軽ではなくなりました。 + +そこで、認証も登録もいらない代替を探していて見つけたのが [moto](https://github.com/getmoto/moto) です。 +(他にも、 [floci](https://floci.io/) や [kumo](https://github.com/sivchari/kumo) といったエミュレータもありましたが、今回の記事ではスコープ外とさせていただきます) + +この記事では、moto に対して Terraform を打ち込み、さらに「S3 → SQS → コンテナ」というイベント駆動の構成が動くところまでをローカルで検証します。 + +# この記事を読むとできるようになること + +- `docker compose up` で立ち上げた moto に対して、Terraform で AWS リソースを作成できる +- S3 → SQS → ECS サービス という典型的なイベント駆動構成が moto 上で動くかどうか、自分の目で確かめられる +- moto で「どこまで再現できて、どこからは無理か」が判断できるようになる + +# moto とは + +[moto](https://github.com/getmoto/moto) はもともと Python の [boto3](https://github.com/boto/boto3) 用のユニットテスト向け mock ライブラリです。 + +なのですが、 moto には「サーバーモード」というモードも用意されています(使い方については、 [サーバーモードのドキュメント](https://docs.getmoto.org/en/latest/docs/server_mode.html#example-usage)を参考にしてください)。 + +サーバーモードは、Docker コンテナとして起動でき、起動すると HTTP で AWS API を受け付けるエンドポイントが立ち上がります。サーバーモードに対しては、Terraform を実行したり aws-cli を叩くことができます。 + +今回はこのサーバーモードを使います。対応サービスの一覧は公式の [Implementation Coverage](https://docs.getmoto.org/en/latest/docs/services/index.html) に記載されています。S3 / SQS / IAM / ECS / CloudWatch Logs / DynamoDB / Lambda など、よく使うサービスが幅広くカバーされています。 + +# moto と LocalStack の使い分け + +ざっくり並べるとこんな印象です。 + +| | moto | LocalStack | +| ------------------------ | ---------------------------------------------------- | ---------------------------------------------------------- | +| アカウント登録 | **不要** | 必要(無料の Hobby プランでも認証トークン要) | +| セットアップ | `docker run motoserver/moto` | イメージ pull + トークン設定 | +| 商用利用 | 制限なし | 有料プラン必須 | +| サービス間連携の再現度 | S3 → SQS など基本的な連携は再現可。Lambda の自動起動や Cognito の Custom Auth Flow といった連携は基本不可 | 広め。Lambda 自動起動など、moto では不可な連携も一部対応 | +| 対応サービス数 / カバレッジ | 主要 AWS サービスを幅広くカバー。すべて無料 | 無料の Hobby は約 30 サービス。RDS・Athena・Glue などデータ / 分析系は有料プラン限定 | + +「Lambda が SQS から自動で起動する」「Cognito の状態遷移を再現する」みたいなことをしたい場合は LocalStack(有料機能を含めて)を使用する必要がありますが、「API レスポンスと、ごく一部の副作用さえあれば良い」という用途であれば、 moto で十分なケースが多そうです。 + +# 今回検証すること + +この記事では 2 つのことを試します。 + +- **試したいこと①**:Terraform を moto に打ち込めるか +- **試したいこと②**:S3 → SQS → ECS サービス のイベント駆動が moto 上で動くか(副作用ありのフローも再現できるか) + +普段業務でよく使っている構成を参考に、以下のような構成図のインフラリソースを作成します。 + +```sh +put JSON --> [S3] --event--> [SQS] --ポーリング--> [ECS サービス 相当のコンテナ] --> ログ出力 +``` + +image.png + +- コンテナ : SQS をポーリングし、メッセージから S3 のキーを取り出してログ出力するコンテナ + +動作検証を行ったリポジトリは [moto-terraform](https://github.com/yy-at-here/moto-terraform) に上げているので、興味がある方はご参照ください。 + +# 準備: moto のサーバーモードを立ち上げる + +`docker-compose.yml` で `motoserver/moto` を起動します。 + +```yaml +services: + moto: + image: motoserver/moto:latest + ports: + - "5050:5000" +``` + +この段階で `s3 ls` コマンドを叩くと、空文字列が返ってくることが確認できます。 + +```bash +% docker compose up -d moto +% aws --endpoint-url http://localhost:5050 s3 ls + +% +``` + +# 試したいこと① : Terraform を moto に打ち込む + +ここからが本題のひとつめです。 +Terraform の provider が向く先を moto に切り替えていきます。 + +## Terraform に moto を打ち込むための設定 + +以下のような `main.tf` を使用する想定とします。 + +```tf +# terraform/main.tf +terraform { + required_version = ">= 1.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + } +} + +provider "aws" { + region = var.region + + default_tags { + tags = { + Environment = var.env + ManagedBy = "terraform" + } + } +} +``` + +Terraform には、`*_override.tf` というファイル名で書いたリソース定義が、同名のリソースをマージで上書きしてくれる機構があります([Override Files](https://developer.hashicorp.com/terraform/language/files/override))。 + +moto を向くための設定を `override.tf` に切り出すことで、 `main.tf` を編集することなく、moto に向く設定に上書きできます。 + +```tf +# terraform/override.tf +variable "use_moto" { + default = true +} + +provider "aws" { + region = "ap-northeast-2" + access_key = "testing" + secret_key = "testing" + skip_credentials_validation = true + skip_metadata_api_check = true + skip_requesting_account_id = true + s3_use_path_style = true + + endpoints { + s3 = "http://localhost:5050" + sqs = "http://localhost:5050" + ecs = "http://localhost:5050" + iam = "http://localhost:5050" + ec2 = "http://localhost:5050" + ecr = "http://localhost:5050" + sts = "http://localhost:5050" + cloudwatchlogs = "http://localhost:5050" + } +} +``` + +特記事項は以下のとおり: + +- ローカル完結なので `access_key` / `secret_key` / `region` は任意の文字列で可。 +- 以下を参考に、 `skip_~~` 系を true に設定しました。 + - [Non-Python SDK’s / Server Mode / Example Usage](https://docs.getmoto.org/en/latest/docs/server_mode.html#example-usage) +- ローカルだと S3 の `s3_use_path_style` を有効にしておく必要があります。これを設定しないと、ローカルでの名前解決が正しく行われません。本題から逸れるので、理由はトグルの中に入れておきます。気になる方は以下のトグルをご参照ください。 + +
s3_use_path_style = true が必要な理由: + +**▪️ 2 つのアクセス URL 形式** + +`s3_use_path_style` とは、S3 の URL の組み立て方を「パススタイル」に強制する設定です。 +S3 へのアクセス URL には2つの形式があります。 + +| 形式 | URL の例 | +| --------------------------- | ------------------------------------------ | +| 仮想ホスト形式 (デフォルト) | https://my-bucket.s3.amazonaws.com/key.txt | +| パススタイル形式 | https://s3.amazonaws.com/my-bucket/key.txt | + +仮想ホスト形式はバケット名がサブドメインに入りますが、パススタイルはパスの一部として入ります。 + +**▪️ なぜ moto では true が必要か** + +moto は http://localhost:5050 の単一エンドポイントで動いています。仮想ホスト形式を使うと、AWS SDK は以下のような URL を組み立てようとします。 + +```sh +http://my-bucket.localhost:5050/key.txt +``` + +これは、 + +- my-bucket.localhost という名前解決ができない (DNS に存在しない) +- moto サーバーは localhost:5050 でしか listen していない + +ため、接続できずに失敗します。 + +s3_use_path_style = true にすると、以下のような URL になります。 + +```sh +http://localhost:5050/my-bucket/key.txt +``` + +これなら moto サーバーに正しく届きます。 + +
+ +### 作成するリソース (一部抜粋) + +S3 バケットと SQS キューを、以下の設定で作成します。 + +```tf S3 +resource "aws_s3_bucket" "main" { + bucket = "${var.env}-json-bucket" + force_destroy = true +} + +resource "aws_s3_bucket_notification" "to_sqs" { + bucket = aws_s3_bucket.main.id + + queue { + queue_arn = aws_sqs_queue.main.arn + events = ["s3:ObjectCreated:*"] + filter_suffix = ".json" + } +} +``` + + +```tf SQS +resource "aws_sqs_queue" "main" { + name = "${var.env}-queue" + visibility_timeout_seconds = 60 + message_retention_seconds = 86400 +} + +resource "aws_sqs_queue_policy" "allow_s3" { + queue_url = aws_sqs_queue.main.id + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Principal = { Service = "s3.amazonaws.com" } + Action = "sqs:SendMessage" + Resource = aws_sqs_queue.main.arn + Condition = { + ArnEquals = { + "aws:SourceArn" = aws_s3_bucket.main.arn + } + } + } + ] + }) +} +``` + +## Terraform コマンドが実行できることを確認する + +ここまで揃ったら、あとは Terraform コマンドを叩くだけです。 + +```bash +% cd terraform +% terraform init +% terraform apply -auto-approve +... +Apply complete! Resources: 17 added, 0 changed, 0 destroyed. +``` + +apply が通ることを確認できました。 + +リソースが作成されたかも確認してみます。 +`--endpoint-url` で moto を向ければ、AWS CLI からリソースが見えます。 +Terraform で定義した通りに S3 バケットと SQS キューが作られていることが確認できました。 + +```bash +% aws --endpoint-url http://localhost:5050 s3 ls +2026-04-07 22:30:11 moto-test-json-bucket + +% aws --endpoint-url http://localhost:5050 --region ap-northeast-2 sqs list-queues +QueueUrls: +- http://localhost:5050/123456789012/moto-test-queue +``` + +# 試したいこと② : S3 → SQS → コンテナ のイベント駆動を動かす + +次は副作用ありのフローを試します。 +S3 にオブジェクトが作成されたら自動的に SQS にイベント通知が飛び、それを ECS サービスが拾って後段で処理する、という構成を moto 上で動かします。 + +image.png + +[S3 のドキュメント](https://docs.getmoto.org/en/latest/docs/services/s3.html) には「ObjectCreated された際の SQS への通知をサポートしている」旨の記載があるため、 Put 時の SQS への通知も飛んでくれるはずです。 +これを、実際に動かして検証してみます。 + +> The configuration can be persisted, but at the moment we only send notifications to the following targets: +> +> - AWSLambda +> - SNS +> - SQS +> - EventBridge +> +> For the following events: +> +> - s3:ObjectCreated:CompleteMultipartUpload +> - s3:ObjectCreated:Copy +> - s3:ObjectCreated:Post +> - s3:ObjectCreated:Put +> - s3:ObjectDeleted +> - s3:ObjectRestore:Post + +## S3 → SQS の通知設定 + +Terraform で、以下のような S3 イベント通知を設定します。 + +```tf +# terraform/s3.tf +resource "aws_s3_bucket" "main" { + bucket = "${var.env}-json-bucket" + force_destroy = true +} + +resource "aws_s3_bucket_notification" "to_sqs" { + bucket = aws_s3_bucket.main.id + + queue { + queue_arn = aws_sqs_queue.main.arn + events = ["s3:ObjectCreated:*"] + filter_suffix = ".json" + } +} +``` + +「`.json` で終わるオブジェクトが作られたら SQS にイベントを送る」だけのシンプルな設定です。 +これがちゃんと moto 上で副作用として発火するのかが、ここでの検証ポイントになります。 + +## ポーリング用のコンテナを起動する + +今回は `docker-compose.yml` でコンテナを作成し、このコンテナを ECS サービスの代わりとしました。 + +```yaml +services: + moto: + image: motoserver/moto:latest + ports: + - "5050:5000" + + task2: + build: ./apps/task2 + depends_on: + - moto + restart: unless-stopped + environment: + - AWS_ENDPOINT_URL=http://moto:5000 + - AWS_ACCESS_KEY_ID=testing + ... +``` + +::: note warn +moto の ECS は API のレスポンスを返すだけで、実際にコンテナを起動してくれるものではありません。 +したがって、 ECS サービスやタスクを模したい場合は、 moto の外側で動かす必要があります。 + +最初は、上記のコンテナも ECS のエミュレータ上で動かせたら嬉しいと考えていたのですが、上記の制約より、普通のコンテナとして動かす方針で検証を進めました。 +::: + +### 動かしてみる + +初期状態のキュー内のメッセージは当然 0 個です。 + +```bash +% aws --endpoint-url http://localhost:5050 sqs get-queue-attributes \ + --queue-url http://localhost:5050/123456789012/moto-test-queue \ + --attribute-names ApproximateNumberOfMessages \ + --region ap-northeast-2 +Attributes: + ApproximateNumberOfMessages: '0' +``` + +この状態でS3 に JSON を put してみます。 + +```bash +% S3_KEY="data/$(date +%Y%m%d-%H%M%S).json" +% echo '{"hello": "world!"}' | aws --endpoint-url http://localhost:5050 s3 cp - \ + "s3://moto-test-json-bucket/${S3_KEY}" \ + --region ap-northeast-2 +``` + +その後ふたたびキュー内のメッセージ数を見てみると、1 個になっていることが分かります。 + +```bash +% aws --endpoint-url http://localhost:5050 sqs get-queue-attributes \ + --queue-url http://localhost:5050/123456789012/moto-test-queue \ + --attribute-names ApproximateNumberOfMessages \ + --region ap-northeast-2 +Attributes: + ApproximateNumberOfMessages: '1' +``` + +ドキュメント通り、S3 イベントが発火し、キューにメッセージがプッシュされたのを確認できました。 + +さらに、キューからメッセージをポーリングして、ポーリングした JSON をログ出力するコンテナを立ち上げます。 +すると、立ち上げたコンテナで以下のようなログが出力されました。 + +```bash +moto-terraform-ecs-task2-1 | 2026/05/24 06:26:22 queue URL: http://moto:5000/123456789012/moto-test-queue +moto-terraform-ecs-task2-1 | 2026/05/24 06:26:22 start polling SQS... +moto-terraform-ecs-task2-1 | 2026/05/24 06:26:41 skipping message: no records in S3 event (skipping non-S3 message) +moto-terraform-ecs-task2-1 | 2026/05/24 06:36:15 fetching s3://moto-test-json-bucket/data/20260524-153609.json +moto-terraform-ecs-task2-1 | 2026/05/24 06:36:15 received JSON: {"hello": "world!"} +``` + +無事、 S3 → put event → SQS → コンテナでポーリング の流れが動くことを確認できました。 + +# moto を使用する際の制約 + +ここまで動いたとはいえ、moto は実 AWS の完全な置き換えではありません。今回検証して見えた範囲だと、以下のような制約があります。 + +- **状態遷移系は再現対象外** + moto は Lambda 関数自体は Docker コンテナで実行できますが、他サービスのトリガー機構の中で Lambda が呼び出されるフローは実装が限定的です。たとえば Cognito の Custom Auth Flow (認証チャレンジを Lambda で進める仕組み) は moto の Cognito 側にトリガー発火実装が無く動きません。 +- **副作用ありの動作は限定的** + S3 → SQS は動きますが、たとえば SQS → Lambda の自動起動は moto では発火しません。 + +「ECS タスクの実体まで含めた E2E が要る」であったり、「Lambda の自動実行で繋がる pipeline を試したい」となると、LocalStack(場合によっては有料機能)や実 AWS が必要になります。逆に「API レスポンスの整合性」と「S3 → SQS のような限定的な副作用」さえあれば十分、というケースなら moto はかなり気軽に使えます。 + +どのような API および副作用が実装されているかはドキュメントにかなり詳しくまとまっているので、テストしたい AWS・Terraform 操作を満たす API が moto に実装されているかを確認してから moto の採用を決定するのが良いと思います。 + +# まとめ + +この記事では moto に対して Terraform を打ち込み、S3 → SQS → ECS サービス (相当のコンテナ) というイベント駆動の構成をローカル完結で動かしてみました。 + +moto を使用する場合、 ECS タスクの実コンテナ起動や Lambda の自動実行といった「実体を伴う動作」の再現に限界はあります。 +一方で、認証も不要で `docker compose up` だけで立ち上がる軽さは大きな利点です。今回は CI 上での検証は行なっていませんが、「CI 上で、 Terraform コマンドが正しいかのチェックや、簡単な AWS 処理のテストをしたい」といったニーズに一致しているように感じました。 + +LocalStack の Community Edition 廃止以降、「無料で気軽に AWS をエミュレートしたい」というニーズに対する現実的な選択肢として、moto は十分検討に値する印象でした。 + +無料で認証なしで使えるので、皆さんもぜひ気軽に触ってみてください。 diff --git a/source/images/2026/20260528a/image.png b/source/images/2026/20260528a/image.png new file mode 100644 index 0000000000000000000000000000000000000000..cf53041625c9f9eeccceea09e5a97854b5f41e6b GIT binary patch literal 20563 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 literal 0 HcmV?d00001 diff --git a/source/images/2026/20260528a/image_2.png b/source/images/2026/20260528a/image_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf53041625c9f9eeccceea09e5a97854b5f41e6b GIT binary patch literal 20563 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 literal 0 HcmV?d00001 diff --git a/source/images/2026/20260528a/thumbnail.png b/source/images/2026/20260528a/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..80aa729ac5e5eafe6cbb4008deb751e7a5cbd0b4 GIT binary patch literal 14448 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 Date: Thu, 28 May 2026 11:26:52 +0900 Subject: [PATCH 2/4] =?UTF-8?q?Update=20source/=5Fposts/2026/20260528a=5Fm?= =?UTF-8?q?oto=5F=E3=81=AB=5FTerraform=5F=E3=82=92=E6=89=93=E3=81=A1?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E3=80=81=E5=9F=BA=E6=9C=AC=E7=9A=84=E3=81=AA?= =?UTF-8?q?=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E9=A7=86=E5=8B=95=E3=81=AE?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E3=82=92=E5=8B=95=E3=81=8B=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=BF=E3=81=9F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ...01\213\343\201\227\343\201\246\343\201\277\343\201\237.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" index 4507ff1af70..1c5e9f9e290 100644 --- "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" +++ "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" @@ -62,8 +62,8 @@ lede: "Terraform を打ち込むことができる AWS エミュレータの「m この記事では 2 つのことを試します。 -- **試したいこと①**:Terraform を moto に打ち込めるか -- **試したいこと②**:S3 → SQS → ECS サービス のイベント駆動が moto 上で動くか(副作用ありのフローも再現できるか) +- **試したいこと(1)**:Terraform を moto に打ち込めるか +- **試したいこと(2)**:S3 → SQS → ECS サービス のイベント駆動が moto 上で動くか(副作用ありのフローも再現できるか) 普段業務でよく使っている構成を参考に、以下のような構成図のインフラリソースを作成します。 From 135232b6b00561dd7684e84e6d1491058c00de86 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 28 May 2026 11:27:00 +0900 Subject: [PATCH 3/4] =?UTF-8?q?Update=20source/=5Fposts/2026/20260528a=5Fm?= =?UTF-8?q?oto=5F=E3=81=AB=5FTerraform=5F=E3=82=92=E6=89=93=E3=81=A1?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E3=80=81=E5=9F=BA=E6=9C=AC=E7=9A=84=E3=81=AA?= =?UTF-8?q?=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E9=A7=86=E5=8B=95=E3=81=AE?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E3=82=92=E5=8B=95=E3=81=8B=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=BF=E3=81=9F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ...\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" index 1c5e9f9e290..3902754b3fc 100644 --- "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" +++ "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" @@ -98,7 +98,7 @@ services: % ``` -# 試したいこと① : Terraform を moto に打ち込む +# 試したいこと(1) : Terraform を moto に打ち込む ここからが本題のひとつめです。 Terraform の provider が向く先を moto に切り替えていきます。 From ef5d8ea51eaf1055497cc3f87e32bb81fe066f30 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 28 May 2026 11:27:08 +0900 Subject: [PATCH 4/4] =?UTF-8?q?Update=20source/=5Fposts/2026/20260528a=5Fm?= =?UTF-8?q?oto=5F=E3=81=AB=5FTerraform=5F=E3=82=92=E6=89=93=E3=81=A1?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E3=80=81=E5=9F=BA=E6=9C=AC=E7=9A=84=E3=81=AA?= =?UTF-8?q?=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E9=A7=86=E5=8B=95=E3=81=AE?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E3=82=92=E5=8B=95=E3=81=8B=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=BF=E3=81=9F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- ...\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" index 3902754b3fc..fb46baba772 100644 --- "a/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" +++ "b/source/_posts/2026/20260528a_moto_\343\201\253_Terraform_\343\202\222\346\211\223\343\201\241\350\276\274\343\201\277\343\200\201\345\237\272\346\234\254\347\232\204\343\201\252\343\202\244\343\203\231\343\203\263\343\203\210\351\247\206\345\213\225\343\201\256\346\247\213\346\210\220\343\202\222\345\213\225\343\201\213\343\201\227\343\201\246\343\201\277\343\201\237.md" @@ -288,7 +288,7 @@ QueueUrls: - http://localhost:5050/123456789012/moto-test-queue ``` -# 試したいこと② : S3 → SQS → コンテナ のイベント駆動を動かす +# 試したいこと(2) : S3 → SQS → コンテナ のイベント駆動を動かす 次は副作用ありのフローを試します。 S3 にオブジェクトが作成されたら自動的に SQS にイベント通知が飛び、それを ECS サービスが拾って後段で処理する、という構成を moto 上で動かします。