Как использовать экземпляры контейнеров Azure для размещения Ganache
Когда я начал больше узнавать о Web3, я познакомился с Ganache, блокчейном в один клик.
Это отлично подходит для местного развития. Я хотел найти способ использовать его в рамках рабочего процесса PR с Azure Static Web Apps (SWA). Статические веб-приложения Azure могут развернуть временную среду для просмотра изменений во время PR.
Если приложение является распределенным приложением (dApp), для просмотра изменений у вас должны быть развернуты смарт-контракты. Именно здесь я хочу использовать Azure Container Instances (ACI) для размещения временного экземпляра Ganache для развертывания смарт-контрактов во время PR.
Сначала мне нужно было выяснить, как развернуть ACI для размещения образа Ganache Docker из trufflesuite/ganache. Я буду использовать кроссплатформенный Azure CLI и кроссплатформенный PowerShell. Чтобы создать ACI, мне нужна группа ресурсов. Я могу создать новую группу ресурсов или сохранить ее в той же группе, что и SWA. Если бы я хотел создать группу ресурсов для ACI, я мог бы использовать следующую команду:
az group create --resource-group test-ganache --location centralus
Создав группу ресурсов, я развернул ACI с помощью следующей команды:
$aci = az container create --resource-group test-ganache --name ganache --image trufflesuite/ganache:latest --ports 8545 --ip-address Public --output json | ConvertFrom-Json
Приведенная выше команда использует PowerShell для преобразования вывода JSON команды az container create
в объект PowerShell и сохранения его в $aci. Мне это нужно, чтобы я мог получить доступ к IP-адресу ACI. Команда create
предоставляет порт 8545, который является портом по умолчанию, используемым Ganache, и запрашивает, чтобы контейнер получил общедоступный IP-адрес.
Поскольку я запускал эти команды в интерактивном сеансе PowerShell с установленным geth, я подключился к этой цепочке блоков с помощью следующей команды:
geth attach http://$($aci.ipAddress.ip):8545
Если мне нужен доступ к адресу учетной записи или закрытому ключу, я могу просмотреть журналы контейнера. Чтобы получить логи контейнера, выдающие адрес и ключи при его запуске, я использовал следующую команду:
$logs = az container logs --container ganache --resource-group test-ganache --name ganache
С выводом, сохраненным в $logs, я использовал Select-String
CmdLet для получения адреса и закрытого ключа с помощью следующих команд:
# Get first address $address = ($logs | Select-String '\(0\) ([^\(]+) \(').Matches.Groups[1].Value # Get first private key $key = ($logs | Select-String '\(0\) ([^\(]{64,})').Matches.Groups[1].Value
Команды выше получают первый адрес. Если мне нужна другая учетная запись, я просто настраиваю индекс в регулярном выражении с 0 на желаемый индекс. Например, чтобы получить вторую учетную запись, измените \(0\) на \(1\) в приведенных выше командах.
Чтобы очистить свой ACI, я использовал следующую команду:
az container delete --resource-group test-ganache --name ganache
Или, если бы я хотел удалить всю группу ресурсов, я мог бы использовать следующую команду:
az group delete --resource-group test-ganache
Спасибо за прочтение. До скорого!
Первоначально опубликовано на https://www.donovanbrown.com.