0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ACE】クラウドストレージ

Last updated at Posted at 2020-03-26

概要

このガイドにはGCPの設計に役立つストレージ機能を実行します。

目的、

  1. バケットを作成して使用します
  2. アクセス制御リストを設定してアクセスを制限します
  3. ライフサイクルを管理します
  4. オブジェクトバージョンニングを実装します
  5. ディレクトリ同期を使用します
  6. IAMを使用してプロジェクト間でバケットを共有します

では、始めます( ^ω^)・・・

バケットを作成して使用します

[BUCKET_NAME_1] を作成します
:writing_hand: バケット名を作成する方法:
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」を作成します
image.png

サンプルファイルをダウンロードします
[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
image.png

アクセス制御リストを設定してアクセスを制限します(ACL)

:information_desk_person_tone1: ストレージへファイル準備します。
gsutil cp setup.html gs://$BUCKET_NAME_1
image.png

結果を確認します
image.png

:information_desk_person_tone1: バケットオブジェクトのデフォルトのアクセス制限を取得するコマンドは次のようです
アクセス制限リストはacl.txtファイルに記録するコマンド
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt
フィアルの中身を表示するコマンド
cat acl.txt
image.png

:information_desk_person_tone1: アクセス制限を変更します
アクセスリストをプライベートへ変更するコマンド
gsutil acl get gs://$BUCKET_NAME_1/setup.html

実装結果を確認します
image.png
オーナーのみアクセスできるようになっています

アクセスリストを一般に読み取りへ変更するコマンド
gsutil acl ch -c AllUsers:R gs://$BUCKET_NAME_1/setup.html
実装結果を確認します
image.png

:information_desk_person_tone1: ストレージからファイルをコピーします

削除するコマンド
rm setup.html
削除された確認するコマンド
ls
image.png

ストレージからファイルをコピーするコマンド
gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html

image.png

:writing_hand: aclのコマンドはここにご参考下さい。
:writing_hand: 残りのアクセス制限する方法、IAM設定はここにご参考下さい。

ライフサイクルを管理します

期限時間を過ごしすぎる場合、自動的にバケットを削除する処理はストレージの機能の一つです。
バケットのライフサイクルを設定する方法を説明します。

:information_desk_person_tone1: バケットの現在のライフサイクルポリシーを確認するコマンド
ディフォルトにはライフサイクル設定なしです
以下は現在にバケットのライフサイクル設定を確認するコマンドです。
gsutil lifecycle get gs://$BUCKET_NAME_1
image.png
:information_desk_person_tone1: ライフサイクルを設定する内容をファイルに記録します
フィアル名:lifecycle.json、以下のコマンドで作成します
nano lifecycle.json
image.png
以下の内情をフィアルにペーストします

lifecycle.json
{
  "rule":
  [
    {
      "action": {"type": "Delete"},
      "condition": {"age": 31}
    }
  ]
}

image.png
Ctrl+O, Enterを押してファイルの内容が保存され、
Ctrl+Xを押してNanoを終了します。
cat lifecycle.jsonを実行して作成したファイルを確認します
image.png
:information_desk_person_tone1: バケットポリシーを設定します
作成したJSONファイルを使ってコマンドでバケットのライフサイクルを設定します。
gsutil lifecycle set lifecycle.json gs://$BUCKET_NAME_1
image.png
バケットポリシーが変更されたのを確認します
image.png
設定が完成しました。31日後BUCKET_NAME_1は自動的に削除されます。

:writing_hand: lifecycle command must specify a bucket
:writing_hand: lifecycleのコマンドについてここにご参考下さい

オブジェクトバージョンニングを実装します

削除または上書きされたオブジェクトを取得する為、バージョンニング機能があります。

:information_desk_person_tone1: バージョンニング無有を確認します
gsutil versioning get gs://$BUCKET_NAME_1
image.png

:information_desk_person_tone1: バージョンニングを有効/無効にします
gsutil versioning set on|off gs://$BUCKET_NAME_1
image.png

:information_desk_person_tone1: バージョンニング管理を使います
バージョンニング管理を有効してファイルの変更履歴が確認できます。バージョンニング管理を利用してみましょう

バケットは2つを作成してコンソルラインで利用するためExportします
export FROM_BUCKET_NAME=[BUCKET_NAME_1]
export TO_BUCKET_NAME=[BUCKET_NAME_2]
image.png

バケットのバージョンニングの無有効を設定します
バケット1:有効
バケット2:無効
image.png

バケット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

結果をみましょう~
image.png
ファイルが公開するため、まずはフィアルのアクセス制限は設定します
gsutil acl ch -u AllUsers:R gs://$FROM_BUCKET_NAME/setup.html
setup.html は公開されています。
image.png
Public to internet をクリックします
image.png

バケット2へバケット1のオブジェクトののバージョンニングをコピーします

versioning
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
image.png
ファイルが公開します
gsutil acl ch -u AllUsers:R gs://$TO_BUCKET_NAME/setup.html
image.png
Public to internet をクリックします
image.png

バケット2のオブジェクトのバージョンニングを確認します
image.png
バージョン履歴が記録されていません。最後の稼働のみが残っています。

:writing_hand: この機能を有効にするとストレージコストが増加しますが、オブジェクトのライフサイクル管理を構成して古いオブジェクト バージョンが削除されるようにすれば、コストの増加をある程度軽減できます。
:writing_hand: バージョンニングの利用方法はここにご参考下さい。

ディレクトリ同期を使用します

:information_desk_person_tone1: ディレクトリ構造を作成します
次のコマンドでfirstlevel フォルダ作成します
mkdir firstlevel
firstlevelへディレクトリしてsecondlevel フォルダを作成します
mkdir ./firstlevel/secondlevel
作成したフォルダへsetup.html ファイルをコピーしておきます
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
image.png

:information_desk_person_tone1: VMの第1レベルディレクトリをバケットと同期すします
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
image.png

結果を確認します
image.png

FROM_BUCKET_NAME
image.png

FROM_BUCKET_NAME > firstlevel
image.png

FROM_BUCKET_NAME > firstlevel > secondlevel
image.png

IAMを使用してプロジェクト間でバケットを共有します

準備して置くもの
[PROJECT_1] > [BUCKET_NAME_1] > [FILE_NAME]
[PROJECT_2]

やることは、[PROJECT_2]が[BUCKET_NAME_1]をアクセス権限を付与して利用します。
なぜ、サービスアカウントを作成しないといけないなのかというとサービスアカウントはメンバーとしてアクセス権限を提供します。
(同じグーグルドメインの2つプロジェクの間のアクセス制限ならばサービスアカウントメンバーしなない。IAMメンバーの種類はここ記事にご参考下さい。)

:information_desk_person_tone1: IAMサービスアカウントを作成
Create service accountページを開いてサービスを作成します
サービスアカウント名: cross-project-storage
image.png

サービスアカウント役割: Storage Object Viewer
image.png

JSONファイルを作成します
credentials.jsonという名前へ保存します
image.png

:information_desk_person_tone1: [PROJECT_2]へ戻り VMを作成します

Property Value
VM name crossproject
Region europe-west1
Zone europe-west1-d

image.png
SSH をクリックして[PROJECT_1]のバケットをアクセスしてみます
image.png

エラー発生しました。観覧のアクセス権限が提供されていませんというエラーメッセージが出力されますした。

:information_desk_person_tone1: JSONファイルを利用してアクセル権限が付与されます
右上隅にある歯車のアイコンをクリックしてファイルをアップロードをクリックして以前に保留したJSONをアップロードします
image.png
認証するJSONをアップロードしました。
image.png

JSONファイルは既にアップロードされた確認です
image.png

VMがGoogle Cloud APIを使用することを承認します。
gcloud auth activate-service-account --key-file credentials.json
image.png

では、もう一度[BUCKET_NAME_1]へアクセスしてみます
image.png

できましたよね
終了終了〜
キタ━━━━。゚+.ヽ(´∀`*)ノ ゚+.゚━━━━!!

一言

更に参考サイト
:writing_hand: 独立の暗号化キーを使用します
:writing_hand: ストレージの機能を利用します

ここまで読んでいただき有難うございます。
間違いとか補足などがあればもしくは結構使える機能がまだ言えなければお教え下さい。
日本語の文法でも!よろしくお願いします〜

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?