はじめに
以前に投稿した記事「IBM Cloud FunctionsのActionをHttpより呼び出せるようにする」では、UIのみでIBM Cloud Functionsの設定作業を行いました。
本記事ではコマンドを利用して上述の作業を行います。
設定作業は簡単で、記事の大半は動作確認です。
前提
- IBM Cloudが提供している2023/7/23時点の機能を用いています。
- 「IBM Cloud FunctionsのActionをHttpより呼び出せるようにする」の作業が行われていること。
準備
- リンク先の手順に従って、IBM Cloud コマンド・ライン・インターフェース (CLI) をインストールします。
- リンク先の手順に従って、Cloud Functions プラグインをインストールします。
- 2の手順に従い、IBM Cloudへのログインし名前空間のターゲットを指定します。
- 「IBM Cloud FunctionsのActionをHttpより呼び出せるようにする」で有効化したAction readEntitySequenceの「Webアクションとして有効化」を無効化(チェックを外す)します。
Webアクションの有効化
sample/readEntitySequenceのWebアクションを有効化します。
ibmcloud fn action update sample/readEntitySequence --web=true
ok: updated action sample/readEntitySequence
動作確認
「IBM Cloud FunctionsのActionをHttpより呼び出せるようにする」と同様に、Web アクション(認証なしで利用できるURL)とREST API(認証が必要かつPOSTメソッドのみのURL)の2つのURLで動作確認します。
Web アクション(認証なしで利用できるURL)での動作確認
WebアクションのURLを取得します。
ibmcloud fn action get sample/readEntitySequence --url
ok: got action readEntitySequence
https://us-south.functions.appdomain.cloud/api/v1/web/xxxxx/sample/readEntitySequence
Curlコマンドを使って動作確認します。
URLの最後に拡張子"json"を追加しています。これは稼働確認時に"204 No Content"が発生したため、その対策として拡張子を追加しました。
Curl https://us-south.functions.appdomain.cloud/api/v1/web/xxxxx/sample/readEntitySequence.json
レスポンスとしてentriesが含まれていることを確認します。
{
"entries": [{
"comment": "this is Hanako's comment",
"createdAt": "2022-08-30T12:00:17.584Z",
"email": "hanako@sample.com",
"icon": "https://secure.gravatar.com/avatar/190f9f022b4bfb762e152f1c3d6dd35a?s=64",
"name": "Hanako Suzuki"
}, {
"comment": "this is Taro's comment.",
"createdAt": "2022-11-22T13:47:31.157Z",
"email": "taro@sample.com",
"icon": "https://secure.gravatar.com/avatar/4179319e919e011a1aec1ca4d34100b1?s=64",
"name": "Taro Tanaka"
}]
}
REST API(認証が必要かつPOSTメソッドのみのURL)での動作確認
URLとBasic認証用のBASE64 エンコード値を取得します。
ibmcloud fn action get sample/readEntitySequence -v
※コマンド結果の後半は記載を割愛
REQUEST:
[GET] https://us-south.functions.cloud.ibm.com/api/v1/namespaces/_/actions/sample/readEntitySequence?code=false
Req Headers
{
"Authorization": [
"Basic xxxxxxxxxxxxx"
],
"User-Agent": [
"CloudFunctions-Plugin/1.0 (2023-06-14T19:55:08+00:00) windows amd64"
]
}
:
:
Curlを使って動作確認を行います。
- HTTP METHODはPOST(-X POST)
- Authorizationヘッダを使ってBASIC認証します(-H "Authorization:Basic [上述のAuthorizationに記載された値]")
- URLは上述のREQUESTに記載されたURL(namespacesの後の"_"には自身のnamespaceを設定する。上述の結果に含まれています。)
- クエリパラメーターとしてblocking=trueを付与
curl -X POST -H "Authorization:Basic xxxxxxxxxxxxx" https://us-south.functions.cloud.ibm.com/api/v1/namespaces/xxxxx/actions/sample/readEntitySequence?blocking=true
※処理結果(整形しています)
{
"activationId": "313f8545fe804994bf8545fe8059946d",
"annotations": [
{
"key": "topmost",
"value": true
},
{
"key": "path",
"value": "xxxxx/sample/readEntitySequence"
},
{
"key": "transId",
"value": "65e0cbbb10474d839dcf33778411481f"
},
{
"key": "kind",
"value": "sequence"
},
{
"key": "limits",
"value": {
"concurrency": 1,
"logs": 10,
"memory": 256,
"timeout": 60000
}
}
],
"duration": 830,
"end": 1690717914392,
"logs": [
"5d4ed518129a48bd8ed518129a98bd4f",
"dd8985ab139b43b08985ab139b73b046",
"203330bceda64d80b330bceda67d8050"
],
"name": "readEntitySequence",
"namespace": "XXXXX",
"publish": false,
"response": {
"result": {
"entries": [
{
"comment": "this is Hanako's comment",
"createdAt": "2022-08-30T12:00:17.584Z",
"email": "hanako@sample.com",
"icon": "https://secure.gravatar.com/avatar/190f9f022b4bfb762e152f1c3d6dd35a?s=64",
"name": "Hanako Suzuki"
},
{
"comment": "this is Taro's comment.",
"createdAt": "2022-11-22T13:47:31.157Z",
"email": "taro@sample.com",
"icon": "https://secure.gravatar.com/avatar/4179319e919e011a1aec1ca4d34100b1?s=64",
"name": "Taro Tanaka"
}
]
},
"size": 847,
"status": "success",
"success": true
},
"start": 1690717908396,
"subject": "XXXXX",
"version": "0.0.3"
}
entriesが含まれ、値が返ってきていることを確認します。