diff --git a/functions/triggers-getting-started/main.tf b/functions/triggers-getting-started/main.tf index 2eb222d..7b7e255 100644 --- a/functions/triggers-getting-started/main.tf +++ b/functions/triggers-getting-started/main.tf @@ -26,6 +26,7 @@ locals { handler = "handler" } } + subject_name = "triggers-nats-factorial" } resource "scaleway_function_namespace" "main" { @@ -59,21 +60,23 @@ resource "scaleway_function" "main" { min_scale = 0 } -resource "scaleway_mnq_sqs_queue" "main" { +resource "scaleway_function_trigger" "main_sqs" { for_each = local.functions - name = "factorial-requests-${each.key}" - - access_key = scaleway_mnq_sqs_credentials.main.access_key - secret_key = scaleway_mnq_sqs_credentials.main.secret_key + function_id = scaleway_function.main[each.key].id + name = "sqs-on-factorial-request" + sqs { + queue = scaleway_mnq_sqs_queue.main[each.key].name + } } -resource "scaleway_function_trigger" "main" { +resource "scaleway_function_trigger" "main_nats" { for_each = local.functions function_id = scaleway_function.main[each.key].id - name = "on-factorial-request" - sqs { - queue = scaleway_mnq_sqs_queue.main[each.key].name + name = "nats-on-factorial-request" + nats { + account_id = scaleway_mnq_nats_account.main.id + subject = local.subject_name } } diff --git a/functions/triggers-getting-started/messaging.tf b/functions/triggers-getting-started/messaging.tf deleted file mode 100644 index a6e5cef..0000000 --- a/functions/triggers-getting-started/messaging.tf +++ /dev/null @@ -1,8 +0,0 @@ -resource "scaleway_mnq_sqs_credentials" "main" { - name = "triggers-getting-started" - permissions { - can_publish = true - can_receive = true - can_manage = true - } -} diff --git a/functions/triggers-getting-started/nats.tf b/functions/triggers-getting-started/nats.tf new file mode 100644 index 0000000..dbfcc0a --- /dev/null +++ b/functions/triggers-getting-started/nats.tf @@ -0,0 +1,13 @@ +resource "scaleway_mnq_nats_account" "main" { + name = "nats-account" +} + +resource "scaleway_mnq_nats_credentials" "main" { + account_id = scaleway_mnq_nats_account.main.id + name = "triggers-nats" +} + +resource "local_sensitive_file" "nats" { + filename = "triggers-nats.creds" + content = scaleway_mnq_nats_credentials.main.file +} diff --git a/functions/triggers-getting-started/outputs.tf b/functions/triggers-getting-started/outputs.tf index c33b2c4..0191ea7 100644 --- a/functions/triggers-getting-started/outputs.tf +++ b/functions/triggers-getting-started/outputs.tf @@ -1,5 +1,5 @@ output "sqs_access_key" { - value = scaleway_mnq_sqs_credentials.main.access_key + value = scaleway_mnq_sqs_credentials.main.access_key sensitive = true } @@ -7,3 +7,7 @@ output "sqs_secret_key" { value = scaleway_mnq_sqs_credentials.main.secret_key sensitive = true } + +output "subject_name" { + value = local.subject_name +} diff --git a/functions/triggers-getting-started/sqs.tf b/functions/triggers-getting-started/sqs.tf new file mode 100644 index 0000000..e5d74c2 --- /dev/null +++ b/functions/triggers-getting-started/sqs.tf @@ -0,0 +1,17 @@ +resource "scaleway_mnq_sqs_credentials" "main" { + name = "triggers-getting-started" + permissions { + can_publish = true + can_receive = true + can_manage = true + } +} + +resource "scaleway_mnq_sqs_queue" "main" { + for_each = local.functions + + name = "factorial-requests-${each.key}" + + access_key = scaleway_mnq_sqs_credentials.main.access_key + secret_key = scaleway_mnq_sqs_credentials.main.secret_key +} diff --git a/functions/triggers-getting-started/tests/requirements.txt b/functions/triggers-getting-started/tests/requirements.txt index ab48b6b..f2d577a 100644 --- a/functions/triggers-getting-started/tests/requirements.txt +++ b/functions/triggers-getting-started/tests/requirements.txt @@ -2,3 +2,5 @@ boto3<1.28.81 botocore<1.31.81 requests~=2.31.0 +nats-py==2.6.0 +nkeys==0.1.0 diff --git a/functions/triggers-getting-started/tests/send_nats_messages.py b/functions/triggers-getting-started/tests/send_nats_messages.py new file mode 100644 index 0000000..c2bc7a5 --- /dev/null +++ b/functions/triggers-getting-started/tests/send_nats_messages.py @@ -0,0 +1,24 @@ +import os + +import asyncio +import nats + +MAX_FACTORIAL_REQUESTS = 20 + +# Credentials file generated by Terraform +NATS_CREDS_FILE = os.environ["NATS_CREDS_FILE"] +NATS_ENDPOINT_URL = "nats://nats.mnq.fr-par.scaleway.com:4222" +SUBJECT_NAME = os.environ["NATS_SUBJECT"] + +async def send_nats(): + nc = await nats.connect(NATS_ENDPOINT_URL, user_credentials=NATS_CREDS_FILE) + + print(f"Sending 0..{MAX_FACTORIAL_REQUESTS} factorial requests to {SUBJECT_NAME}...") + for i in range(MAX_FACTORIAL_REQUESTS): + await nc.publish(SUBJECT_NAME, f"{i}".encode()) + + await nc.close() + + +if __name__ == "__main__": + asyncio.run(send_nats()) diff --git a/functions/triggers-getting-started/tests/send_messages.py b/functions/triggers-getting-started/tests/send_sqs_messages.py similarity index 100% rename from functions/triggers-getting-started/tests/send_messages.py rename to functions/triggers-getting-started/tests/send_sqs_messages.py