やりたいこと
bashスクリプトで、(ociコマンドを使わずに)Oracle Cloud InfrastructureのObject Storageにファイルをアップロードする
参考にしたドキュメント
Oracle Cloud Infrastructure Documentation - Request Signatures
Oracle Cloud: upload large files through the Object Store REST API
コーソルさんのブログ (OCIオブジェクトストレージの論理構造とURL)
事前の作業
- OCIのユーザ作成
- バケット作成
- 鍵ペアの作成
- APIキーの追加
OCIのユーザ作成手順
手順は割愛
バケット作成手順
手順は割愛
鍵ペアの作成手順
鍵ペアの作成は、以下のドキュメントを参考に。
APIキーの追加手順
1.「OCIのユーザ作成」で作成したユーザ(オブジェクトストレージ接続用のユーザ)を使用してOCIコンソールにログイン
2. 画面右上の人マーク→ユーザID(メールアドレス)を押下。
3.「公開キーの追加」ボタンを押下
4. ポップアップ画面に、~/.oci/oci_api_key_public.pemの中身を張り付けて「追加」ボタンを押下
IDの確認
スクリプト内部に指定する、各種IDを確認します。
- テナントID
- ユーザID
- Keyフィンガープリント
テナントIDの確認手順
画面右上の人マーク→「テナンシ:<テナント名>」を押下後、以下の画面からOCIDの「コピー」リンクを押下します
ユーザIDの確認手順
画面右上の人マーク→ユーザID(メールアドレス)を押下後、以下の画面からOCIDの「コピー」リンクを押下します
Keyフィンガープリントの確認手順
上記「鍵ペアの作成手順」で作成した秘密鍵に対して以下のコマンドを実行します。
「APIキー」画面からも確認可能です。
$ openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c
スクリプトの作成
1.以下のスクリプトをコピーして貼り付けます
$ vi oci-curl.func
Oracle Cloud Infrastructure Documentation - Request Signatures - View the Bash sample in full screen for easier reading
2.スクリプト内の以下の変数を書き換えます
function oci-curl {
# TODO: update these values to your own
local tenancyId="ocid1.tenancy.oc1..aaaaaaaaba3pv6wkcr4jqae5f15p2b2m2yt2j6rx32uzr4h25vqstifsfdsq";
local authUserId="ocid1.user.oc1..aaaaaaaat5nvwcna5j6aqzjcaty5eqbb6qt2jvpkanghtgdaqedqw3rynjq";
local keyFingerprint="20:3b:97:13:55:1c:5b:0d:d3:37:d8:50:4e:c5:3a:34";
local privateKeyPath="/Users/someuser/.oci/oci_api_key.pem";
- tenancyIdは、「IDの確認」で確認したテナントIDの値に置き換える
- authUserIdは、「IDの確認」で確認したユーザIDの値に置き換える
- keyFingerprintは、「IDの確認」で確認したKeyフィンガープリントの値に置き換える
- privateKeyPathは、「鍵ペアの作成手順」で作成した秘密鍵のパスに置き換える
3.oci-curl関数の引数に指定する変数を設定 (任意)
引数にべたがきしてもいいのですが、指定する値の説明のため、ここでは変数化しています。
$ OCI_HOSTURL=objectstorage.ap-tokyo-1.oraclecloud.com
※オブジェクトストレージのリソースURLは、objectstorage.<リージョン名>.oraclecloud.com
$ OCI_TENANTNAME=<テナント名>
$ OCI_BUCKETNAME=<バケット名>
$ UPLOAD_FILE_PATH=<アップロードするファイルのローカルパス>
$ OCI_OBJECTFILE_NAME=<オブジェクトストレージ上のファイル名>
4.ファイルのアップロード
$ . oci-curl.func
$ oci-curl \${OCI_HOSTURL} PUT \${UPLOAD_FILE_PATH} "/n/\${OCI_TENANTNAME}/b/\${OCI_BUCKETNAME}/o/\${OCI_OBJECTFILE_NAME}"
※Proxyサーバを経由する場合は、事前に以下環境変数も設定します
$ export https_proxy=<プロキシサーバのIP>:<ポート>
→ ファイルがUploadできていることを確認します