Пока что мой путь с Outreachy был невероятным! Мой график обучения резко вырос благодаря участию в проекте Qinling с помощью моего наставника, Линсянь Конга. Я искренне ценю и ценю все, чему я учусь у своего наставника и этого проекта. Он навсегда останется одним из главных факторов моего успеха и достижений.

В этом посте вы сможете создать функцию, используя службу хранилища объектов OpenStack, Swift. Qinling стремительно растет, теперь он интегрирован с Swift, где вы можете создавать функции и вызывать их без особых усилий. Я верю, что это проложит новые пути помощи пользователю / разработчику в достижении их задач. Итак, приступим!

Служба хранения объектов OpenStack, swift может быть интегрирован с Qinling для создания функций. Вы можете загрузить свой функциональный пакет в swift и создать функцию, указав имя контейнера и имя объекта в Swift. В этом примере функция вернет «Hello, Neerja!», вы можете заменить строку вводом функции. Эти шаги предполагают, что в развертывании уже есть среда выполнения Python 2.7.

Шаг 1. Создайте пакет развертывания функции.

$ mkdir ~/qinling_swift_test
$ cd ~/qinling_swift_test
$ cat <<EOF > hello_world.py

def main(name='World',**kwargs):
    ret = 'Hello, %s' % name
    return ret
EOF

$ cd ~/qinling_swift_test && zip -r ~/qinling_swift_test/hello_world.zip ./*

Шаг 2. Загрузите файл в Swift.

1. Create a container named "functions"
$ openstack container create functions

+---------------------------------------+------------------+------------------------------------+
| account                               | container        | x-trans-id                         |
+---------------------------------------+------------------+------------------------------------+
| AUTH_6ae7142bff0542d8a8f3859ffa184236 | functions        | 9b45bef5ab2658acb9b72ee32f39dbc8   |
+---------------------------------------+------------------+------------------------------------+
2. Add the function deployment package(.zip) to the container
$ openstack object create functions hello_world.zip

+-----------------+-----------+----------------------------------+
| object          | container | etag                             |
+-----------------+-----------+----------------------------------+
| hello_world.zip | functions | 9b45bef5ab2658acb9b72ee32f39dbc8 |
+-----------------+-----------+----------------------------------+
3. Display the container and its object 
$ openstack object show functions hello_world.zip

+----------------+---------------------------------------+
| Field          | Value                                 |
+----------------+---------------------------------------+
| account        | AUTH_6ae7142bff0542d8a8f3859ffa184236 |
| container      | functions                             |
| content-length | 246                                   |
| content-type   | application/zip                       |
| etag           | 9b45bef5ab2658acb9b72ee32f39dbc8      |
| last-modified  | Wed, 18 Jul 2018 17:45:23 GMT         |
| object         | hello_world.zip                       |
+----------------+---------------------------------------+

Шаг 3. Создайте функцию и получите идентификатор функции, замените runtime_id на тот, который используется в вашем развертывании. Также укажите быстрый контейнер и имя объекта.

$ openstack function create --name hello_world \
--runtime $runtime_id \
--entry hello_world.main \
--container functions \
--object hello_world.zip

+-------------+----------------------------------------------------------------------------------------------+
| Field       | Value                                                                                        |
+-------------+----------------------------------------------------------------------------------------------+
| id          | f1102bca-fbb4-4baf-874d-ed33bf8251f7                                                         |
| name        | hello_world                                                                                  |
| description | None                                                                                         |
| count       | 0                                                                                            |
| code        | {u'source': u'swift', u'swift': {u'object': u'hello_world.zip', u'container': u'functions'}} |
| runtime_id  | 0d8bcf73-910b-4fec-86b1-38ace8bd0766                                                         |
| entry       | hello_world.main                                                                             |
| project_id  | 6ae7142bff0542d8a8f3859ffa184236                                                             |
| created_at  | 2018-07-18 17:46:29.974506                                                                   |
| updated_at  | None                                                                                         |
| cpu         | 100                                                                                          |
| memory_size | 33554432                                                                                     |
+-------------+----------------------------------------------------------------------------------------------+

Шаг 4: вызовите функцию, указав function_id

$ function_id=f1102bca-fbb4-4baf-874d-ed33bf8251f7
$ openstack function execution create $function_id --input Neerja

+------------------+-----------------------------------------------+
| Field            | Value                                         |
+------------------+-----------------------------------------------+
| id               | 3451393d-60c6-4172-bbdf-c681929fae07          |
| function_id      | f1102bca-fbb4-4baf-874d-ed33bf8251f7          |
| function_version | 0                                             |
| description      | None                                          |
| input            | None                                          |
| result           | {"duration": 0.031,"output": "Hello, Neerja"} |
| status           | success                                       |
| sync             | True                                          |
| project_id       | 6ae7142bff0542d8a8f3859ffa184236              |
| created_at       | 2018-07-18 17:49:46                           |
| updated_at       | 2018-07-18 17:49:48                           |
+------------------+-----------------------------------------------+

Пожалуйста, попробуйте это руководство, оно упрощает интеграцию Qinling и Swift для пользователей!