Отбросьте DynamoDB, если он существует - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь настроить Dynamodb на своем локальном компьютере, используя docker. Я использую sh для управления инициализацией с помощью файла makefile. Вот файл makefile, который я использую

TABLE_NAME="users"

create_db:
    @aws dynamodb --endpoint-url http://localhost:8042 create-table \
    --table-name $(TABLE_NAME) \
    --attribute-definitions \
        AttributeName=userID,AttributeType=N \
    --key-schema \
        AttributeName=userID,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 >> /dev/null;

drop_db: check_db
    check_db; if [test $$? -eq 1] then \
        @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name $(TABLE_NAME); \
    fi

check_db:
    -@aws dynamodb --endpoint-url http://localhost:8042 describe-table --table-name $(TABLE_NAME);

AWS не дает DROP IF EXISTS таких функций, как MYSQL, поэтому я пытаюсь использовать вывод таблицы описания для проверки наличие стола. Однако получаю следующую ошибку:

check_db; if [test $? -eq 1] then \
        @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name "requests"; \
    fi
/bin/sh: -c: line 0: syntax error near unexpected token `fi'
/bin/sh: -c: line 0: `check_db; if [test $? -eq 1] then     @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name "requests"; fi'
make: *** [drop_db] Error 2

Я новичок в makefile и не могу понять, как исправить ошибку. Что не так в приведенном выше файле makefile? И есть ли лучший способ проверить наличие динамо-стола

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Это не проблема Makefile, это синтаксическая ошибка в вашем сценарии оболочки. Обычно вам нужна точка с запятой перед then.

$ false; if [test $? -eq 1] then echo foo; fi
bash: syntax error near unexpected token `fi'

Вам также необходимо решить использовать [ или test, так как текущий синтаксис также неверен.

$ false; if [test $? -eq 1]; then echo foo; fi

Command '[test' not found, did you mean:

...

Рабочая версия:

$ false; if [ $? -eq 1 ]; then echo foo; fi
foo
0 голосов
/ 07 мая 2020

Я только что сделал этот обходной путь для mimi c Функциональность DROP IF EXISTS с DynamoDB

drop_db: check_db
    @if grep -q -i "active" a.out ; then \
        aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name $(TABLE_NAME) >> /dev/null; \
        rm a.out; \
    fi

check_db:
    @aws dynamodb --endpoint-url http://localhost:8042 describe-table --table-name $(TABLE_NAME) --output text &> a.out;
...