moto 使って AWS サービスを mock する手順をここにメモします。
moto について
moto はテスト用途で使用する AWS のインフラを容易に構築するためのライブラリです。
インストール
$ pip install moto
サンプルコード
s3
s3 用のサンプルコードは以下の通りです。
from unittest import TestCase from src.sample import SampleClass, get_input_params import boto3 import json import os from dotenv import load_dotenv from moto import mock_s3 class TestSampleDownloadFiles(TestCase): @mock_s3 def test_download_files(self): _dict = { "scope": "dummy", "srcBucket": "dummy_bucket", "srcPath": [ "dummy01/sample01.json", ], "remotePath": [ "dummy_distination/sample01.json", ], "description": "dummy_description", } os.environ["PARAMS"] = json.dumps(_dict) sample = SampleClass(get_input_params()) sample.s3 = boto3.resource("s3", region_name="us-east-1") sample.s3_client = boto3.client("s3") sample.s3.create_bucket(Bucket="dummy_bucket") sample.s3.Object("dummy_bucket", "dummy01/sample01.json").put(Body="some text") sample.s3.Object( "dummy_bucket", "dummy01/sample01.json" ).meta.client.head_object( Bucket="dummy_bucket", Key="dummy01/sample01.json", ) sample.set_files() sample.download_files()
secretsmanager
secretsmanager 用のサンプルコードは以下の通りです。
from unittest import TestCase from src.sample import SampleClass, get_input_params import boto3 import io import json import os from dotenv import load_dotenv from moto import mock_secretsmanager from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID class TestSampleSecretsManager(TestCase): @mock_secretsmanager def test_get_secret(self): conn = boto3.client("secretsmanager", region_name="us-west-2") conn.create_secret( Name="sample/dummy/sshKey", SecretString='{"privatekey":"-----BEGIN RSA PRIVATE KEY-----"}', ) os.environ["SECRETS_MANAGER_REGION_NAME"] = "us-west-2" sample = SampleClass(get_input_params()) sample.session = boto3.session.Session() sample.secretsmanagerm_client = sample.session.client( service_name="secretsmanager", region_name="us-west-2", ) privatekey = sample.get_secret()