はじめに
こちらのチュートリアルを参考に、REST APIをコールして、API Gateway経由でStreamingのメッセージを読み込みます。
アーキテクチャはこのようになります。
StreamingはメッセージをPutするProducerとGetするConsumerが必要ですが、今回はStreaming自身がサンプルメッセージを生成して、それをGetするだけの簡単なアーキテクチャです。
Streamの作成
OCIコンソールのストリーミング
からストリームの作成
をクリックします。
任意の名称を設定して、Auto-Create a default stream pool
を選択して、デフォルトストリームプールを合わせて作成します。
作成後のコンソールに表示されるOCID
とメッセージ・エンドポイント
をメモしておきます。
API Gatewayの作成
OCIコンソールのAPIゲートウェイ
からゲートウェイの作成
をクリックします。
以下のようにしてAPI Gatewayを作成します。なお、VCN、サブネットは作成済みです。
デプロイメント作成
作成したAPI Gatewayのコンソールからデプロイメント
デプロイメントの作成
をクリックします。
パス接頭辞は、先ほどメモしたストリームのOCIDと置き換えて、以下のようにします。
/20180418/streams/your_ocid_for_stream
今回は認証なしにします。
ルートは2つ設定します。
1のルーティング
は以下のように設定します。
URLは以下の書式で、先ほどメモしたストリーミング・エンドポイントとストリームOCIDで置き換えます。
<streaming_endpoint>/20180418/streams/<stream_ocid>/groupCursors
+別のルート
をクリックして、2のルーティング
を追加します。
URLは1のルーティングと同様ですが、最後の/groupCursors
を/messages
に置き換えます。
動作確認
テストメッセージの作成
ストリームのコンソールでテスト・メッセージの生成
をクリックします。
今回はとりあえずこのようなメッセージを作成します。
同様にもう一つメッセージを作成しました。
メッセージのロード
をクリックすると、作成したメッセージが表示されます。
サンプルコードからのテスト
サンプルコードをダウンロードします。
$ wget https://docs.oracle.com/en/learn/oci-streaming-api-gateway/files/consume_rest_api_oci_lab.py
--2023-08-23 01:52:15-- https://docs.oracle.com/en/learn/oci-streaming-api-gateway/files/consume_rest_api_oci_lab.py
Resolving docs.oracle.com (docs.oracle.com)... 104.120.11.151, 2600:140b:4800:49a::af5, 2600:140b:4800:480::af5
Connecting to docs.oracle.com (docs.oracle.com)|104.120.11.151|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3253 (3.2K) [text/plain]
Saving to: 'consume_rest_api_oci_lab.py'
consume_rest_api_oci_lab.py 100%[============================================================================================================================>] 3.18K --.-KB/s in 0s
2023-08-23 01:52:15 (58.7 MB/s) - 'consume_rest_api_oci_lab.py' saved [3253/3253]
サンプルコードのうち、以下の2ヶ所を環境に合わせて修正します。
73 # set your endpoint and stream OCID properly
74 base_endpoint = 'https://evu5xxxxxxxxxmkyh2po3gg2u.apigateway.uk-london-1.oci.customer-oci.com/20180418/streams/'
75 stream_ID = 'ocid1.stream.oc1.uk-london-1.amaaaaaassl65iqawvdfsa5xff574vrjwfsosv7pugxxxxxxxxxxxxxsrla'
Pythonのコードを実行してメッセージが表示されることを確認します。
下から3行目、4行目にメッセージが表示されています。
$ python3 consume_rest_api_oci_lab.py
Starting new HTTPS connection (1): evu54qn2bo37z2u.apigateway.uk-london-1.oci.customer-oci.com:443
send: b'POST /20180418/streams/ocid1.stream.oc1.uk-london-1.amaaaaaassl65iqawvdfsa5sosv7pug5qzzprfpf275wusrla/groupCursors HTTP/1.1\r\nuser-agent: python-requests/2.20.0\r\naccept-encoding: gzip, deflate\r\naccept: */*\r\nconnection: keep-alive\r\nContent-Length: 56\r\ncontent-type: application/json\r\ndate: Wed, 23 Aug 2023 01:56:24 GMT\r\nhost: evu54qn2bo37z2mkyh2po3gg2u.apigateway.uk-london-1.oci.customer-oci.com\r\nx-content-sha256: 32DcAKNbkZhzjroRYHgDS2QQx2YBKOtQRNtqcDowh+E=\r\nauthorization: Signature algorithm="rsa-sha256",headers="date (request-target) content-length content-type x-content-sha256",keyId="ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca/ocid1.user.oc1..aaaaaaaa4scxbela7cohxnxpj3vmi46b6uaar2fmcfs7pnbqxpqno6pgasfa/2a:9a:80:b0:bb:82:57:dc:99:e1:e2:95:dc:7b:4a:a6",signature="BczrLcEQdFUOn4ynCeMoITFeIxeSzD1bHGCiNcBgIMY3oevNtyXhQq+IX74UjhAuatbkLnKHgz32mvmG1wqJ2lfYagYnVAzKqITgnH+Jd+Us20Fwdy/uSn2qLOLRxoJC0rGvmsJiZmc7hkqJRDXcsHOSOIuyCUX3I2DWbTgSQqzRlQgEZl72lM/ueiCJlQM9QNBpacd/lbIqEohqUt+i/C2dl3RAIS5DE1MJhfpvQHE0WD3F5kxppoL7nDJjMIFJfZE8DZDxXvbckOe5Bu7SuBH8ppik8dYzjjDw==",version="1"\r\n\r\n'
send: b'{"groupName": "MyTestGroupName", "type": "TRIM_HORIZON"}'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Wed, 23 Aug 2023 01:56:25 GMT
header: Content-Type: application/json
header: Connection: keep-alive
header: Content-Length: 444
header: Server: Oracle API Gateway
header: X-Frame-Options: sameorigin
header: access-control-allow-methods: POST, PUT, GET, HEAD, DELETE, OPTIONS
header: opc-request-id: /00DE2CD06B1E0FCFC811FC8FEA8215BB/6AF0037D72FDA961117D209E9C892F8F
header: access-control-expose-headers: access-control-allow-credentials, access-control-allow-methods, access-control-allow-origin, connection, content-length, content-type, opc-client-info, opc-request-id
header: Strict-Transport-Security: max-age=31536000
header: access-control-allow-origin: *
header: X-Content-Type-Options: nosniff
header: X-XSS-Protection: 1; mode=block
header: access-control-allow-credentials: true
https://evu54qn2bo37z2mkyh2po3gg2u.apigateway.uk-london-1.oci.customer-oci.com:443 "POST /20180418/streams/ocid1.stream.oc1.uk-london-1.amaaaaaassl65iqaff574vrjwfsosv7pug5qzzprfpf275wusrla/groupCursors HTTP/1.1" 200 444
Starting new HTTPS connection (1): evu54qn2bo37z2m2u.apigateway.uk-london-1.oci.customer-oci.com:443
send: b'GET /20180418/streams/ocid1.stream.oc1.uk-london-1.amaaaaaassl65iqa574vrjwfsosv7pug5qzzprfpf275wusrla/messages?cursor=eyJjdXJzb3JUeXBlIjoiZ3JvdXAiLCJzdHJlYW1JZCI6Im9jaWQxLnN0cmVhbS5vYzEudWstbG9uZG9uLTEuYW1hYWFhYWFzc2w2NWlxYXd2ZGZzYTV4ZmY1NzR2cmp3ZnNvc3Y3cHVnNXF6enByZnBmMjc1d3VzcmxhIiwiZXhwaXJhdGlvbiI6MTY5MjAtMGU2MS00Y2RkLThlMTUtMDExOGQ5OWYzNDVkIiwib2Zmc2V0cyI6e30sImNvbW1pdE9uR2V0Ijp0cnVlLCJnZW5lcmF0aW9uIjowLCJ0aW1lb3V0SW5NcyI6MzAwMDAsImN1cnNvclR5cGUiOiJncm91cCJ9&limit=1000 HTTP/1.1\r\nuser-agent: python-requests/2.20.0\r\naccept-encoding: gzip, deflate\r\naccept: */*\r\nconnection: keep-alive\r\ncontent-type: application/json\r\ndate: Wed, 23 Aug 2023 01:56:25 GMT\r\nhost: evu54qn2bo37z2mkyh2po3gg2u.apigateway.uk-london-1.oci.customer-oci.com\r\nauthorization: Signature algorithm="rsa-sha256",headers="date (request-target)",keyId="ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca/ocid1.user.oc1..aaaaaaaa4scxbelai46b6uaar2fmcfs7pnbqxpqno6pgasfa/2a:9a:80:b0:bb:82:57:dc:99:e1:e2:95:dc:7b:4a:a6",signature="OyRE5seRVO1QpG8B2ZRPN5Pva+TNk4Rhey89pFn/+BTn2EIKBYz1ro16xG/IAWcxeLMyHA8d6gpvKpOU2EZdw7DUS4czsrr2DVyVDfjANcfyWqauxeveGuSxfaj7FLEuqX2TQKvdhl/wtV2EiEZ7d9i1ahTsL0C591dB7XEMZyUtXLOY4Whyl0jBWqpFie/F3RHaSeWfYP8pUR/bB1+re2eiCkIkFU72iawMaFZLsGv2FhRmovF40tLYcbLJU/ELE7AdUT9o5LAtJm2Gp/a03Nr40xkFz/Di9JgyvRJsg0AsDvrrnsMI6f3NyUjtDE/Qw7NaXJvJg==",version="1"\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Wed, 23 Aug 2023 01:56:26 GMT
header: Content-Type: application/json
header: Connection: keep-alive
header: Content-Length: 333
header: Server: Oracle API Gateway
header: opc-next-cursor: eyJjdXJzb3JUeXBlIjoiZ3JvdXAiLCJzdHJlYW1JZCI6Im9jaWQxLnN0cmVhbS5vYzEudWstbG9uZG9uLTEuYW1hYWFhYWFzc2w2NWlxYXd2ZGZzYTV4ZmY1NzR2cmp3ZnNvc3Y3cHVnNXF6enByZnBmMjc1d3VzcmxhIiwiZXhwaXJhdGlvbiI6MTY5Mjc1NjA4NjQ2MiwiZ3JvdXBOYW1lIjoiTXlUZXN0R3JvdXBOYW1lIiwiaW5zdGFuY2VOYW1lIjoiMzQ2MzhmMjAtMGU2MS0pb24iOjAsInRpbWVvdXRJbk1zIjozMDAwMCwiY3Vyc29yVHlwZSI6Imdyb3VwIn0=
header: X-Frame-Options: sameorigin
header: access-control-allow-methods: POST, PUT, GET, HEAD, DELETE, OPTIONS
header: opc-request-id: /DC59F76DB071CDAE8332390F33AC64A8/ECF570E1F2787580F2357D
header: access-control-expose-headers: access-control-allow-credentials, access-control-allow-methods, access-control-allow-origin, connection, content-length, content-type, opc-client-info, opc-next-cursor, opc-request-id
header: Strict-Transport-Security: max-age=31536000
header: access-control-allow-origin: *
header: X-Content-Type-Options: nosniff
header: X-XSS-Protection: 1; mode=block
header: access-control-allow-credentials: true
https://evu54qn2bo37z2mkyh2po3gg2u.apigateway.uk-london-1.oci.customer-oci.com:443 "GET /20180418/streams/ocid1.stream.oc1.uk-london-1.amaaaaaassl65iqawvdfsa5xff574vrjwfsosv7pug5qzzprfpf275wusrla/messages?cursor=eyJjdXJzb3JUeXBlIjoiZ3JvdXAiLCJzdHJlYW1JZCI6Im9jaWQxLnN0cmVhbS5vYzEudWstbG9uZG9uLTEuYW1hYWFhYWFzc2w2NWlxYXd2ZGZzYTV4ZmY1NzR2cmp3ZnNvc3Y3cHVnNXF6enByZnBmMjc1d3VzcmxhIiwiZXhwaXJhdGlvbiI6MzQ2MzhmMjAtMGU2MS00Y2RkLThlMTUtMDExOGQ5OWYzNDVkIiwib2Zmc2V0cyI6e30sImNvbW1pdE9uR2V0Ijp0cnVlLCJnZW5lcmF0aW9uIjowLCJ0aW1lb3V0SW5NcyI6MzAwMDAsImN1cnNvclR5cGUiOiJncm91cCJ9&limit=1000 HTTP/1.1" 200 333
[MESSAGE] This is test message1 from streaming.
[MESSAGE] This is test message2 from streaming.
Next Cursor for calling:
eyJjdXJzb3JUeXBlIjoiZ3JvdXAiLCJzdHJlYW1JZCI6Im9jaWQxLnN0cmVhbS5vYzEudWstbG9uZG9uLTEuYW1hYWFhYWFzc2w2NWlxYXd2ZGZzYTV4ZmY1NzR2cmp3ZnNvc3Y3cHVnNXF6enByZnBmMjc1d3VzcmxhIiwiZXhwaXJhdGlvbiI6MTY5Mjc1NjA4NjQ2MiwiZ3JvdXBOYW1lIjoiTXlUZXN0R3JvdXBOYW1lIiwiaW5zdGFuY2VOYW1lIjoiMzQ2Mz25HZXQiOnRydWUsImdlbmVyYXRpb24iOjAsInRpbWVvdXRJbk1zIjozMDAwMCwiY3Vyc29yVHlwZSI6Imdyb3VwIn0=