{"id":485151,"date":"2026-06-26T11:18:14","date_gmt":"2026-06-26T11:18:14","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485151"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485151","title":{"rendered":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 Apache NiFi"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b3\/26f\/8dc\/1b326f8dcd974a9661be4d58c28db889.jpg\" width=\"643\" height=\"362\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1b3\/26f\/8dc\/1b326f8dcd974a9661be4d58c28db889.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b3\/26f\/8dc\/1b326f8dcd974a9661be4d58c28db889.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042f \u0418\u0433\u043e\u0440\u044c \u042e\u0440\u0447\u0435\u043d\u043a\u043e, backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0421\u0431\u0435\u0440\u0430, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 Apache NiFi.<\/p>\n<p>Apache NiFi \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 (\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 ETL \u2014 extract, transform, load). \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: <a href=\"https:\/\/nifi.apache.org\/documentation\/v1\">https:\/\/nifi.apache.org\/documentation\/v1<\/a> (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 2.x, \u043d\u043e \u0442\u0443\u0442 \u0440\u0435\u0447\u044c \u043f\u0440\u043e 1.x). \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u2014 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438\u043b\u0438 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0438\u043b\u0438 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u2014 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438\/\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414, \u0438\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445). \u0422\u043e \u0435\u0441\u0442\u044c ETL \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438, \u0431\u0435\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. NiFi \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e), \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c custom \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u043c\u0438). \u0418\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>Apache NiFi Registry \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432, Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 NiFi. \u0427\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u043f\u0440\u043e\u0449\u0435. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 Registry, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: <a href=\"https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\">https:\/\/nifi.apache.org\/docs\/nifi-registry-docs<\/a>. <\/p>\n<p>\u041e\u0431\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0435\u044e\u0442 REST API.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 NiFi: \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c\u0438 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u0442\u0435\u043d\u0434 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/882\/3a1\/c50\/8823a1c50c3bd083d7fcdc5fc91b6bae.jpg\" width=\"1917\" height=\"869\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/882\/3a1\/c50\/8823a1c50c3bd083d7fcdc5fc91b6bae.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/882\/3a1\/c50\/8823a1c50c3bd083d7fcdc5fc91b6bae.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432 \u2014 \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u044b (\u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b) \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043f\u043b\u043e\u044f, \u043e \u0447\u0451\u043c \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>NiFi \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f low-code \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 Scenario 2, Case 4 (Two NiFi Registries using the NiPyAPI) \u0438\u0437 \u0431\u043b\u043e\u0433\u0430 <a href=\"https:\/\/pierrevillard.com\/2018\/2018-04-09-automate-workflow-deployment-in-apache-nifi-with-the-nifi-registry\/\">https:\/\/pierrevillard.com\/2018\/2018-04-09-automate-workflow-deployment-in-apache-nifi-with-the-nifi-registry\/<\/a> \u0434\u043b\u044f NiFi \u0438 Registry \u0432\u0435\u0440\u0441\u0438\u0438 1.24 (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438). \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 nifi-deployer.jar (\u0434\u0430\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e &#8212; \u00ab\u0434\u0436\u0430\u0440\u043d\u0438\u043a\u00bb) \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e Jenkins pipeline \u0434\u0435\u043f\u043b\u043e\u044f (\u0441\u0430\u043c pipeline \u0442\u0443\u0442 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d, \u043d\u043e \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u044d\u0442\u043e \u2014 git checkout \u0438 Jinja2 templating \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u2014 \u0438\u0445 \u0438\u043c\u0435\u043d\u0430\u043c\u0438). \u041c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 JSON \u0438 HTTP, \u0441\u043c\u044b\u0441\u043b \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043c\u0435\u0442\u043e\u0434\u044b NiFi REST API.<\/p>\n<p>\u0422\u0435\u0440\u043c\u0438\u043d\u044b:<\/p>\n<ol>\n<li>\n<p>\u043f\u043e\u0442\u043e\u043a \u2014 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f (\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0432 Registry) process group \u0432 NiFi<\/p>\n<\/li>\n<li>\n<p>\u0448\u0430\u0431\u043b\u043e\u043d \u2014 \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 NiFi REST API (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438 controller services, \u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0432\u044f\u0437\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 process groups \u0438 \u0442.\u0434.). \u0428\u0430\u0431\u043b\u043e\u043d \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 (1 \u0448\u0430\u0431\u043b\u043e\u043d * N \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 = N \u043f\u043e\u0442\u043e\u043a\u043e\u0432). \u041d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 template \u0432 NiFi, \u043d\u0438\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u0444\u0430\u0439\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441\u043e\u0432\u044b\u0435 (\u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u0430\u0442\u044b, Avro-\u0441\u0445\u0435\u043c\u044b \u0438 \u0442.\u0434. \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438) \u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 (HTTP URL, JDBC connection strings, Kafka brokers \u2014 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Ansible). \u0422\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 variables (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 NiFi \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435, \u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Expression Language \u2014 ${variable}, \u043e\u043d\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c NiFi \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u043e\u0442\u043e\u043a\u0430), \u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 api-data (\u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0432 NiFi, \u0430 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 Expression Language)<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 NiFi + Registry (\u0432 \u0442.\u0447. \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439). \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0430 \u0442\u0443\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e.<\/p>\n<h3>\u041e\u0431\u0449\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430<\/h3>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bb\/a9a\/d1a\/6bba9ad1a8ef8b31952e0af31c8b56a0.jpg\" width=\"780\" height=\"290\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6bb\/a9a\/d1a\/6bba9ad1a8ef8b31952e0af31c8b56a0.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6bb\/a9a\/d1a\/6bba9ad1a8ef8b31952e0af31c8b56a0.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u0435\u043f\u043b\u043e\u044f:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c\/\u043c\u0435\u043d\u044f\u0435\u043c process group \u0432 Dev NiFi (\u0438\u043b\u0438 \u043d\u0430 localhost); \u0433\u0440\u0443\u043f\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Dev Registry (\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c bucket, <a href=\"https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#create-a-bucket\">https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#create-a-bucket<\/a>) \u2014 \u0440\u0443\u0447\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 Registry \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438) \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e (<a href=\"https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#export-a-flow-version\">https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#export-a-flow-version<\/a>), \u043d\u043e Registry \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0432 \u0444\u0430\u0439\u043b\u0435, \u0430 \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 Git diff<\/p>\n<\/li>\n<li>\n<p>\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0430\u0432\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u2014 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b api-data \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 (\u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0430\u0436\u043d\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435 \u2014 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 Expression Language \u0432 NiFi, \u043b\u0443\u0447\u0448\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 variables, \u043f.\u0447. \u043e\u043d\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 ${variable}, \u0438\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430; \u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 Expression Language, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432\u0438\u0434\u0430 [[ api-data ]]; \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u0432 Registry sensitive-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043f\u0430\u0440\u043e\u043b\u0438 \u0438 \u0442.\u0434.), \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b [[ api-data ]] \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u0438\u0434\u0430 #{param} \u043d\u0430 parameter context, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u2014 \u043f\u0440\u043e parameter context\/provider \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f; \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c sensitive \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c propertyDescriptors \u2014 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 properties, \u0432 propertyDescriptors \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a &#171;sensitive&#187;: true, \u0442\u043e\u0433\u0434\u0430 \u0435\u0433\u043e &#171;name&#187; \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0442\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u043e\u043c \u0432 properties)<\/p>\n<\/li>\n<li>\n<p>\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0430\u0432\u0438\u043c \u0444\u0430\u0439\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 (\u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 variables \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Ansible-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0430 {{ var }} &#8212; HTTP URL-\u044b, \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414 \u0438 \u0442.\u0434.; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 api-data \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 api \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 [[ api-data ]])<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Git \u2014 \u0440\u0443\u0447\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0428\u0430\u0431\u043b\u043e\u043d \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0438 \u0432\u0435\u0442\u043a\u0430\u0445, \u043b\u044e\u0431\u043e\u0439 Git flow \u043d\u0430 \u0432\u0430\u0448 \u0432\u043a\u0443\u0441, \u043c\u043e\u0436\u043d\u043e merge, revert, diff, blame<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0432 Prod Registry, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f bucket \u0438 flow \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e (\u0442\u0443\u0442 \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 api-data \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043f\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0432\u0438\u0434\u0430 [[ api-data ]])<\/p>\n<\/li>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c flow \u0438\u0437 Prod Registry \u0432 Prod NiFi (\u0432 \u0442.\u0447. \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0432 NiFi, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f) \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0443\u043d\u043a\u0442\u044b \u0434\u043e \u00ab\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0432 Git\u00bb \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u043e\u043b\u044f\u043c\u0438, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u043e\u043f-\u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442. \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 Jenkins pipeline-\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434 \u043f\u043e\u0442\u043e\u043a \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 (\u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c), \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u2014 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, devops-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b, \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 templates? \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u043f\u0440\u043e\u0449\u0435, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Registry. \u041d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 process group \u0432 NiFi \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u043c \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u043d\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f\/\u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f (\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f), \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f connections \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0438 \u0442.\u0434. \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Registry \u2014 \u044d\u0442\u043e \u0435\u0433\u043e \u043f\u0440\u044f\u043c\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c. \u0410 templates \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043d\u0430 \u043a\u0430\u043d\u0432\u0443 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b. \u041a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f &#171;snippets&#187;,\u00a0 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 NiFi (\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 template, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 NiFi).<\/p>\n<p>Template \u0432 NiFi (\u041d\u0415 \u00ab\u0448\u0430\u0431\u043b\u043e\u043d\u00bb \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438):<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0430 \u043b\u044e\u0431\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c \u043a\u0430\u043d\u0432\u044b (\u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 process groups, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445) \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u043f\u0443\u043d\u043a\u0442 Create template:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f8\/7c5\/4f6\/5f87c54f6944d46276b932efba55f269.jpg\" width=\"780\" height=\"689\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5f8\/7c5\/4f6\/5f87c54f6944d46276b932efba55f269.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f8\/7c5\/4f6\/5f87c54f6944d46276b932efba55f269.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 Templates:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ac\/859\/16c\/5ac85916c707f3398aac3fd9997ff7f8.jpg\" width=\"500\" height=\"789\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/5ac\/859\/16c\/5ac85916c707f3398aac3fd9997ff7f8.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5ac\/859\/16c\/5ac85916c707f3398aac3fd9997ff7f8.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2aa\/9cb\/ee5\/2aa9cbee54f638a9e77814239fbf083d.jpg\" width=\"650\" height=\"340\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2aa\/9cb\/ee5\/2aa9cbee54f638a9e77814239fbf083d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2aa\/9cb\/ee5\/2aa9cbee54f638a9e77814239fbf083d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Template \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043a\u0430\u043d\u0432\u0443:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf1\/70d\/458\/cf170d45863599eefb958ee8e9259e51.jpg\" width=\"800\" height=\"111\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/cf1\/70d\/458\/cf170d45863599eefb958ee8e9259e51.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf1\/70d\/458\/cf170d45863599eefb958ee8e9259e51.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/20f\/eb1\/82c\/20feb182c4983fcaba0e6cb7723f8d53.jpg\" width=\"500\" height=\"417\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/20f\/eb1\/82c\/20feb182c4983fcaba0e6cb7723f8d53.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/20f\/eb1\/82c\/20feb182c4983fcaba0e6cb7723f8d53.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0433\u0440\u0443\u043f\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 REST API \u0432 \u0411\u0414. \u041d\u0430 Dev-\u0441\u0442\u0435\u043d\u0434\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u043e\u0442\u043e\u043a:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b6e\/0c7\/b9f\/b6e0c7b9f1c360878a2c6d2c669a2ee6.jpg\" width=\"1529\" height=\"559\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b6e\/0c7\/b9f\/b6e0c7b9f1c360878a2c6d2c669a2ee6.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b6e\/0c7\/b9f\/b6e0c7b9f1c360878a2c6d2c669a2ee6.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434 dev\/prod \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435.<\/p>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (REST API) \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 GetHTTP, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u043c Expression Language:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb8\/2c9\/c6f\/eb82c9c6f7d2996bb7d8e1f4282c34bd.jpg\" width=\"780\" height=\"208\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/eb8\/2c9\/c6f\/eb82c9c6f7d2996bb7d8e1f4282c34bd.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb8\/2c9\/c6f\/eb82c9c6f7d2996bb7d8e1f4282c34bd.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043f\u0430\u0440\u043e\u043b\u0438) \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0431\u0435\u0437 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 parameter context (\u0437\u0430\u0449\u0438\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0432 Web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u2014 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u00abSensitive value set\u00bb \u043f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430):<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/41e\/93c\/ec4\/41e93cec4e5b6ba9c3dcc0baa68a7ac4.jpg\" width=\"879\" height=\"245\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/41e\/93c\/ec4\/41e93cec4e5b6ba9c3dcc0baa68a7ac4.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/41e\/93c\/ec4\/41e93cec4e5b6ba9c3dcc0baa68a7ac4.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/089\/428\/eca\/089428eca50bc0aab635359268dda0ae.jpg\" width=\"901\" height=\"510\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/089\/428\/eca\/089428eca50bc0aab635359268dda0ae.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/089\/428\/eca\/089428eca50bc0aab635359268dda0ae.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u0434\u0440\u0435\u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (REST API) \u0438 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 truststore \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 variables (\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Expression Language; \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u0445 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b):<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3d\/d41\/f6e\/c3dd41f6ec95ca684d0ccc39c97fc59e.jpg\" width=\"845\" height=\"275\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c3d\/d41\/f6e\/c3dd41f6ec95ca684d0ccc39c97fc59e.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3d\/d41\/f6e\/c3dd41f6ec95ca684d0ccc39c97fc59e.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u00a0\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u0442\u043e\u043a \u0432 Dev Registry:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f49\/2b0\/cb9\/f492b0cb9758bf222a50f5e0e4781a3e.jpg\" width=\"780\" height=\"232\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f49\/2b0\/cb9\/f492b0cb9758bf222a50f5e0e4781a3e.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f49\/2b0\/cb9\/f492b0cb9758bf222a50f5e0e4781a3e.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8db\/d90\/f17\/8dbd90f1716502fc096ae523785a9715.jpg\" width=\"782\" height=\"581\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/8db\/d90\/f17\/8dbd90f1716502fc096ae523785a9715.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8db\/d90\/f17\/8dbd90f1716502fc096ae523785a9715.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d4\/2ed\/673\/0d42ed673cdb9a1471151c85535b7ea6.jpg\" width=\"780\" height=\"403\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0d4\/2ed\/673\/0d42ed673cdb9a1471151c85535b7ea6.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0d4\/2ed\/673\/0d42ed673cdb9a1471151c85535b7ea6.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 Dev Registry:<\/p>\n<p><code>java -jar nifi-deployer-0.36-SNAPSHOT.jar -e bucket.name=default flow.name=http-2-db-dev export.path=.\/http-2-db-1.24.json parent.group.id=cba7fcb9-0186-1000-0000-0000451bf611 nifi.url=https:\/\/...\/nifi-api registry.url=https:\/\/...\/nifi-registry-api user=... password=... ssl.keystore.filename=.\/nifi.p12<\/code><\/p>\n<p>\u041b\u043e\u0433 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>19.05.2026 14:39:02.142 [main] INFO ApiRegistry - get bucket ID for bucket name default19.05.2026 14:39:02.142 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets19.05.2026 14:39:03.384 [main] INFO ApiRegistry - using bucket 2cf0ac20-3ccd-41ed-97c1-97baecf45dfc19.05.2026 14:39:03.384 [main] INFO ApiRegistry - get flow ID for flow name http-2-db-dev and bucketId 2cf0ac20-3ccd-41ed-97c1-97baecf45dfc19.05.2026 14:39:03.384 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows19.05.2026 14:39:03.699 [main] INFO ApiRegistry - using flow 20be5260-9249-4626-99d8-e95b7286836e19.05.2026 14:39:03.700 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows\/20be5260-9249-4626-99d8-e95b7286836e\/versions\/latest19.05.2026 14:39:04.275 [Thread-21] INFO getVersionControlInfo$ - get version control info for http-2-db-dev recursively from cba7fcb9-0186-1000-0000-0000451bf61119.05.2026 14:39:20.650 [main] INFO ApiNiFiGeneric - get variable registry from process group c9143fc0-c492-3fa7-95ae-81c7de3245af19.05.2026 14:39:20.650 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-api\/process-groups\/c9143fc0-c492-3fa7-95ae-81c7de3245af\/variable-registry19.05.2026 14:39:20.854 [main] INFO getMetadataFromNiFi$ - get nested process groups for c9143fc0-c492-3fa7-95ae-81c7de3245af19.05.2026 14:39:20.855 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-api\/flow\/process-groups\/c9143fc0-c492-3fa7-95ae-81c7de3245af19.05.2026 14:39:20.990 [main] INFO writeTemplateAndMetadata$ - write template http-2-db-1.24.json19.05.2026 14:39:21.003 [main] INFO writeMetadata$ - write metadata http-2-db-1.24-var.json19.05.2026 14:39:21.062 [main] INFO exportTemplateAndMetadataFromRegistry$ - version 1 exported<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430:<\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a REST API \u043d\u0430 Dev-\u0441\u0442\u0435\u043d\u0434\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u00abrest_api_test_user\u00bb, \u043d\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0435\u043d\u0434\u0430\u0445 \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u2014 \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e Username \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 GetHTTP \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Expression Language (\u0437\u0430\u0434\u0430\u043d\u043e \u0432 NiFi \u044f\u0432\u043d\u043e, \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 variable), \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432\u0438\u0434\u0430 [[ restApiUser ]] (\u0441\u0442\u0440\u043e\u043a\u0430 685 \u2014 &#171;Username&#187; : &#171;[[ restApiUser ]]&#187;). \u041a\u043b\u044e\u0447 restApiUser \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430 (\u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0443\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430). \u0414\u0432\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 NiFi \u0432 Registry, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u044d\u0442\u043e \u043f\u0430\u0440\u043e\u043b\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0439 HTTP-\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 REST API, \u043f\u0430\u0440\u043e\u043b\u044c \u0411\u0414 \u0438 \u043f\u0430\u0440\u043e\u043b\u044c truststore \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f SSL-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 REST API. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 GetHTTP, \u0432 controller service DBCPConnectionPool \u0438 StandardSSLContextService. \u041d\u0430\u0439\u0434\u0451\u043c \u0438\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 &#171;sensitive&#187; : true. \u041e\u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 propertyDescriptors \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0418\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 name \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043a\u043b\u044e\u0447, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 properties, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0436\u0435\u043c \u0442\u0443 \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e [[ \u2026 ]] \u0441 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043f\u0430\u0440\u043e\u043b\u044f REST API \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c restApiPassword. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 properties \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 GetHTTP \u0434\u043e\u0431\u0430\u0432\u0438\u043c &#171;Password&#187; : &#171;[[ restApiPassword ]]&#187;<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u0444\u0430\u0439\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ol>\n<li>\n<p>\u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 (name \u0438\u0437 [[ name ]]) \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 api-data \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043a\u0430\u0436\u0435\u043c value \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u0432\u043c\u0435\u0441\u0442\u043e [[ name ]]<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u043f\u043b\u043e\u044f \u043d\u0443\u0436\u043d\u044b \u043e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u2014 \u0438\u043c\u044f \u043f\u043e\u0442\u043e\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 NiFi Registry, \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 NiFi. \u042d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0445 \u0438\u043c\u0435\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0445 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438: registryFlowName = http-2-db, processGroupPath = tmp&gt;&gt;prod&gt;&gt;http-2-db. \u042d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 NiFi, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438\u0441\u044c \u0434\u0432\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{  \"bucket\" : {    \"allowBundleRedeploy\" : false,    \"allowPublicRead\" : false,    \"createdTimestamp\" : 1690978653562,    \"description\" : \"\",    \"identifier\" : \"2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\",    \"link\" : {      \"href\" : \"buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\",      \"params\" : {        \"rel\" : \"self\"      }    },    \"name\" : \"default\",    \"permissions\" : {      \"canDelete\" : true,      \"canRead\" : true,      \"canWrite\" : true    }  },  \"externalControllerServices\" : { },  \"flow\" : {    \"bucketIdentifier\" : \"2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\",    \"bucketName\" : \"default\",    \"createdTimestamp\" : 1779182540682,    \"description\" : \"\",    \"identifier\" : \"20be5260-9249-4626-99d8-e95b7286836e\",    \"link\" : {      \"href\" : \"buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows\/20be5260-9249-4626-99d8-e95b7286836e\",      \"params\" : {        \"rel\" : \"self\"      }    },    \"modifiedTimestamp\" : 1779182541552,    \"name\" : \"http-2-db-dev\",    \"type\" : \"Flow\",    \"versionCount\" : 1  },  \"flowContents\" : {    \"comments\" : \"\",    \"componentType\" : \"PROCESS_GROUP\",    \"connections\" : [ {      \"backPressureDataSizeThreshold\" : \"1 GB\",      \"backPressureObjectThreshold\" : 10000,      \"bends\" : [ {        \"x\" : 1152.0,        \"y\" : 480.0      } ],      \"componentType\" : \"CONNECTION\",      \"destination\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"b0cf515e-e112-3ed4-8ebf-cabcb17e004c\",        \"instanceIdentifier\" : \"b0cf515e-e112-3ed4-8c40-e0d8585aef1b\",        \"name\" : \"Funnel\",        \"type\" : \"FUNNEL\"      },      \"flowFileExpiration\" : \"0 sec\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"c773dc4f-2492-3c20-875c-574bc3782390\",      \"instanceIdentifier\" : \"c773dc4f-2492-3c20-8278-9856e76bcb46\",      \"labelIndex\" : 1,      \"loadBalanceCompression\" : \"DO_NOT_COMPRESS\",      \"loadBalanceStrategy\" : \"DO_NOT_LOAD_BALANCE\",      \"name\" : \"\",      \"partitioningAttribute\" : \"\",      \"prioritizers\" : [ ],      \"selectedRelationships\" : [ \"failure\", \"retry\" ],      \"source\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"32d35b0d-daab-3189-9f86-71fbe584a6c7\",        \"instanceIdentifier\" : \"32d35b0d-daab-3189-b8ae-148fcd2e1c26\",        \"name\" : \"PutSQL\",        \"type\" : \"PROCESSOR\"      },      \"zIndex\" : 0    }, {      \"backPressureDataSizeThreshold\" : \"1 GB\",      \"backPressureObjectThreshold\" : 10000,      \"bends\" : [ {        \"x\" : 848.0,        \"y\" : 408.0      } ],      \"componentType\" : \"CONNECTION\",      \"destination\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"b0cf515e-e112-3ed4-8ebf-cabcb17e004c\",        \"instanceIdentifier\" : \"b0cf515e-e112-3ed4-8c40-e0d8585aef1b\",        \"name\" : \"Funnel\",        \"type\" : \"FUNNEL\"      },      \"flowFileExpiration\" : \"0 sec\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"fd782ed4-aef7-3e38-8248-01640a2604fa\",      \"instanceIdentifier\" : \"fd782ed4-aef7-3e38-bfa8-58ab86467cb2\",      \"labelIndex\" : 1,      \"loadBalanceCompression\" : \"DO_NOT_COMPRESS\",      \"loadBalanceStrategy\" : \"DO_NOT_LOAD_BALANCE\",      \"name\" : \"\",      \"partitioningAttribute\" : \"\",      \"prioritizers\" : [ ],      \"selectedRelationships\" : [ \"unmatched\" ],      \"source\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"32b96eda-8796-3cbd-8845-9c13d368f451\",        \"instanceIdentifier\" : \"32b96eda-8796-3cbd-8320-bb8c728aeaf1\",        \"name\" : \"ExtractText\",        \"type\" : \"PROCESSOR\"      },      \"zIndex\" : 0    }, {      \"backPressureDataSizeThreshold\" : \"1 GB\",      \"backPressureObjectThreshold\" : 10000,      \"bends\" : [ {        \"x\" : 648.0,        \"y\" : 336.0      } ],      \"componentType\" : \"CONNECTION\",      \"destination\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"32b96eda-8796-3cbd-8845-9c13d368f451\",        \"instanceIdentifier\" : \"32b96eda-8796-3cbd-8320-bb8c728aeaf1\",        \"name\" : \"ExtractText\",        \"type\" : \"PROCESSOR\"      },      \"flowFileExpiration\" : \"0 sec\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"aad4cb51-0cdd-3e21-aba6-16b3a82cb98f\",      \"instanceIdentifier\" : \"aad4cb51-0cdd-3e21-9176-6b0862368880\",      \"labelIndex\" : 1,      \"loadBalanceCompression\" : \"DO_NOT_COMPRESS\",      \"loadBalanceStrategy\" : \"DO_NOT_LOAD_BALANCE\",      \"name\" : \"\",      \"partitioningAttribute\" : \"\",      \"prioritizers\" : [ ],      \"selectedRelationships\" : [ \"success\" ],      \"source\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"e70f7c86-42f6-352a-b9b4-f02c9678ab24\",        \"instanceIdentifier\" : \"e70f7c86-42f6-352a-866a-17792a25c0bb\",        \"name\" : \"GetHTTP\",        \"type\" : \"PROCESSOR\"      },      \"zIndex\" : 0    }, {      \"backPressureDataSizeThreshold\" : \"1 GB\",      \"backPressureObjectThreshold\" : 10000,      \"bends\" : [ {        \"x\" : 1088.0,        \"y\" : 336.0      } ],      \"componentType\" : \"CONNECTION\",      \"destination\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"32d35b0d-daab-3189-9f86-71fbe584a6c7\",        \"instanceIdentifier\" : \"32d35b0d-daab-3189-b8ae-148fcd2e1c26\",        \"name\" : \"PutSQL\",        \"type\" : \"PROCESSOR\"      },      \"flowFileExpiration\" : \"0 sec\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"3bff9b4b-de39-38cd-9d35-684df2049fd3\",      \"instanceIdentifier\" : \"3bff9b4b-de39-38cd-b18f-cb7e8c81d733\",      \"labelIndex\" : 1,      \"loadBalanceCompression\" : \"DO_NOT_COMPRESS\",      \"loadBalanceStrategy\" : \"DO_NOT_LOAD_BALANCE\",      \"name\" : \"\",      \"partitioningAttribute\" : \"\",      \"prioritizers\" : [ ],      \"selectedRelationships\" : [ \"matched\" ],      \"source\" : {        \"comments\" : \"\",        \"groupId\" : \"ad86f407-8631-318b-8230-76d1d7164043\",        \"id\" : \"32b96eda-8796-3cbd-8845-9c13d368f451\",        \"instanceIdentifier\" : \"32b96eda-8796-3cbd-8320-bb8c728aeaf1\",        \"name\" : \"ExtractText\",        \"type\" : \"PROCESSOR\"      },      \"zIndex\" : 0    } ],    \"controllerServices\" : [ {      \"bulletinLevel\" : \"WARN\",      \"bundle\" : {        \"artifact\" : \"nifi-dbcp-service-nar\",        \"group\" : \"org.apache.nifi\",        \"version\" : \"1.24.0\"      },      \"comments\" : \"\",      \"componentType\" : \"CONTROLLER_SERVICE\",      \"controllerServiceApis\" : [ {        \"bundle\" : {          \"artifact\" : \"nifi-standard-services-api-nar\",          \"group\" : \"org.apache.nifi\",          \"version\" : \"1.24.0\"        },        \"type\" : \"org.apache.nifi.dbcp.DBCPService\"      } ],      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"bed8843c-c85e-3b34-844d-0804c6d35999\",      \"instanceIdentifier\" : \"bed8843c-c85e-3b34-887a-548f4db09724\",      \"name\" : \"DBCPConnectionPool\",      \"properties\" : {        \"dbcp-min-idle-conns\" : \"0\",        \"Max Wait Time\" : \"500 millis\",        \"Database Driver Class Name\" : \"org.postgresql.Driver\",        \"dbcp-min-evictable-idle-time\" : \"30 mins\",        \"Max Total Connections\" : \"8\",        \"dbcp-max-conn-lifetime\" : \"-1\",        \"Database Connection URL\" : \"${jdbcUrl}\",        \"dbcp-time-between-eviction-runs\" : \"-1\",        \"Database User\" : \"${dbUser}\",        \"dbcp-soft-min-evictable-idle-time\" : \"-1\",        \"database-driver-locations\" : \"\/opt\/drivers\/postgres\",        \"dbcp-max-idle-conns\" : \"8\",        \"Password\" : \"[[ dbPassword ]]\"      },      \"propertyDescriptors\" : {        \"kerberos-password\" : {          \"displayName\" : \"Kerberos Password\",          \"identifiesControllerService\" : false,          \"name\" : \"kerberos-password\",          \"sensitive\" : true        },        \"dbcp-min-idle-conns\" : {          \"displayName\" : \"Minimum Idle Connections\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-min-idle-conns\",          \"sensitive\" : false        },        \"Max Wait Time\" : {          \"displayName\" : \"Max Wait Time\",          \"identifiesControllerService\" : false,          \"name\" : \"Max Wait Time\",          \"sensitive\" : false        },        \"Database Driver Class Name\" : {          \"displayName\" : \"Database Driver Class Name\",          \"identifiesControllerService\" : false,          \"name\" : \"Database Driver Class Name\",          \"sensitive\" : false        },        \"dbcp-min-evictable-idle-time\" : {          \"displayName\" : \"Minimum Evictable Idle Time\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-min-evictable-idle-time\",          \"sensitive\" : false        },        \"kerberos-principal\" : {          \"displayName\" : \"Kerberos Principal\",          \"identifiesControllerService\" : false,          \"name\" : \"kerberos-principal\",          \"sensitive\" : false        },        \"Max Total Connections\" : {          \"displayName\" : \"Max Total Connections\",          \"identifiesControllerService\" : false,          \"name\" : \"Max Total Connections\",          \"sensitive\" : false        },        \"kerberos-credentials-service\" : {          \"displayName\" : \"Kerberos Credentials Service\",          \"identifiesControllerService\" : true,          \"name\" : \"kerberos-credentials-service\",          \"sensitive\" : false        },        \"dbcp-max-conn-lifetime\" : {          \"displayName\" : \"Max Connection Lifetime\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-max-conn-lifetime\",          \"sensitive\" : false        },        \"Validation-query\" : {          \"displayName\" : \"Validation query\",          \"identifiesControllerService\" : false,          \"name\" : \"Validation-query\",          \"sensitive\" : false        },        \"Database Connection URL\" : {          \"displayName\" : \"Database Connection URL\",          \"identifiesControllerService\" : false,          \"name\" : \"Database Connection URL\",          \"sensitive\" : false        },        \"dbcp-time-between-eviction-runs\" : {          \"displayName\" : \"Time Between Eviction Runs\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-time-between-eviction-runs\",          \"sensitive\" : false        },        \"Database User\" : {          \"displayName\" : \"Database User\",          \"identifiesControllerService\" : false,          \"name\" : \"Database User\",          \"sensitive\" : false        },        \"kerberos-user-service\" : {          \"displayName\" : \"Kerberos User Service\",          \"identifiesControllerService\" : true,          \"name\" : \"kerberos-user-service\",          \"sensitive\" : false        },        \"dbcp-soft-min-evictable-idle-time\" : {          \"displayName\" : \"Soft Minimum Evictable Idle Time\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-soft-min-evictable-idle-time\",          \"sensitive\" : false        },        \"database-driver-locations\" : {          \"displayName\" : \"Database Driver Location(s)\",          \"identifiesControllerService\" : false,          \"name\" : \"database-driver-locations\",          \"resourceDefinition\" : {            \"cardinality\" : \"MULTIPLE\",            \"resourceTypes\" : [ \"URL\", \"FILE\", \"DIRECTORY\" ]          },          \"sensitive\" : false        },        \"dbcp-max-idle-conns\" : {          \"displayName\" : \"Max Idle Connections\",          \"identifiesControllerService\" : false,          \"name\" : \"dbcp-max-idle-conns\",          \"sensitive\" : false        },        \"Password\" : {          \"displayName\" : \"Password\",          \"identifiesControllerService\" : false,          \"name\" : \"Password\",          \"sensitive\" : true        }      },      \"scheduledState\" : \"DISABLED\",      \"type\" : \"org.apache.nifi.dbcp.DBCPConnectionPool\"    }, {      \"bulletinLevel\" : \"WARN\",      \"bundle\" : {        \"artifact\" : \"nifi-ssl-context-service-nar\",        \"group\" : \"org.apache.nifi\",        \"version\" : \"1.24.0\"      },      \"comments\" : \"\",      \"componentType\" : \"CONTROLLER_SERVICE\",      \"controllerServiceApis\" : [ {        \"bundle\" : {          \"artifact\" : \"nifi-standard-services-api-nar\",          \"group\" : \"org.apache.nifi\",          \"version\" : \"1.24.0\"        },        \"type\" : \"org.apache.nifi.ssl.SSLContextService\"      } ],      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"d1c57bde-4f3b-3ad9-ae74-5b44fb96cd0a\",      \"instanceIdentifier\" : \"d1c57bde-4f3b-3ad9-9800-79565a41624c\",      \"name\" : \"StandardSSLContextService\",      \"properties\" : {        \"Truststore Type\" : \"JKS\",        \"SSL Protocol\" : \"TLSv1.3\",        \"Truststore Filename\" : \"${truststoreFilename}\",        \"Truststore Password\" : \"[[ truststorePassword ]]\"      },      \"propertyDescriptors\" : {        \"Truststore Type\" : {          \"displayName\" : \"Truststore Type\",          \"identifiesControllerService\" : false,          \"name\" : \"Truststore Type\",          \"sensitive\" : false        },        \"SSL Protocol\" : {          \"displayName\" : \"TLS Protocol\",          \"identifiesControllerService\" : false,          \"name\" : \"SSL Protocol\",          \"sensitive\" : false        },        \"Keystore Type\" : {          \"displayName\" : \"Keystore Type\",          \"identifiesControllerService\" : false,          \"name\" : \"Keystore Type\",          \"sensitive\" : false        },        \"Truststore Filename\" : {          \"displayName\" : \"Truststore Filename\",          \"identifiesControllerService\" : false,          \"name\" : \"Truststore Filename\",          \"resourceDefinition\" : {            \"cardinality\" : \"SINGLE\",            \"resourceTypes\" : [ \"FILE\" ]          },          \"sensitive\" : false        },        \"Keystore Password\" : {          \"displayName\" : \"Keystore Password\",          \"identifiesControllerService\" : false,          \"name\" : \"Keystore Password\",          \"sensitive\" : true        },        \"key-password\" : {          \"displayName\" : \"Key Password\",          \"identifiesControllerService\" : false,          \"name\" : \"key-password\",          \"sensitive\" : true        },        \"Truststore Password\" : {          \"displayName\" : \"Truststore Password\",          \"identifiesControllerService\" : false,          \"name\" : \"Truststore Password\",          \"sensitive\" : true        },        \"Keystore Filename\" : {          \"displayName\" : \"Keystore Filename\",          \"identifiesControllerService\" : false,          \"name\" : \"Keystore Filename\",          \"resourceDefinition\" : {            \"cardinality\" : \"SINGLE\",            \"resourceTypes\" : [ \"FILE\" ]          },          \"sensitive\" : false        }      },      \"scheduledState\" : \"DISABLED\",      \"type\" : \"org.apache.nifi.ssl.StandardSSLContextService\"    } ],    \"defaultBackPressureDataSizeThreshold\" : \"1 GB\",    \"defaultBackPressureObjectThreshold\" : 10000,    \"defaultFlowFileExpiration\" : \"0 sec\",    \"flowFileConcurrency\" : \"UNBOUNDED\",    \"flowFileOutboundPolicy\" : \"STREAM_WHEN_AVAILABLE\",    \"funnels\" : [ {      \"componentType\" : \"FUNNEL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"b0cf515e-e112-3ed4-8ebf-cabcb17e004c\",      \"instanceIdentifier\" : \"b0cf515e-e112-3ed4-8c40-e0d8585aef1b\",      \"position\" : {        \"x\" : 824.0,        \"y\" : 456.0      }    } ],    \"identifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",    \"inputPorts\" : [ ],    \"instanceIdentifier\" : \"c9143fc0-c492-3fa7-95ae-81c7de3245af\",    \"labels\" : [ {      \"componentType\" : \"LABEL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"height\" : 32.0,      \"identifier\" : \"46bed543-1d68-3b65-ab16-31d5f1da3581\",      \"instanceIdentifier\" : \"46bed543-1d68-3b65-818e-320e3ed71636\",      \"label\" : \"1. \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u044b\u0435 \u0438\u0437 REST API\",      \"position\" : {        \"x\" : 248.0,        \"y\" : 120.0      },      \"style\" : {        \"font-size\" : \"16px\"      },      \"width\" : 256.0,      \"zIndex\" : 0    }, {      \"componentType\" : \"LABEL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"height\" : 32.0,      \"identifier\" : \"dec730c0-3afc-3d8d-9146-9b6835417fb4\",      \"instanceIdentifier\" : \"dec730c0-3afc-3d8d-a59b-abdef726e8cf\",      \"label\" : \"3. \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414\",      \"position\" : {        \"x\" : 1136.0,        \"y\" : 120.0      },      \"style\" : {        \"font-size\" : \"16px\"      },      \"width\" : 312.0,      \"zIndex\" : 0    }, {      \"componentType\" : \"LABEL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"height\" : 48.0,      \"identifier\" : \"c5f3ebbc-ac78-3f57-9a08-167295392e1d\",      \"instanceIdentifier\" : \"c5f3ebbc-ac78-3f57-aa21-052f9e0e4cfd\",      \"label\" : \"2. \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \\n\u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 flow file-\u0430 (\u0434\u043b\u044f PutSQL)\",      \"position\" : {        \"x\" : 672.0,        \"y\" : 104.0      },      \"style\" : {        \"font-size\" : \"16px\"      },      \"width\" : 272.0,      \"zIndex\" : 0    } ],    \"logFileSuffix\" : \"\",    \"name\" : \"http-2-db-dev\",    \"outputPorts\" : [ ],    \"position\" : {      \"x\" : 659.999887235238,      \"y\" : 320.00000615823    },    \"processGroups\" : [ ],    \"processors\" : [ {      \"autoTerminatedRelationships\" : [ ],      \"backoffMechanism\" : \"PENALIZE_FLOWFILE\",      \"bulletinLevel\" : \"WARN\",      \"bundle\" : {        \"artifact\" : \"nifi-standard-nar\",        \"group\" : \"org.apache.nifi\",        \"version\" : \"1.24.0\"      },      \"comments\" : \"\",      \"componentType\" : \"PROCESSOR\",      \"concurrentlySchedulableTaskCount\" : 0,      \"executionNode\" : \"ALL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"32b96eda-8796-3cbd-8845-9c13d368f451\",      \"instanceIdentifier\" : \"32b96eda-8796-3cbd-8320-bb8c728aeaf1\",      \"maxBackoffPeriod\" : \"10 mins\",      \"name\" : \"ExtractText\",      \"penaltyDuration\" : \"30 sec\",      \"position\" : {        \"x\" : 672.0,        \"y\" : 152.0      },      \"properties\" : {        \"Enable Unicode Predefined Character Classes\" : \"false\",        \"Permit Whitespace and Comments in Pattern\" : \"false\",        \"Enable Unicode-aware Case Folding\" : \"false\",        \"sql.args.1.value\" : \"(?s)(^.*$)\",        \"Enable DOTALL Mode\" : \"false\",        \"Enable Unix Lines Mode\" : \"false\",        \"extract-text-enable-named-groups\" : \"false\",        \"Maximum Buffer Size\" : \"10 MB\",        \"Enable Canonical Equivalence\" : \"false\",        \"Enable Case-insensitive Matching\" : \"false\",        \"Enable Multiline Mode\" : \"false\",        \"Maximum Capture Group Length\" : \"1024\",        \"sql.args.1.type\" : \"12\",        \"Enable Literal Parsing of the Pattern\" : \"false\",        \"Character Set\" : \"UTF-8\",        \"Include Capture Group 0\" : \"true\",        \"extract-text-enable-repeating-capture-group\" : \"false\"      },      \"propertyDescriptors\" : {        \"Enable Unicode Predefined Character Classes\" : {          \"displayName\" : \"Enable Unicode Predefined Character Classes\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Unicode Predefined Character Classes\",          \"sensitive\" : false        },        \"Permit Whitespace and Comments in Pattern\" : {          \"displayName\" : \"Permit Whitespace and Comments in Pattern\",          \"identifiesControllerService\" : false,          \"name\" : \"Permit Whitespace and Comments in Pattern\",          \"sensitive\" : false        },        \"Enable Unicode-aware Case Folding\" : {          \"displayName\" : \"Enable Unicode-aware Case Folding\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Unicode-aware Case Folding\",          \"sensitive\" : false        },        \"sql.args.1.value\" : {          \"displayName\" : \"sql.args.1.value\",          \"identifiesControllerService\" : false,          \"name\" : \"sql.args.1.value\",          \"sensitive\" : false        },        \"Enable DOTALL Mode\" : {          \"displayName\" : \"Enable DOTALL Mode\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable DOTALL Mode\",          \"sensitive\" : false        },        \"Enable Unix Lines Mode\" : {          \"displayName\" : \"Enable Unix Lines Mode\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Unix Lines Mode\",          \"sensitive\" : false        },        \"extract-text-enable-named-groups\" : {          \"displayName\" : \"Enable named group support\",          \"identifiesControllerService\" : false,          \"name\" : \"extract-text-enable-named-groups\",          \"sensitive\" : false        },        \"Maximum Buffer Size\" : {          \"displayName\" : \"Maximum Buffer Size\",          \"identifiesControllerService\" : false,          \"name\" : \"Maximum Buffer Size\",          \"sensitive\" : false        },        \"Enable Canonical Equivalence\" : {          \"displayName\" : \"Enable Canonical Equivalence\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Canonical Equivalence\",          \"sensitive\" : false        },        \"Enable Case-insensitive Matching\" : {          \"displayName\" : \"Enable Case-insensitive Matching\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Case-insensitive Matching\",          \"sensitive\" : false        },        \"Enable Multiline Mode\" : {          \"displayName\" : \"Enable Multiline Mode\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Multiline Mode\",          \"sensitive\" : false        },        \"Maximum Capture Group Length\" : {          \"displayName\" : \"Maximum Capture Group Length\",          \"identifiesControllerService\" : false,          \"name\" : \"Maximum Capture Group Length\",          \"sensitive\" : false        },        \"sql.args.1.type\" : {          \"displayName\" : \"sql.args.1.type\",          \"identifiesControllerService\" : false,          \"name\" : \"sql.args.1.type\",          \"sensitive\" : false        },        \"Enable Literal Parsing of the Pattern\" : {          \"displayName\" : \"Enable Literal Parsing of the Pattern\",          \"identifiesControllerService\" : false,          \"name\" : \"Enable Literal Parsing of the Pattern\",          \"sensitive\" : false        },        \"Character Set\" : {          \"displayName\" : \"Character Set\",          \"identifiesControllerService\" : false,          \"name\" : \"Character Set\",          \"sensitive\" : false        },        \"Include Capture Group 0\" : {          \"displayName\" : \"Include Capture Group 0\",          \"identifiesControllerService\" : false,          \"name\" : \"Include Capture Group 0\",          \"sensitive\" : false        },        \"extract-text-enable-repeating-capture-group\" : {          \"displayName\" : \"Enable repeating capture group\",          \"identifiesControllerService\" : false,          \"name\" : \"extract-text-enable-repeating-capture-group\",          \"sensitive\" : false        }      },      \"retriedRelationships\" : [ ],      \"retryCount\" : 10,      \"runDurationMillis\" : 0,      \"scheduledState\" : \"ENABLED\",      \"schedulingPeriod\" : \"0 sec\",      \"schedulingStrategy\" : \"EVENT_DRIVEN\",      \"style\" : { },      \"type\" : \"org.apache.nifi.processors.standard.ExtractText\",      \"yieldDuration\" : \"1 sec\"    }, {      \"autoTerminatedRelationships\" : [ ],      \"backoffMechanism\" : \"PENALIZE_FLOWFILE\",      \"bulletinLevel\" : \"WARN\",      \"bundle\" : {        \"artifact\" : \"nifi-standard-nar\",        \"group\" : \"org.apache.nifi\",        \"version\" : \"1.24.0\"      },      \"comments\" : \"\",      \"componentType\" : \"PROCESSOR\",      \"concurrentlySchedulableTaskCount\" : 1,      \"executionNode\" : \"PRIMARY\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"e70f7c86-42f6-352a-b9b4-f02c9678ab24\",      \"instanceIdentifier\" : \"e70f7c86-42f6-352a-866a-17792a25c0bb\",      \"maxBackoffPeriod\" : \"10 mins\",      \"name\" : \"GetHTTP\",      \"penaltyDuration\" : \"30 sec\",      \"position\" : {        \"x\" : 248.0,        \"y\" : 152.0      },      \"properties\" : {        \"redirect-cookie-policy\" : \"default\",        \"Filename\" : \"file\",        \"URL\" : \"${url}\",        \"Connection Timeout\" : \"30 sec\",        \"Data Timeout\" : \"30 sec\",        \"SSL Context Service\" : \"d1c57bde-4f3b-3ad9-ae74-5b44fb96cd0a\",        \"Username\" : \"[[ restApiUser ]]\",        \"Follow Redirects\" : \"false\",        \"Password\" : \"[[ restApiPassword ]]\"      },      \"propertyDescriptors\" : {        \"Proxy Host\" : {          \"displayName\" : \"Proxy Host\",          \"identifiesControllerService\" : false,          \"name\" : \"Proxy Host\",          \"sensitive\" : false        },        \"redirect-cookie-policy\" : {          \"displayName\" : \"Redirect Cookie Policy\",          \"identifiesControllerService\" : false,          \"name\" : \"redirect-cookie-policy\",          \"sensitive\" : false        },        \"proxy-configuration-service\" : {          \"displayName\" : \"Proxy Configuration Service\",          \"identifiesControllerService\" : true,          \"name\" : \"proxy-configuration-service\",          \"sensitive\" : false        },        \"Filename\" : {          \"displayName\" : \"Filename\",          \"identifiesControllerService\" : false,          \"name\" : \"Filename\",          \"sensitive\" : false        },        \"User Agent\" : {          \"displayName\" : \"User Agent\",          \"identifiesControllerService\" : false,          \"name\" : \"User Agent\",          \"sensitive\" : false        },        \"Proxy Port\" : {          \"displayName\" : \"Proxy Port\",          \"identifiesControllerService\" : false,          \"name\" : \"Proxy Port\",          \"sensitive\" : false        },        \"URL\" : {          \"displayName\" : \"URL\",          \"identifiesControllerService\" : false,          \"name\" : \"URL\",          \"sensitive\" : false        },        \"Connection Timeout\" : {          \"displayName\" : \"Connection Timeout\",          \"identifiesControllerService\" : false,          \"name\" : \"Connection Timeout\",          \"sensitive\" : false        },        \"Data Timeout\" : {          \"displayName\" : \"Data Timeout\",          \"identifiesControllerService\" : false,          \"name\" : \"Data Timeout\",          \"sensitive\" : false        },        \"SSL Context Service\" : {          \"displayName\" : \"SSL Context Service\",          \"identifiesControllerService\" : true,          \"name\" : \"SSL Context Service\",          \"sensitive\" : false        },        \"Username\" : {          \"displayName\" : \"Username\",          \"identifiesControllerService\" : false,          \"name\" : \"Username\",          \"sensitive\" : false        },        \"Accept Content-Type\" : {          \"displayName\" : \"Accept Content-Type\",          \"identifiesControllerService\" : false,          \"name\" : \"Accept Content-Type\",          \"sensitive\" : false        },        \"Follow Redirects\" : {          \"displayName\" : \"Follow Redirects\",          \"identifiesControllerService\" : false,          \"name\" : \"Follow Redirects\",          \"sensitive\" : false        },        \"Password\" : {          \"displayName\" : \"Password\",          \"identifiesControllerService\" : false,          \"name\" : \"Password\",          \"sensitive\" : true        }      },      \"retriedRelationships\" : [ ],      \"retryCount\" : 10,      \"runDurationMillis\" : 0,      \"scheduledState\" : \"ENABLED\",      \"schedulingPeriod\" : \"10 sec\",      \"schedulingStrategy\" : \"TIMER_DRIVEN\",      \"style\" : { },      \"type\" : \"org.apache.nifi.processors.standard.GetHTTP\",      \"yieldDuration\" : \"1 sec\"    }, {      \"autoTerminatedRelationships\" : [ \"success\" ],      \"backoffMechanism\" : \"PENALIZE_FLOWFILE\",      \"bulletinLevel\" : \"WARN\",      \"bundle\" : {        \"artifact\" : \"nifi-standard-nar\",        \"group\" : \"org.apache.nifi\",        \"version\" : \"1.24.0\"      },      \"comments\" : \"\",      \"componentType\" : \"PROCESSOR\",      \"concurrentlySchedulableTaskCount\" : 1,      \"executionNode\" : \"ALL\",      \"groupIdentifier\" : \"ad86f407-8631-318b-8230-76d1d7164043\",      \"identifier\" : \"32d35b0d-daab-3189-9f86-71fbe584a6c7\",      \"instanceIdentifier\" : \"32d35b0d-daab-3189-b8ae-148fcd2e1c26\",      \"maxBackoffPeriod\" : \"10 mins\",      \"name\" : \"PutSQL\",      \"penaltyDuration\" : \"30 sec\",      \"position\" : {        \"x\" : 1136.0,        \"y\" : 152.0      },      \"properties\" : {        \"Support Fragmented Transactions\" : \"true\",        \"putsql-sql-statement\" : \"insert into table values (?)\",        \"Batch Size\" : \"100\",        \"Obtain Generated Keys\" : \"false\",        \"JDBC Connection Pool\" : \"bed8843c-c85e-3b34-844d-0804c6d35999\",        \"database-session-autocommit\" : \"false\",        \"rollback-on-failure\" : \"false\"      },      \"propertyDescriptors\" : {        \"Support Fragmented Transactions\" : {          \"displayName\" : \"Support Fragmented Transactions\",          \"identifiesControllerService\" : false,          \"name\" : \"Support Fragmented Transactions\",          \"sensitive\" : false        },        \"putsql-sql-statement\" : {          \"displayName\" : \"SQL Statement\",          \"identifiesControllerService\" : false,          \"name\" : \"putsql-sql-statement\",          \"sensitive\" : false        },        \"Transaction Timeout\" : {          \"displayName\" : \"Transaction Timeout\",          \"identifiesControllerService\" : false,          \"name\" : \"Transaction Timeout\",          \"sensitive\" : false        },        \"Batch Size\" : {          \"displayName\" : \"Batch Size\",          \"identifiesControllerService\" : false,          \"name\" : \"Batch Size\",          \"sensitive\" : false        },        \"Obtain Generated Keys\" : {          \"displayName\" : \"Obtain Generated Keys\",          \"identifiesControllerService\" : false,          \"name\" : \"Obtain Generated Keys\",          \"sensitive\" : false        },        \"JDBC Connection Pool\" : {          \"displayName\" : \"JDBC Connection Pool\",          \"identifiesControllerService\" : true,          \"name\" : \"JDBC Connection Pool\",          \"sensitive\" : false        },        \"database-session-autocommit\" : {          \"displayName\" : \"Database Session AutoCommit\",          \"identifiesControllerService\" : false,          \"name\" : \"database-session-autocommit\",          \"sensitive\" : false        },        \"rollback-on-failure\" : {          \"displayName\" : \"Rollback On Failure\",          \"identifiesControllerService\" : false,          \"name\" : \"rollback-on-failure\",          \"sensitive\" : false        }      },      \"retriedRelationships\" : [ ],      \"retryCount\" : 10,      \"runDurationMillis\" : 0,      \"scheduledState\" : \"ENABLED\",      \"schedulingPeriod\" : \"10 sec\",      \"schedulingStrategy\" : \"TIMER_DRIVEN\",      \"style\" : { },      \"type\" : \"org.apache.nifi.processors.standard.PutSQL\",      \"yieldDuration\" : \"1 sec\"    } ],    \"remoteProcessGroups\" : [ ]  },  \"flowEncodingVersion\" : \"1.0\",  \"snapshotMetadata\" : {    \"author\" : \"nifi\",    \"bucketIdentifier\" : null,    \"comments\" : \"\",    \"flowIdentifier\" : null,    \"link\" : {      \"href\" : \"buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows\/20be5260-9249-4626-99d8-e95b7286836e\/versions\/1\",      \"params\" : {        \"rel\" : \"content\"      }    },    \"timestamp\" : 1779182541044,    \"version\" : 0  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"json\">{  \"name\": \"http-2-db\",  \"variables\": [    {      \"variable\": {        \"name\": \"dbUser\",        \"value\": \"db_prod_user\"      }    },    {      \"variable\": {        \"name\": \"jdbcUrl\",        \"value\": \"jdbc:postgresql:\/\/db_host:db_port\/db?prepareThreshold=0&amp;searchpath=schema\"      }    },    {      \"variable\": {        \"name\": \"truststoreFilename\",        \"value\": \"\/home\/user\/path\/to\/file.jks\"      }    },    {      \"variable\": {        \"name\": \"url\",        \"value\": \"https:\/\/rest_api_host:rest_api_port\/api\/v1\/some\/resource\"      }    }  ],  \"api-data\": [    {      \"api\": {        \"name\": \"registryFlowName\",        \"value\": \"http-2-db\"      }    },    {      \"api\": {        \"name\": \"processGroupPath\",        \"value\": \"tmp&gt;&gt;prod&gt;&gt;http-2-db\"      }    },    {      \"api\": {        \"name\": \"restApiUser\",        \"value\": \"rest_api_prod_user\"      }    },    {      \"api\": {        \"name\": \"restApiPassword\",        \"value\": \"rest_api_prod_password\"      }    },    {      \"api\": {        \"name\": \"dbPassword\",        \"value\": \"db_prod_password\"      }    },    {      \"api\": {        \"name\": \"truststorePassword\",        \"value\": \"truststore_prod_password\"      }    }  ]}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0432 \u043f\u0440\u043e\u0434:<\/p>\n<p><code>java -jar nifi-deployer-0.36-SNAPSHOT.jar -i bucket.name=default import.version.file=.\/http-2-db-1.24.json import.variable.file=.\/http-2-db-1.24-var.json nifi.url=https:\/\/...\/nifi-api registry.url=https:\/\/...\/nifi-registry-api user=... password=... ssl.keystore.filename=.\/nifi.p12<\/code><\/p>\n<p>\u041b\u043e\u0433, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0436\u0430\u0440\u043d\u0438\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>31.05.2026 12:43:59.914 [main] INFO deployTemplateAndMetadata2RegistryAndNiFi$ - read template from file .\/http-2-db-1.24.json31.05.2026 12:43:59.925 [main] INFO deployTemplateAndMetadata2RegistryAndNiFi$ - read metadata from file .\/http-2-db-1.24-var.json31.05.2026 12:44:00.138 [main] INFO deployTemplateAndMetadata2RegistryAndNiFi$ - parse template from file .\/http-2-db-1.24.json31.05.2026 12:44:00.188 [main] INFO ApiRegistry - get all flow versions from Registry31.05.2026 12:44:00.189 [main] INFO ApiRegistry - get bucket ID for bucket name default31.05.2026 12:44:00.189 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets31.05.2026 12:44:00.196 [main] INFO AuthHandler - getting token from https:\/\/...31.05.2026 12:44:00.698 [main] INFO ApiRegistry - using bucket 2cf0ac20-3ccd-41ed-97c1-97baecf45dfc31.05.2026 12:44:00.698 [main] INFO ApiRegistry - get flow ID for flow name http-2-db and bucketId 2cf0ac20-3ccd-41ed-97c1-97baecf45dfc31.05.2026 12:44:00.698 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows31.05.2026 12:44:01.097 [main] INFO ApiRegistry - create flow http-2-db31.05.2026 12:44:01.105 [main] DEBUG HttpClient - POST https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows31.05.2026 12:44:01.451 [main] INFO ApiRegistry - using flow d46dcc26-9ed3-4b9c-9f73-1f36738be47c31.05.2026 12:44:01.451 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows\/d46dcc26-9ed3-4b9c-9f73-1f36738be47c\/versions31.05.2026 12:44:01.579 [main] INFO importFlow2Registry$ - update flow http-2-db in Registry31.05.2026 12:44:01.580 [main] DEBUG HttpClient - POST https:\/\/...\/nifi-registry-api\/buckets\/2cf0ac20-3ccd-41ed-97c1-97baecf45dfc\/flows\/d46dcc26-9ed3-4b9c-9f73-1f36738be47c\/versions31.05.2026 12:44:01.969 [main] INFO importFlow2Registry$ - .\/http-2-db-1.24.json imported to Registry31.05.2026 12:44:01.970 [main] INFO importGroupFromRegistry2NiFi$ - search\/create recursively tmp&gt;&gt;prod&gt;&gt;http-2-db31.05.2026 12:44:01.971 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-api\/flow\/process-groups\/root31.05.2026 12:44:01.971 [main] INFO AuthHandler - getting token from https:\/\/...31.05.2026 12:44:02.595 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-api\/flow\/process-groups\/cba7fcb9-0186-1000-0000-0000451bf61131.05.2026 12:44:02.896 [Thread-21] INFO vci.getVersionControlInfo$ - get version control info for http-2-db recursively from root31.05.2026 12:50:15.502 [main] DEBUG HttpClient - GET https:\/\/...\/nifi-api\/controller\/registry-clients31.05.2026 12:50:15.826 [main] INFO importGroupFromRegistry2NiFi$ - registry b463120f-018c-1000-0000-00006c563b2731.05.2026 12:50:15.830 [main] DEBUG HttpClient - POST https:\/\/...\/nifi-api\/process-groups\/3f508567-019e-1000-ffff-ffffc155c0cd\/process-groups31.05.2026 12:50:16.342 [main] INFO importGroupFromRegistry2NiFi$ - imported https:\/\/...\/nifi?processGroupId=7d70f7a3-019e-1000-ffff-ffffdde8afc7 from Registry to NiFi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d \u0432 Registry:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ae\/ec2\/914\/6aeec2914d8b39d7f95d817924f58181.jpg\" width=\"780\" height=\"428\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6ae\/ec2\/914\/6aeec2914d8b39d7f95d817924f58181.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ae\/ec2\/914\/6aeec2914d8b39d7f95d817924f58181.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u00a0\u041f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d \u0432 NIFi:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c3\/da2\/548\/9c3da2548fd2aba6adc4ac41f223118d.jpg\" width=\"1296\" height=\"472\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9c3\/da2\/548\/9c3da2548fd2aba6adc4ac41f223118d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c3\/da2\/548\/9c3da2548fd2aba6adc4ac41f223118d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Username \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 GetHTTP \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/abd\/3f4\/a07\/abd3f4a0736516af533ce3906add8d6c.jpg\" width=\"823\" height=\"585\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/abd\/3f4\/a07\/abd3f4a0736516af533ce3906add8d6c.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/abd\/3f4\/a07\/abd3f4a0736516af533ce3906add8d6c.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u00a0\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0446\u0435\u043b\u043e\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u2014 \u0441 \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e. \u0412 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 Expression Language, \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432 \u0441\u0442\u0430\u0440\u043e\u0439 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b api-data. Sensitive-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b (\u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u0437 NiFi \u0432 Registry), \u0430 \u0432 \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 api-data. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 git diff \u0438 \u043f\u043e\u0434\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0451\u0433\u043a\u043e\u043c\u0443 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/17a\/18f\/7d9\/17a18f7d97578c7b4d3befa6451b4be6.jpg\" width=\"975\" height=\"406\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/17a\/18f\/7d9\/17a18f7d97578c7b4d3befa6451b4be6.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/17a\/18f\/7d9\/17a18f7d97578c7b4d3befa6451b4be6.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<h4>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435<\/h4>\n<p>\u0412 \u043f\u043e\u0442\u043e\u043a\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0447\u0435\u043d\u044b \u0432 Registry (\u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u044d\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u043e\u0439 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u043e\u0439 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u00abLocally modified Versioned Process Group\u00bb) \u2014 NiFi \u0432 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0442\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043d\u0451\u043c, \u0432\u044b\u0437\u043e\u0432 REST API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 409 Conflict. \u042d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 Registry \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043f\u043b\u043e\u0435\u043c (\u043f\u0443\u043d\u043a\u0442 Version \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e). \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c5\/805\/bf0\/0c5805bf0ce8d47addd562ba1f15038d.jpg\" width=\"784\" height=\"308\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/0c5\/805\/bf0\/0c5805bf0ce8d47addd562ba1f15038d.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c5\/805\/bf0\/0c5805bf0ce8d47addd562ba1f15038d.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, NiFi \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u044b (\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c\u0438). \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438 \u043f\u0440\u043e\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043f\u043b\u043e\u0435\u043c, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0438\u0445 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430:<\/p>\n<ol>\n<li>\n<p>\u0440\u0435\u0436\u0438\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445. \u0426\u0435\u043b\u044c \u2014 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u0430, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438 \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043c\u044f \u043f\u043e\u0442\u043e\u043a\u0430 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430 parent.group.id)<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0449\u0438\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432) \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430 api.data.default, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0442\u0443\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u0443\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438\/\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b (\u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0444\u0438\u0447\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432). \u042d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438, \u043d\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0445\u043e\u0442\u044f\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 Jenkins \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u043c\u0435\u0442\u043a\u0430 \u043f\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430: \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 NiFi \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e UUID (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 REST API). \u041d\u043e \u0434\u0436\u0430\u0440\u043d\u0438\u043a \u0437\u043d\u0430\u0435\u0442 \u043b\u0438\u0448\u044c \u0438\u043c\u044f \u0432 Registry (registryFlowName), \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 process groups \u0432 NiFi \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0432 Registry. \u041f\u0440\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u0440\u0443\u043f\u043f \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u043a\u043e\u043b\u043e 300 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0443\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430 parent.group.id \u2014 \u0438\u0441\u043a\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0435 \u043e\u0442 \u043a\u043e\u0440\u043d\u044f, \u0430 \u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439. \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 NiFi \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u0434\u0435\u0440\u0435\u0432\u0430, \u0438 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u0435\u043c, \u0432 \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0442\u043a\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043d\u0430\u0448 \u043f\u043e\u0442\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u0435\u0451 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435.<\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 NiFi \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442\u044c \u043d\u0430\u0432\u0435\u0447\u043d\u043e, \u0434\u0436\u0430\u0440\u043d\u0438\u043a \u0438\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2014 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f process group \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 controller services, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043d\u0435-\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 Registry \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043d\u0434, \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u0441\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430-\u0438\u043c\u043f\u043e\u0440\u0442\u0430; \u0434\u0436\u0430\u0440\u043d\u0438\u043a \u044d\u0442\u043e \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442, \u043d\u0430\u0434\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435, \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e\u0442\u043e\u043a\u0430 (\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b) \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043d\u0451\u043c \u0441\u0430\u043c\u043e\u043c<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0441 single instance (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437 NiFi \u043d\u0430 localhost \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e Dev \u0441\u0442\u0435\u043d\u0434\u0430) \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f &#171;executionNode&#187;: &#171;ALL&#187;. \u0415\u0441\u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043d\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u044b\u0439, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043d\u043e\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 primary, \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c \u2014 &#171;executionNode&#187;: &#171;PRIMARY&#187;<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1052274\/\">https:\/\/habr.com\/ru\/articles\/1052274\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u042f \u0418\u0433\u043e\u0440\u044c \u042e\u0440\u0447\u0435\u043d\u043a\u043e, backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0421\u0431\u0435\u0440\u0430, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 Apache NiFi.Apache NiFi \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 (\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 ETL \u2014 extract, transform, load). \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: https:\/\/nifi.apache.org\/documentation\/v1 (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 2.x, \u043d\u043e \u0442\u0443\u0442 \u0440\u0435\u0447\u044c \u043f\u0440\u043e 1.x). \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u2014 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438\u043b\u0438 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0438\u043b\u0438 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u2014 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438\/\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414, \u0438\u043b\u0438 \u0441\u0445\u0435\u043c\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445). \u0422\u043e \u0435\u0441\u0442\u044c ETL \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438, \u0431\u0435\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. NiFi \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e), \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c custom \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u043c\u0438). \u0418\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.Apache NiFi Registry \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432, Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 NiFi. \u0427\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u043e \u043f\u0440\u043e\u0449\u0435. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 Registry, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: https:\/\/nifi.apache.org\/docs\/nifi-registry-docs. \u041e\u0431\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0435\u044e\u0442 REST API.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 NiFi: \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u043c\u0438 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u0442\u0435\u043d\u0434 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432 \u2014 \u043f\u0443\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u044b (\u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b) \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043f\u043b\u043e\u044f, \u043e \u0447\u0451\u043c \u0438 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0434\u0430\u043b\u044c\u0448\u0435.NiFi \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f low-code \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 Scenario 2, Case 4 (Two NiFi Registries using the NiPyAPI) \u0438\u0437 \u0431\u043b\u043e\u0433\u0430 https:\/\/pierrevillard.com\/2018\/2018-04-09-automate-workflow-deployment-in-apache-nifi-with-the-nifi-registry\/ \u0434\u043b\u044f NiFi \u0438 Registry \u0432\u0435\u0440\u0441\u0438\u0438 1.24 (\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438). \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 nifi-deployer.jar (\u0434\u0430\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u043e &#8212; \u00ab\u0434\u0436\u0430\u0440\u043d\u0438\u043a\u00bb) \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e Jenkins pipeline \u0434\u0435\u043f\u043b\u043e\u044f (\u0441\u0430\u043c pipeline \u0442\u0443\u0442 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d, \u043d\u043e \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u044d\u0442\u043e \u2014 git checkout \u0438 Jinja2 templating \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0436\u0430\u0440\u043d\u0438\u043a\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u2014 \u0438\u0445 \u0438\u043c\u0435\u043d\u0430\u043c\u0438). \u041c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 JSON \u0438 HTTP, \u0441\u043c\u044b\u0441\u043b \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043c\u0435\u0442\u043e\u0434\u044b NiFi REST API.\u0422\u0435\u0440\u043c\u0438\u043d\u044b:\u043f\u043e\u0442\u043e\u043a \u2014 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f (\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0432 Registry) process group \u0432 NiFi\u0448\u0430\u0431\u043b\u043e\u043d \u2014 \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 NiFi REST API (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0438 controller services, \u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0432\u044f\u0437\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 process groups \u0438 \u0442.\u0434.). \u0428\u0430\u0431\u043b\u043e\u043d \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 (1 \u0448\u0430\u0431\u043b\u043e\u043d * N \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 = N \u043f\u043e\u0442\u043e\u043a\u043e\u0432). \u041d\u0435 \u043f\u0443\u0442\u0430\u0442\u044c \u0441 template \u0432 NiFi, \u043d\u0438\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u0444\u0430\u0439\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441\u043e\u0432\u044b\u0435 (\u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0434\u0430\u0442\u044b, Avro-\u0441\u0445\u0435\u043c\u044b \u0438 \u0442.\u0434. \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438) \u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 (HTTP URL, JDBC connection strings, Kafka brokers \u2014 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Ansible). \u0422\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 variables (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 NiFi \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435, \u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Expression Language \u2014 ${variable}, \u043e\u043d\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c NiFi \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u043e\u0442\u043e\u043a\u0430), \u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 api-data (\u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0432 NiFi, \u0430 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 Expression Language)\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 NiFi + Registry (\u0432 \u0442.\u0447. \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439). \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0430 \u0442\u0443\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e.\u041e\u0431\u0449\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u0435\u043f\u043b\u043e\u044f:\u0421\u043e\u0437\u0434\u0430\u0435\u043c\/\u043c\u0435\u043d\u044f\u0435\u043c process group \u0432 Dev NiFi (\u0438\u043b\u0438 \u043d\u0430 localhost); \u0433\u0440\u0443\u043f\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Dev Registry (\u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c bucket, https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#create-a-bucket) \u2014 \u0440\u0443\u0447\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 Registry \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438) \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e (https:\/\/nifi.apache.org\/docs\/nifi-registry-docs\/html\/user-guide.html#export-a-flow-version), \u043d\u043e Registry \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u0432 \u0444\u0430\u0439\u043b\u0435, \u0430 \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 Git diff\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0430\u0432\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u2014 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b api-data \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 (\u043e\u0442\u0441\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0430\u0436\u043d\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435 \u2014 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 Expression Language \u0432 NiFi, \u043b\u0443\u0447\u0448\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 variables, \u043f.\u0447. \u043e\u043d\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 ${variable}, \u0438\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430; \u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 Expression Language, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432\u0438\u0434\u0430 [[ api-data ]]; \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u0432 Registry sensitive-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043f\u0430\u0440\u043e\u043b\u0438 \u0438 \u0442.\u0434.), \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b [[ api-data ]] \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u0438\u0434\u0430 #{param} \u043d\u0430 parameter context, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u2014 \u043f\u0440\u043e parameter context\/provider \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f; \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c sensitive \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c propertyDescriptors \u2014 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 properties, \u0432 propertyDescriptors \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a &#171;sensitive&#187;: true, \u0442\u043e\u0433\u0434\u0430 \u0435\u0433\u043e &#171;name&#187; \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0442\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u043e\u043c \u0432 properties)\u0412\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0430\u0432\u0438\u043c \u0444\u0430\u0439\u043b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 (\u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 variables \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Ansible-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0430 {{ var }} &#8212; HTTP URL-\u044b, \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414 \u0438 \u0442.\u0434.; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 api-data \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 api \u2014 \u0442\u043e, \u0447\u0442\u043e \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 [[ api-data ]])\u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Git \u2014 \u0440\u0443\u0447\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0428\u0430\u0431\u043b\u043e\u043d \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0438 \u0432\u0435\u0442\u043a\u0430\u0445, \u043b\u044e\u0431\u043e\u0439 Git flow \u043d\u0430 \u0432\u0430\u0448 \u0432\u043a\u0443\u0441, \u043c\u043e\u0436\u043d\u043e merge, revert, diff, blame\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0432 Prod Registry, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f bucket \u0438 flow \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e (\u0442\u0443\u0442 \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 api-data \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043f\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0432\u0438\u0434\u0430 [[ api-data ]])\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c flow \u0438\u0437 Prod Registry \u0432 Prod NiFi (\u0432 \u0442.\u0447. \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0432 NiFi, \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f) \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u041f\u0443\u043d\u043a\u0442\u044b \u0434\u043e \u00ab\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0432 Git\u00bb \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u043e\u043b\u044f\u043c\u0438, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u043e\u043f-\u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435\u0442. \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 Jenkins pipeline-\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434 \u043f\u043e\u0442\u043e\u043a \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 (\u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c), \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u2014 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, devops-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b, \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 templates? \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u043f\u0440\u043e\u0449\u0435, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Registry. \u041d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 process group \u0432 NiFi \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u043c \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u043d\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f\/\u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f (\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f), \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f connections \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0438 \u0442.\u0434. \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Registry \u2014 \u044d\u0442\u043e \u0435\u0433\u043e \u043f\u0440\u044f\u043c\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c. \u0410 templates \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043d\u0430 \u043a\u0430\u043d\u0432\u0443 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b. \u041a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f &#171;snippets&#187;,\u00a0 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435 NiFi (\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0432\u0438\u0434\u0435 template, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 NiFi).Template \u0432 NiFi (\u041d\u0415 \u00ab\u0448\u0430\u0431\u043b\u043e\u043d\u00bb \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438):\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u041d\u0430 \u043b\u044e\u0431\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c \u043a\u0430\u043d\u0432\u044b (\u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 process groups, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445) \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u043f\u0443\u043d\u043a\u0442 Create template:\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 Templates:\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Template \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043a\u0430\u043d\u0432\u0443:\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0433\u0440\u0443\u043f\u043f\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 REST API \u0432 \u0411\u0414. \u041d\u0430 Dev-\u0441\u0442\u0435\u043d\u0434\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u043e\u0442\u043e\u043a:\u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434 dev\/prod \u0441\u0442\u0435\u043d\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435.\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (REST API) \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 GetHTTP, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u043c Expression Language:\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 (\u043f\u0430\u0440\u043e\u043b\u0438) \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u044f\u0432\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0431\u0435\u0437 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 parameter context (\u0437\u0430\u0449\u0438\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0432 Web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u2014 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u00abSensitive value set\u00bb \u043f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u0430):\u0410\u0434\u0440\u0435\u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (REST API) \u0438 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 truststore \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 variables (\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0438\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Expression Language; \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u0445 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b):\u00a0\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u0442\u043e\u043a \u0432 Dev Registry:\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 Dev Registry:java -jar nifi-deployer-0.36-SNAPSHOT.jar -e bucket.name=default flow.name=http-2-db-dev export.path=.\/http-2-db-1.24.json parent.group.id=cba7fcb9-0186-1000-0000-0000451bf611 nifi.url=https:\/\/&#8230;\/nifi-api registry.url=https:\/\/&#8230;\/nifi-registry-api user=&#8230; password=&#8230; ssl.keystore.filename=.\/nifi.p12\u041b\u043e\u0433 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u044219.05.2026 14:39:02.142 [main] INFO ApiRegistry &#8212; get bucket ID for bucket name default19.05.2026 14:39:02.142 [main] DEBUG HttpClient &#8212; GET https:\/\/&#8230;\/nifi-registry-api\/buckets19.05.2026 14:39:03.384 [main] INFO ApiRegistry &#8212; using bucket 2cf0ac20-3ccd-41ed-97c1-97baecf45dfc19.05.2026 14:39:03.384 [main] INFO ApiRegistry &#8212; get flow ID for flow name http-2-db-dev&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485151","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485151"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485151\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}