curlコマンドでIBM Cloud Object Storage(ICOS)にファイルをアップロードしてインターネットに向けて公開する方法です。
基本的には下記docsの通りではありますが、ICOSのEndpointが新しくなってる?とか、Bearer tokenってどうやって取得すればいいの?とか、ちょっと調べる必要があったので、備忘録として書いておきます。
https://cloud.ibm.com/docs/services/cloud-object-storage/iam?topic=cloud-object-storage-iam-public-access
bucketの公開設定は上記docsや、下記の手順で行います。
https://qiita.com/testnin2/items/6379e5bc5ea165212e15
ICOSのエンドポイント
ICOSのエンドポイント情報はこちらにあります。
https://cloud.ibm.com/docs/services/cloud-object-storage?topic=cloud-object-storage-endpoints#endpoints
TOKは s3.jp-tok.cloud-object-storage.appdomain.cloud ですね。
従来の s3.jp-tok.objectstorage.softlayer.net もありますが、新しいほうを使うのが無難でしょう。
Bearer tokenを取得
下記URLの手順でbearer tokenを入手します。
https://cloud.ibm.com/docs/iam?topic=iam-iamtoken_from_apikey
上記で使うapikeyをまだ持っていない場合は、下記画面で作成します。
Manage > Access(IAM) で、左側メニューから、IBM Cloud API Keysを選択。
https://cloud.ibm.com/iam#/apikeys
Bearer tokenを取得するコマンド
curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded" --header "Accept: application/json" --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" --data-urlencode "apikey=[上記で作成したapikey]" "https://iam.cloud.ibm.com/identity/token"
その出力。access_tokenの文字列をbearer tokenとして使います。略していますが、結構長いです。
{"access_token":"eyJraWQiOi・・・・・・略・・・・・・wcggXEqI6-0QqCg","refresh_token":"ReXaaamPhX・・・・・・略・・・・・・・rsXVSxGiS8A","ims_user_id":74xxxxx,"token_type":"Bearer","expires_in":3600,"expiration":1557396995,"scope":"ibm openid"}
上記で入手したaccess_tokenを使って、下記URLにあるcurlコマンドを組み立てます。
https://cloud.ibm.com/docs/services/cloud-object-storage/iam?topic=cloud-object-storage-iam-public-access
-Tオプションを使っている点が上記URLと違いますが、このオプションで、ローカルにあるアップロードしたいファイル名を指定します。成功すると、特にメッセージなくプロンプトが返ってきます。
$ curl -X PUT https://[自分のbucket名].s3.jp-tok.cloud-object-storage.appdomain.cloud/index.html -H "x-amz-acl: public-read" -H "Authorization: Bearer eyJraWQiOi・・・・・・略・・・・・・wcggXEqI6-0QqCg" -H "Content-Type: text/html" -T index.html
$
画像をアップするときはContent-Typeを image/png とかにすればOKです。
$ curl -X PUT https://[自分のbucket名].s3.jp-tok.cloud-object-storage.appdomain.cloud/cloud.png -H "x-amz-acl: public-read" -H "Authorization: Bearer eyJraWQiOi・・・・・・略・・・・・・wcggXEqI6-0QqCg" -H "Content-Type: image/png" -T cloud.png
$
ブラウザから、アップロードしたファイルが確認できました。
以上