{"id":1957,"date":"2020-05-22T21:53:35","date_gmt":"2020-05-22T18:53:35","guid":{"rendered":"https:\/\/artem.services\/?p=1957"},"modified":"2020-05-22T22:07:42","modified_gmt":"2020-05-22T19:07:42","slug":"aws-lambda-kubectl","status":"publish","type":"post","link":"https:\/\/artem.services\/?p=1957","title":{"rendered":"AWS &#8212; Lambda: kubectl"},"content":{"rendered":"<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-214\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo.png\" alt=\"\" width=\"975\" height=\"450\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo.png 975w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-300x138.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-768x354.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-954x440.png 954w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 <strong>Kubernetes<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <strong>AWS Lambda<\/strong>.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 <strong>Python3<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/github.com\/kubernetes-client\/python\" target=\"_blank\" rel=\"noopener noreferrer\">Kubernetes Python Client<\/a><\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/kubernetes-client\/python\/tree\/master\/examples\" target=\"_blank\" rel=\"noopener noreferrer\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a <strong>AWS Lambda<\/strong> \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u0443\u043f\u0430\u043a\u0443\u0435\u043c \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0434\u0443\u043b\u0438 &quot;<strong>kubernetes<\/strong>&quot; \u0438 &quot;<strong>boto3<\/strong>&quot;.<\/p>\n<blockquote><p>&quot;<strong>boto3<\/strong>&quot; \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432 <strong>AWS SSM<\/strong>, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f <strong>kubeconfig<\/strong><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u043d\u0435\u0435:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmkdir lambda\r\ncd lambda\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f &quot;<strong>virtualenv<\/strong>&quot;, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f &quot;<strong>pip3<\/strong>&quot;:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\npip3 install virtualenv\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\npython3 -m virtualenv .\r\nsource bin\/activate\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0418 \u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\npip3 install kubernetes\r\npip3 install boto3\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n$VIRTUAL_ENV\/lib\/python3.7\/site-packages\r\n<\/pre>\n<p>&nbsp;<\/p>\n<blockquote><p>&quot;<strong>python3.7<\/strong>&quot; &#8212; \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e Python<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>\u0423\u0434\u043e\u0431\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0443\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0443\u0436\u0435 \u043d\u0435 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\necho $VIRTUAL_ENV\/lib\/python3.7\/site-packages\r\n\/private\/tmp\/lambda\/lib\/python3.7\/site-packages\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0443\u0436\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448\u0438 \u043c\u043e\u0434\u0443\u043b\u0438:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmkdir ~\/lambda_upload\r\ncp -R \/private\/tmp\/lambda\/lib\/python3.7\/site-packages\/. ~\/lambda_upload\/\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>SSM Parameter Store<\/h3>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 <strong>AWS<\/strong> \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 &quot;<strong>Systems Manager<\/strong>&quot; -&gt; &quot;<strong>Parameter Store<\/strong>&quot;<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1958\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.27.20.png\" alt=\"\" width=\"538\" height=\"842\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.27.20.png 538w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.27.20-192x300.png 192w\" sizes=\"(max-width: 538px) 100vw, 538px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u0418 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441 \u0442\u0438\u043f\u043e\u043c &quot;<span data-reactroot=\"\"><strong>SecureString<\/strong>&quot; \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 &quot;<strong>kubeconfig<\/strong>&quot; \u0444\u0430\u0439\u043b\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>EKS<\/strong>, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u0435\u0440\u0432\u0438\u0441 \u0430\u043a\u043a\u0430\u0443\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b <strong>AWS<\/strong> \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435:<br \/>\n<\/span><\/p>\n<p><strong>Kubeconfig<\/strong> \u0441 <strong>AWS<\/strong> \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n...\r\n  user:\r\n    exec:\r\n      apiVersion: client.authentication.k8s.io\/v1alpha1\r\n      args:\r\n      - --region\r\n      - eu-central-1\r\n      - eks\r\n      - get-token\r\n      - --cluster-name\r\n      - artem-services-stage-eks\r\n      command: aws\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 &quot;<strong>~\/lambda_upload<\/strong>&quot; \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;<strong>lambda_function.py<\/strong>&quot; \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442:<\/p>\n<h3>lambda_function.py:<\/h3>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nimport os\r\nimport time\r\nimport random\r\nimport string\r\nimport boto3\r\n\r\nfrom kubernetes import config\r\nfrom kubernetes.client import Configuration\r\nfrom kubernetes.client.api import core_v1_api\r\nfrom kubernetes.client.rest import ApiException\r\nfrom kubernetes.stream import stream\r\n\r\n# Get Kubeconfig from SSM\r\ndef get_kube_config():\r\n    awsRegion = os.environ['AWS_REGION']\r\n    ssmParameter = os.environ['SSM']\r\n\r\n    ssm = boto3.client('ssm', region_name=awsRegion)\r\n    parameter = ssm.get_parameter(Name=ssmParameter, WithDecryption=True)\r\n\r\n    kubeconfig = open( '\/tmp\/kubeconfig.yaml', 'w' )\r\n    kubeconfig.write(parameter['Parameter']['Value'])\r\n    kubeconfig.close()\r\n\r\n# Generate random string for unique name of Pod\r\ndef randomString(stringLength=8):\r\n    letters = string.ascii_lowercase + string.digits\r\n    return ''.join(random.choice(letters) for i in range(stringLength))\r\n\r\ndef exec_commands(api_instance):\r\n    name = &quot;busybox-&quot; + randomString()\r\n    namespace = &quot;default&quot;\r\n    resp = None\r\n\r\n    print(&quot;Creating pod...&quot;)\r\n\r\n    pod_manifest = {\r\n        'apiVersion': 'v1',\r\n        'kind': 'Pod',\r\n        'metadata': {\r\n            'name': name\r\n        },\r\n        'spec': {\r\n            'containers': [{\r\n                'image': 'busybox',\r\n                'name': 'busybox',\r\n                &quot;args&quot;: [\r\n                    &quot;\/bin\/sh&quot;,\r\n                    &quot;-c&quot;,\r\n                    &quot;while true;do date;sleep 5; done&quot;\r\n                ]\r\n            }]\r\n        }\r\n    }\r\n    resp = api_instance.create_namespaced_pod(body=pod_manifest, namespace=namespace)\r\n\r\n    while True:\r\n        resp = api_instance.read_namespaced_pod(name=name, namespace=namespace)\r\n        if resp.status.phase == 'Pending' or resp.status.phase == 'Running':\r\n            print(&quot;Done. Pod &quot; + name + &quot; was created.&quot;)\r\n            break\r\n        time.sleep(1)\r\n\r\ndef main(event, context):\r\n    get_kube_config()\r\n\r\n    config.load_kube_config(config_file=&quot;\/tmp\/kubeconfig.yaml&quot;)\r\n    c = Configuration()\r\n    c.assert_hostname = False\r\n    Configuration.set_default(c)\r\n    core_v1 = core_v1_api.CoreV1Api()\r\n\r\n    exec_commands(core_v1)\r\n\r\n\r\nif __name__ == '__main__':\r\n    main()\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 &quot;<strong>zip<\/strong>&quot; \u0430\u0440\u0445\u0438\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 <strong>Lambda<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 2 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u0430\u0448 <strong>AWS Region<\/strong> \u0438 \u0438\u043c\u044f <strong>SSM Parameter Store<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0440\u0430\u043d\u043d\u0435\u0435.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1959\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26.png\" alt=\"\" width=\"2592\" height=\"462\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26.png 2592w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-300x53.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-1024x183.png 1024w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-768x137.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-1536x274.png 1536w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-2048x365.png 2048w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-954x170.png 954w, https:\/\/artem.services\/wp-content\/uploads\/2020\/05\/Screenshot-2020-05-22-at-21.42.26-1354x241.png 1354w\" sizes=\"(max-width: 2592px) 100vw, 2592px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u0414\u043b\u044f <strong>Lambda<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 <strong>SSM<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0430\u0442\u0430\u0447\u0442\u0435 \u043a \u0440\u043e\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>Lambda<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443:<\/p>\n<pre>arn:aws:iam::aws:policy\/AmazonSSMReadOnlyAccess<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 <strong>pod<\/strong> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;<strong>busybox-<\/strong>&quot; + \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0438\u0437 8-\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <strong>pod<\/strong>&#39;\u0430 \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f <strong>EKS Fargate<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0436\u0434\u0430\u0442\u044c 1-2 \u043c\u0438\u043d\u0443\u0442\u044b, \u043f\u043e\u043a\u0430 <strong>Fargate<\/strong> \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, &quot;<strong>Pending<\/strong>&quot; \u0438\u043b\u0438 &quot;<strong>Running<\/strong>&quot; \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e <strong>pod<\/strong> \u0431\u044b\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 Kubernetes, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f AWS Lambda. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 Python3, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f Kubernetes Python Client \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u0443\u0442. \u0422\u0430\u043a \u043a\u0430\u043a AWS Lambda \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u0443\u043f\u0430\u043a\u0443\u0435\u043c \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u043e\u0434\u0443\u043b\u0438 &quot;kubernetes&quot; \u0438 &quot;boto3&quot;. &quot;boto3&quot; \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432 AWS SSM, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f kubeconfig &hellip; <a href=\"https:\/\/artem.services\/?p=1957\" class=\"more-link\">\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c<span class=\"screen-reader-text\"> &quot;AWS &#8212; Lambda: kubectl&quot;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,20],"tags":[25,1423,111,17,893,1159,1161],"_links":{"self":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1957"}],"collection":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1957"}],"version-history":[{"count":5,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1957\/revisions"}],"predecessor-version":[{"id":1966,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1957\/revisions\/1966"}],"wp:attachment":[{"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}