概要
このガイドにはGCPの設計に役立つストレージ機能を実行します。
目的、
- バケットを作成して使用します
- アクセス制御リストを設定してアクセスを制限します
- ライフサイクルを管理します
- オブジェクトバージョンニングを実装します
- ディレクトリ同期を使用します
- IAMを使用してプロジェクト間でバケットを共有します
では、始めます( ^ω^)・・・
バケットを作成して使用します
[BUCKET_NAME_1] を作成します
バケット名を作成する方法:
Project_idは、myproj-01-12345→ Bucket nameは、storecore0112345
以下のようにバケットを作成して、残りの値はdefaultで設定します。
Property | Value |
---|---|
Name | Enter agobally unique name |
Location type | Multi-region |
Access control | Fine-grained (object-level permission in addition to your bucket-level permissions) |
例:プロジェクト1にてバケット「storecore04839fbc64ccc5」を作成します
サンプルファイルをダウンロードします
[BUCKET_NAME_1]を環境変数に保存します
export BUCKET_NAME_1=[BUCKET_NAME_1]
echo で確認します。
echo $BUCKET_NAME_1
サンプルファイルをダウンロードします(このサンプルファイルは、公開されているHadoopドキュメントのHTMLファイルです。)
curl http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html > setup.html
ファイルをコピーします
cp setup.html setup2.html cp setup.html setup3.html
アクセス制御リストを設定してアクセスを制限します(ACL)
ストレージへファイル準備します。
gsutil cp setup.html gs://$BUCKET_NAME_1
バケットオブジェクトのデフォルトのアクセス制限を取得するコマンドは次のようです
アクセス制限リストはacl.txtファイルに記録するコマンド
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt
フィアルの中身を表示するコマンド
cat acl.txt
アクセス制限を変更します
アクセスリストをプライベートへ変更するコマンド
gsutil acl get gs://$BUCKET_NAME_1/setup.html
実装結果を確認します
オーナーのみアクセスできるようになっています
アクセスリストを一般に読み取りへ変更するコマンド
gsutil acl ch -c AllUsers:R gs://$BUCKET_NAME_1/setup.html
実装結果を確認します
ストレージからファイルをコピーします
削除するコマンド
rm setup.html
削除された確認するコマンド
ls
ストレージからファイルをコピーするコマンド
gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html
aclのコマンドはここにご参考下さい。
残りのアクセス制限する方法、IAM設定はここにご参考下さい。
ライフサイクルを管理します
期限時間を過ごしすぎる場合、自動的にバケットを削除する処理はストレージの機能の一つです。
バケットのライフサイクルを設定する方法を説明します。
バケットの現在のライフサイクルポリシーを確認するコマンド
ディフォルトにはライフサイクル設定なしです
以下は現在にバケットのライフサイクル設定を確認するコマンドです。
gsutil lifecycle get gs://$BUCKET_NAME_1
ライフサイクルを設定する内容をファイルに記録します
フィアル名:lifecycle.json、以下のコマンドで作成します
nano lifecycle.json
以下の内情をフィアルにペーストします
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
Ctrl+O, Enterを押してファイルの内容が保存され、
Ctrl+Xを押してNanoを終了します。
cat lifecycle.json
を実行して作成したファイルを確認します
バケットポリシーを設定します
作成したJSONファイルを使ってコマンドでバケットのライフサイクルを設定します。
gsutil lifecycle set lifecycle.json gs://$BUCKET_NAME_1
バケットポリシーが変更されたのを確認します
設定が完成しました。31日後BUCKET_NAME_1は自動的に削除されます。
lifecycle
command must specify a bucket
lifecycleのコマンドについてここにご参考下さい
オブジェクトバージョンニングを実装します
削除または上書きされたオブジェクトを取得する為、バージョンニング機能があります。
バージョンニング無有を確認します
gsutil versioning get gs://$BUCKET_NAME_1
バージョンニングを有効/無効にします
gsutil versioning set on|off gs://$BUCKET_NAME_1
バージョンニング管理を使います
バージョンニング管理を有効してファイルの変更履歴が確認できます。バージョンニング管理を利用してみましょう
バケットは2つを作成してコンソルラインで利用するためExportします
export FROM_BUCKET_NAME=[BUCKET_NAME_1]
export TO_BUCKET_NAME=[BUCKET_NAME_2]
バケットのバージョンニングの無有効を設定します
バケット1:有効
バケット2:無効
バケット1のオブジェクトのバージョンニングを構成します
バケット1へファイルをコピーします
ファイルをコピーします
gsutil cp setup.html gs://$FROM_BUCKET_NAME/setup.html
gsutil cp setup2.html gs://$FROM_BUCKET_NAME/setup.html
gsutil cp setup3.html gs://$FROM_BUCKET_NAME/setup.html
gsutil cp setup2.html gs://$FROM_BUCKET_NAME/setup2.html
バケット1のオブジェクトのバージョンニングを取得します
gsutil ls -a gs://$FROM_BUCKET_NAME
結果をみましょう~
ファイルが公開するため、まずはフィアルのアクセス制限は設定します
gsutil acl ch -u AllUsers:R gs://$FROM_BUCKET_NAME/setup.html
setup.html は公開されています。
Public to internet をクリックします
バケット2へバケット1のオブジェクトののバージョンニングをコピーします
gs://storecore-01-04-bb6ff4dbac3e/setup.html#1585209834741358 // SETUP 1
gs://storecore-01-04-bb6ff4dbac3e/setup.html#1585209837050895 // SETUP 2
gs://storecore-01-04-bb6ff4dbac3e/setup.html#1585209839735716 // sETUP 3
gs://storecore-01-04-bb6ff4dbac3e/setup2.html#1585209865373421
バケット2へ setup.html#1585209834741358 バージョンをコピーします
gsutil cp gs://$FROM_BUCKET_NAME/setup.html#1585209834741358 gs://$TO_BUCKET_NAME/setup.html
バケット2へ setup.html#1585209837050895 バージョンをコピーします
gsutil cp gs://$FROM_BUCKET_NAME/setup.html#1585209837050895 gs://$TO_BUCKET_NAME/setup.html
ファイルが公開します
gsutil acl ch -u AllUsers:R gs://$TO_BUCKET_NAME/setup.html
Public to internet をクリックします
バケット2のオブジェクトのバージョンニングを確認します
バージョン履歴が記録されていません。最後の稼働のみが残っています。
この機能を有効にするとストレージコストが増加しますが、オブジェクトのライフサイクル管理を構成して古いオブジェクト バージョンが削除されるようにすれば、コストの増加をある程度軽減できます。
バージョンニングの利用方法はここにご参考下さい。
ディレクトリ同期を使用します
ディレクトリ構造を作成します
次のコマンドでfirstlevel フォルダ作成します
mkdir firstlevel
firstlevelへディレクトリしてsecondlevel フォルダを作成します
mkdir ./firstlevel/secondlevel
作成したフォルダへsetup.html ファイルをコピーしておきます
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
VMの第1レベルディレクトリをバケットと同期すします
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
FROM_BUCKET_NAME > firstlevel > secondlevel
IAMを使用してプロジェクト間でバケットを共有します
準備して置くもの
[PROJECT_1] > [BUCKET_NAME_1] > [FILE_NAME]
[PROJECT_2]
やることは、[PROJECT_2]が[BUCKET_NAME_1]をアクセス権限を付与して利用します。
なぜ、サービスアカウントを作成しないといけないなのかというとサービスアカウントはメンバーとしてアクセス権限を提供します。
(同じグーグルドメインの2つプロジェクの間のアクセス制限ならばサービスアカウントメンバーしなない。IAMメンバーの種類はここ記事にご参考下さい。)
IAMサービスアカウントを作成
Create service accountページを開いてサービスを作成します
サービスアカウント名: cross-project-storage
サービスアカウント役割: Storage Object Viewer
JSONファイルを作成します
credentials.jsonという名前へ保存します
[PROJECT_2]へ戻り VMを作成します
Property | Value |
---|---|
VM name | crossproject |
Region | europe-west1 |
Zone | europe-west1-d |
SSH をクリックして[PROJECT_1]のバケットをアクセスしてみます
エラー発生しました。観覧のアクセス権限が提供されていませんというエラーメッセージが出力されますした。
JSONファイルを利用してアクセル権限が付与されます
右上隅にある歯車のアイコンをクリックしてファイルをアップロードをクリックして以前に保留したJSONをアップロードします
認証するJSONをアップロードしました。
VMがGoogle Cloud APIを使用することを承認します。
gcloud auth activate-service-account --key-file credentials.json
では、もう一度[BUCKET_NAME_1]へアクセスしてみます
できましたよね
終了終了〜
キタ━━━━。゚+.ヽ(´∀`*)ノ ゚+.゚━━━━!!
一言
更に参考サイト
独立の暗号化キーを使用します
ストレージの機能を利用します
ここまで読んでいただき有難うございます。
間違いとか補足などがあればもしくは結構使える機能がまだ言えなければお教え下さい。
日本語の文法でも!よろしくお願いします〜