This is an automated email from the ASF dual-hosted git repository.

vincbeck pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 6dfd4e74d6c Update `example_bedrock_agentcore` system test to use 
`codeConfiguration` instead of ECR image (#69576)
6dfd4e74d6c is described below

commit 6dfd4e74d6cdc48648a4b18c8296b826ce77bf29
Author: Vincent <[email protected]>
AuthorDate: Wed Jul 8 13:13:45 2026 -0400

    Update `example_bedrock_agentcore` system test to use `codeConfiguration` 
instead of ECR image (#69576)
---
 .../system/amazon/aws/example_bedrock_agentcore.py | 82 +++++++++++++++++++---
 1 file changed, 74 insertions(+), 8 deletions(-)

diff --git 
a/providers/amazon/tests/system/amazon/aws/example_bedrock_agentcore.py 
b/providers/amazon/tests/system/amazon/aws/example_bedrock_agentcore.py
index ca93029c93c..b85772eccee 100644
--- a/providers/amazon/tests/system/amazon/aws/example_bedrock_agentcore.py
+++ b/providers/amazon/tests/system/amazon/aws/example_bedrock_agentcore.py
@@ -16,13 +16,21 @@
 # under the License.
 from __future__ import annotations
 
+import io
+import zipfile
 from datetime import datetime
 
+import boto3
+
 from airflow.providers.amazon.aws.operators.bedrock import (
     BedrockCreateAgentRuntimeOperator,
     BedrockDeleteAgentRuntimeOperator,
     BedrockInvokeAgentRuntimeOperator,
 )
+from airflow.providers.amazon.aws.operators.s3 import (
+    S3CreateBucketOperator,
+    S3DeleteBucketOperator,
+)
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
@@ -41,14 +49,35 @@ from system.amazon.aws.utils import SystemTestContextBuilder
 
 # Externally fetched variables:
 ROLE_ARN_KEY = "ROLE_ARN"
-CONTAINER_URI_KEY = "CONTAINER_URI"
 
-sys_test_context_task = (
-    
SystemTestContextBuilder().add_variable(ROLE_ARN_KEY).add_variable(CONTAINER_URI_KEY).build()
-)
+sys_test_context_task = 
SystemTestContextBuilder().add_variable(ROLE_ARN_KEY).build()
 
 DAG_ID = "example_bedrock_agentcore"
 
+CODE_CONTENT = """\
+from http.server import HTTPServer, BaseHTTPRequestHandler
+import json
+
+
+class Handler(BaseHTTPRequestHandler):
+    def do_POST(self):
+        content_length = int(self.headers.get("Content-Length", 0))
+        body = self.rfile.read(content_length) if content_length else b"{}"
+        self.send_response(200)
+        self.send_header("Content-Type", "application/json")
+        self.end_headers()
+        self.wfile.write(json.dumps({"output": {"text": "Hello from 
Airflow"}}).encode())
+
+    def do_GET(self):
+        self.send_response(200)
+        self.end_headers()
+        self.wfile.write(b"OK")
+
+
+if __name__ == "__main__":
+    HTTPServer(("0.0.0.0", 8080), Handler).serve_forever()
+"""
+
 with DAG(
     dag_id=DAG_ID,
     schedule="@once",
@@ -58,20 +87,47 @@ with DAG(
     test_context = sys_test_context_task()
     env_id = test_context["ENV_ID"]
 
-    runtime_name = f"airflow-agentcore-{env_id}"
+    runtime_name = f"airflow_agentcore_{env_id}"
+    bucket_name = f"airflow-agentcore-code-{env_id}"
+    s3_key = "code.zip"
+
+    # [START howto_setup_bedrock_agentcore]
+    create_bucket = S3CreateBucketOperator(
+        task_id="create_bucket",
+        bucket_name=bucket_name,
+    )
+
+    @dag.task
+    def upload_code(bucket: str, key: str):
+        """Create a zip with the agent code and upload it to S3."""
+        buf = io.BytesIO()
+        with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf:
+            zf.writestr("main.py", CODE_CONTENT)
+        buf.seek(0)
+
+        boto3.client("s3").upload_fileobj(buf, bucket, key)
+
+    upload_code_task = upload_code(bucket_name, s3_key)
+    # [END howto_setup_bedrock_agentcore]
 
     # [START howto_operator_bedrock_create_agent_runtime]
     create_agent_runtime = BedrockCreateAgentRuntimeOperator(
         task_id="create_agent_runtime",
         agent_runtime_name=runtime_name,
         agent_runtime_artifact={
-            "containerConfiguration": {
-                "containerUri": test_context[CONTAINER_URI_KEY],
+            "codeConfiguration": {
+                "code": {
+                    "s3": {
+                        "bucket": bucket_name,
+                        "prefix": s3_key,
+                    },
+                },
+                "runtime": "PYTHON_3_12",
+                "entryPoint": ["main.py"],
             },
         },
         role_arn=test_context[ROLE_ARN_KEY],
         network_configuration={"networkMode": "PUBLIC"},
-        deferrable=True,
     )
     # [END howto_operator_bedrock_create_agent_runtime]
 
@@ -92,14 +148,24 @@ with DAG(
     )
     # [END howto_operator_bedrock_delete_agent_runtime]
 
+    delete_bucket = S3DeleteBucketOperator(
+        task_id="delete_bucket",
+        bucket_name=bucket_name,
+        force_delete=True,
+        trigger_rule=TriggerRule.ALL_DONE,
+    )
+
     chain(
         # TEST SETUP
         test_context,
+        create_bucket,
+        upload_code_task,
         # TEST BODY
         create_agent_runtime,
         invoke_agent_runtime,
         # TEST TEARDOWN
         delete_agent_runtime,
+        delete_bucket,
     )
 
     from tests_common.test_utils.watcher import watcher

Reply via email to