ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【AWS】テストコード

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()