Oracle Functions — это полностью управляемая, многопользовательская, легко масштабируемая платформа с функциями как услуга. Он построен на основе компонентов облачной инфраструктуры Oracle корпоративного уровня и работает на базе серверной платформы Fn Project с открытым исходным кодом. Наряду с Oracle Events , Oracle Functions могут предоставлять мощные возможности для инфраструктуры и автоматизации приложений. Вместе они позволяют службам действовать автоматически на основе изменений состояния в ресурсах инфраструктуры, что является частым случаем использования для корпоративных ИТ-сред.
В этом посте рассматривается пример функции, которая проверяет, правильно ли помечен экземпляр compute при его подготовке. Если экземпляр не помечен должным образом, функция действует, чтобы остановить экземпляр. Эта практика распространена в автоматизации инфраструктуры; он позволяет проверять ресурсы на предмет соответствия политикам внутреннего управления по мере их создания, а не после.
Эта функция вызывается событием Instance — Launch End , которое генерирует служба Compute при завершении инициализации экземпляра в зависимости от того, успешно ли выполняется экземпляр или нет.
В этом примере Oracle Cloud Infrastructure Search используется для поиска ресурсов Compute с ключом тега costcenter и значением тега 1234 .
Предпосылки
-
Настройте Fn CLI с функциями Oracle .
-
Чтобы использовать и получать информацию о других сервисах Oracle Cloud Infrastructure, включите функцию в динамическую группу. В следующем примере правила допускается включение функций в определенном отделении в динамическую группу:
Простой текст
xxxxxxxxxx
1
1
ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..exampleuniqueID'}
Для получения дополнительной информации см. Создание динамической группы .
-
Создание или обновление политик для предоставления динамического группового доступа к ресурсам.
После создания динамической группы создайте политику, которая позволит динамической группе использовать экземпляры в отсеке. Ваша политика должна выглядеть примерно так:
Простой текст
xxxxxxxxxx
1
1
Allow dynamic-group <dynamic-group-name> to use instances in compartment <compartment-name>
Например:
Простой текст
xxxxxxxxxx
1
1
Allow dynamic-group demo-func-dyn-group to use instances in compartment demo-func-compartment
Для получения дополнительной информации см. Синтаксис политики .
Создать приложение
Используйте консоль Oracle Cloud Infrastructure Console для создания приложения в функциях Oracle.
-
В меню навигации выберите « Службы разработчика» , а затем — « Функции» .
-
Нажмите « Создать приложение», а затем введите значения в диалоговом окне «Новое приложение». Если вы ранее создали VCN, они перечислены, и вы можете выбрать соответствующую подсеть.
-
Откройте терминал и создайте функцию Python:
Оболочка
xxxxxxxxxx
1
fn init --runtime python stop-untagged-instance
2
3
cd stop-untagged-instance
-
В файле needs.txt добавьте следующие записи:
Оболочка
x
1
fdk
2
oci
Когда служба Compute генерирует событие Instance — Launch End , JSON выглядит следующим образом:
JSON
xxxxxxxxxx
1
{
2
"eventType" : "com.oraclecloud.computeapi.launchinstance.end",
3
"cloudEventsVersion" : "0.1",
4
"eventTypeVersion" : "2.0",
5
"source" : "ComputeApi",
6
"eventTime" : "2020-03-04T21:24:16.151Z",
7
"contentType" : "application/json",
8
"data" : {
9
"compartmentId" : "ocid1.compartment.oc1..exampleuniqueID",
10
"compartmentName" : "sandbox",
11
"resourceName" : "instance-20200304-1322",
12
"resourceId" : "ocid1.instance.oc1.iad.exampleuniqueID",
13
"availabilityDomain" : "QGaa:US-ASHBURN-AD-1",
14
"additionalDetails" : {
15
"imageId" : "ocid1.image.oc1.iad.exampleuniqueID",
16
"shape" : "VM.Standard2.1",
17
"type" : "CustomerVmi"
18
}
19
},
20
"eventID" : "08a71051-cb5c-490d-8e47-2354cfe503b5",
21
"extensions" : {
22
"compartmentId" : "ocid1.compartment.oc1..exampleuniqueID"
23
}
24
}
ResourceId — это идентификатор экземпляра (OCID).
Ниже приведены некоторые фрагменты кода из файла func.py:
- Из тела JSON получите идентификатор экземпляра:
питон
xxxxxxxxxx
1
body = json.loads(data.getvalue())
2
instanceId = body["data"]["resourceId"]
- Используйте подписавшего для аутентификации в службах облачной инфраструктуры Oracle:
питон
xxxxxxxxxx
1
signer = oci.auth.signers.get_resource_principals_signer()
- Используйте Oracle Cloud Infrastructure Search, чтобы проверить, правильно ли помечен экземпляр Compute:
питон
xxxxxxxxxx
1
search_client = oci.resource_search.ResourceSearchClient(config={}, signer=signer)
2
key="costcenter"
3
value="1234"
4
structured_search = oci.resource_search.models.StructuredSearchDetails(
5
query="query instance resources where ((freeformTags.key != '{}' && freeformTags.value != '{}') && (identifier='{}'))".format(key,value,instanceId),
6
type='Structured',
7
matching_context_type=oci.resource_search.models.SearchDetails.MATCHING_CONTEXT_TYPE_NONE)
8
results = search_client.search_resources(structured_search)
9
- Если поиск обнаружит, что экземпляр не был помечен должным образом, остановите его:
xxxxxxxxxx
1
compute_client = oci.core.ComputeClient(config={}, signer=signer)
2
try:
3
if compute_client.get_instance(instanceId).data.lifecycle_state in ('RUNNING'):
4
try:
5
resp = compute_client.instance_action(instanceId,'STOP')
6
except oci.exceptions.ServiceError as :
7
print('Action failed. {0}'.format(e), flush=True)
8
raise
9
else:
10
print('The instance {0} was in the incorrect state to stop'.format(instanceId),flush=True)
- Разверните функцию:
Оболочка
xxxxxxxxxx
1
fn deploy --app control-instance-app
Создать правило событий
-
В меню навигации консоли выберите Интеграция приложений , а затем выберите Служба событий .
-
Нажмите « Создать правило» и введите значения в диалоговом окне «Редактировать правило».
В этом примере имя службы - Compute , тип события - Instance - Launch End , и действие, которое нужно выполнить, - вызвать функцию stop-untagged-instance в приложении функции control-instance-app .
Проверьте функцию
Запустите экземпляр Compute без тегов.
Через несколько минут вы увидите, что экземпляр остановлен, чтобы вы могли предпринять дальнейшие действия.
Заключение
В этом посте показан пример реализации правил соответствия ИТ с использованием облачных событий и функций в Oracle Cloud Infrastructure.