LoginSignup
0
0

IBM Cloud FunctionsのActionをHttpより呼び出せるようにする(コマンドを使って構築)

Last updated at Posted at 2023-07-30

はじめに

以前に投稿した記事「IBM Cloud FunctionsのActionをHttpより呼び出せるようにする」では、UIのみでIBM Cloud Functionsの設定作業を行いました。
本記事ではコマンドを利用して上述の作業を行います。
設定作業は簡単で、記事の大半は動作確認です。

前提

準備

  1. リンク先の手順に従って、IBM Cloud コマンド・ライン・インターフェース (CLI) をインストールします。
  2. リンク先の手順に従って、Cloud Functions プラグインをインストールします。
  3. 2の手順に従い、IBM Cloudへのログインし名前空間のターゲットを指定します。
  4. 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が含まれ、値が返ってきていることを確認します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0