Google Cloud SDK をAmazon Linux 2環境にインストール(yum+サービスアカウントキーの利用)
個人的Google Cloud SDK導入備忘録 第3弾。当エントリではAmazon Linux 2環境にGoogle Cloud SDKを導入する手順について見ていきたいと思います。Amazon Linux 2環境にyumで導入後、認証部分もファイルを利用する形で対応する方法を当エントリでは試します。
- Google Cloud SDK をMac OS X環境にインストール | DevelopersIO
- Google Cloud SDK をAmazon Linux 2環境にインストール(スクリプトベース+検証コード利用) | DevelopersIO
サービスアカウントキー(JSON)の作成
当エントリの手順では、まずはじめに『サービスアカウントキー』というものを作成します。
サービスアカウント及びサービスアカウントキーの詳細については以下をご参照ください。他のプラットフォームやオンプレミスなど GCP の外部でサービス アカウントを使用するための情報として『サービスアカウントキー』を作成し、JSONファイルとして作成します。
- サービス アカウント | Cloud Identity and Access Management のドキュメント | Google Cloud
- サービス アカウントキーの作成と管理 | Cloud Identity and Access Management のドキュメント | Google Cloud
GCP管理コンソールにアクセスし、対象プロジェクトの[IAMと管理]から[サービスアカウント]を選択。
プロジェクト配下のサービスアカウント一覧が表示されます。一覧上部の[サービスアカウントを作成]を選択。
必要な情報を入力し、[作成]を押下。
サービスアカウントに付与する権限を設定します。[役割を選択]を押下し、
任意の役割を選択します。
ここは一旦そのまま[完了]押下で進めました。
サービスアカウントが作成されました。
対象となるサービスアカウントの[操作]から[鍵を作成]を選択。
[秘密鍵の作成]でキーのタイプをデフォルトの[JSON]のまま、[作成]を押下。
秘密鍵が作成・保存されました。このファイルは後述の手順で用います。
Google Cloud SDKインストール手順 in Amazon Linux 2(yum+検証コード利用):実践
そして次のステップ:導入環境へと進みます。今回はAmazon Linux 2を用意しました。
$ ssh -i gcp-xxxxxxxxxxxxx-key.pem ec2-user@xx.xxx.xx.xxx $ sudo yum -y update $ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/" $
Google Cloud SDKにはPython2.7.x環境が必要となります。Amazon Linux2の場合であればインスタンス起動時に既に利用可能な状態にあるのでそのまま次に進みます。
$ python --version Python 2.7.16
導入に必要なリポジトリの追加設定を行います。以下コマンドで*.repoファイルを新規作成。
$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM [google-cloud-sdk] name=Google Cloud SDK baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
yumコマンドで対象ライブラリをインストールします...ですが、公式ドキュメントに則った形でyumコマンドを実行すると、以下のようにエラーとなってしまいました。
sudo yum -y install google-cloud-sdk Loaded plugins: extras_suggestions, langpacks, priorities, update-motd google-cloud-sdk/signature | 454 B 00:00:00 Retrieving key from https://packages.cloud.google.com/yum/doc/yum-key.gpg Importing GPG key 0xA7317B0F: Userid : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>" Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f From : https://packages.cloud.google.com/yum/doc/yum-key.gpg Retrieving key from https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg google-cloud-sdk/signature | 1.4 kB 00:00:00 !!! https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64/repodata/repomd.xml: [Errno -1] repomd.xml signature could not be verified for google-cloud-sdk Trying other mirror. One of the configured repositories failed (Google Cloud SDK), and yum doesn't have enough cached data to continue. At this point the only safe thing yum can do is fail. There are a few ways to work "fix" this: 1. Contact the upstream for the repository and get them to fix the problem. 2. Reconfigure the baseurl/etc. for the repository, to point to a working upstream. This is most often useful if you are using a newer distribution release than is supported by the repository (and the packages for the previous distribution release still work). 3. Run the command with the repository temporarily disabled yum --disablerepo=google-cloud-sdk ... 4. Disable the repository permanently, so yum won't use it by default. Yum will then just ignore the repository until you permanently enable it again or use --enablerepo for temporary usage: yum-config-manager --disable google-cloud-sdk or subscription-manager repos --disable=google-cloud-sdk 5. Configure the failing repository to be skipped, if it is unavailable. Note that yum will try to contact the repo. when it runs most commands, so will have to try and fail each time (and thus. yum will be be much slower). If it is a very temporary problem though, this is often a nice compromise: yum-config-manager --save --setopt=google-cloud-sdk.skip_if_unavailable=true failure: repodata/repomd.xml from google-cloud-sdk: [Errno 256] No more mirrors to try. https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64/repodata/repomd.xml: [Errno -1] repomd.xml signature could not be verified for google-cloud-sdk $
エラーメッセージから解決策を探ったところ、以下の情報を発見。リポジトリ設定の幾つかが影響していたようです。
ページの内容に従い、以下の2行をコメントアウト。
$ sudo vi /etc/yum.repos.d/google-cloud-sdk.repo [google-cloud-sdk] name=Google Cloud SDK baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64 enabled=1 ##gpgcheck=1 ##repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
保存後改めてyumアップデートを実行。今度は上手く行きました!
$ sudo yum -y install google-cloud-sdk Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 2.4 kB 00:00:00 amzn2extra-docker | 1.3 kB 00:00:00 google-cloud-sdk | 1.4 kB 00:00:00 google-cloud-sdk/primary | 121 kB 00:00:00 google-cloud-sdk 864/864 Resolving Dependencies --> Running transaction check ---> Package google-cloud-sdk.noarch 0:260.0.0-1.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================ Installing: google-cloud-sdk noarch 260.0.0-1.el7 google-cloud-sdk 34 M Transaction Summary ============================================================================================================================================ Install 1 Package Total download size: 34 M Installed size: 166 M Downloading packages: warning: /var/cache/yum/x86_64/2/google-cloud-sdk/packages/6812XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcb47-google-cloud-sdk-260.0.0-1.el7.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 3e1ba8d5: NOKEY Public key for 6812XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcb47-google-cloud-sdk-260.0.0-1.el7.noarch.rpm is not installed 6812XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcb47-google-cloud-sdk-260.0.0-1.el7.noarch.rpm | 34 MB 00:00:00 Retrieving key from https://packages.cloud.google.com/yum/doc/yum-key.gpg Importing GPG key 0xA7317B0F: Userid : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>" Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f From : https://packages.cloud.google.com/yum/doc/yum-key.gpg Retrieving key from https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg Importing GPG key 0x3E1BA8D5: Userid : "Google Cloud Packages RPM Signing Key <gc-team@google.com>" Fingerprint: 3749 e1ba 95a8 6ce0 5454 6ed2 f09c 394c 3e1b a8d5 From : https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : google-cloud-sdk-260.0.0-1.el7.noarch 1/1 Verifying : google-cloud-sdk-260.0.0-1.el7.noarch 1/1 Installed: google-cloud-sdk.noarch 0:260.0.0-1.el7 Complete! $
上記までの手順でコマンド自体は導入完了です。ですがこの段階ではまだアカウントログイン認証(の設定)が済んでいないため、コマンドを実行すると以下の様にエラーとなってしまいます。
$ exit $ ssh -i gcp-xxxxxxxxxxxxxxxxxx.pem ec2-user@xxx.xx.xxx.xx $ gcloud projects list ERROR: (gcloud.projects.list) You do not currently have an active account selected. Please run: $ gcloud auth login to obtain new credentials, or if you have already logged in with a different account: $ gcloud config set account ACCOUNT to select an already authenticated account to use.
ここで、前述の手順で作成したサービスアカウントキーの出番です。ファイルを配備した上でgcloud auth activate-service-accountコマンドを実行。認証操作がブラウザを介すること無く行うことが出来ました。
$ vi gcp-service-account-key.json $ gcloud auth activate-service-account \ gcp-sa-for-al2-20190903@xxxxxxxxxxxxxx.iam.gserviceaccount.com \ --key-file /home/ec2-user/gcp-service-account-key.json \ --project cm-xxxxxxxxxxxxxx Activated service account credentials for: [gcp-sa-for-al2-20190903@cm-xxxxxxxxxx.iam.gserviceaccount.com]
認証、設定周りのコマンドで内容を確認してみます。ちゃんと出来てますね!
- gcloud auth list | Cloud SDK | Google Cloud
- gcloud config list | Cloud SDK | Google Cloud
- よく使うgcloudコマンドたち - Qiita
$ gcloud auth list Credentialed Accounts ACTIVE ACCOUNT * gcp-sa-for-al2-20190903@cm-xxxxxxxxxxx.iam.gserviceaccount.com To set the active account, run: $ gcloud config set account `ACCOUNT` $ gcloud config list [core] account = gcp-sa-for-al2-20190903@cm-xxxxxxxxxxx.iam.gserviceaccount.com disable_usage_reporting = True project = cm-xxxxxxxxxxx Your active configuration is: [default] ====
gcloud components updateコマンドでツールのアップデートを試みてみましたが、エラーが出てしまいました。この辺、yum実行時に設定ファイルを微調整した影響でしょうか。ひとまず代替コマンドは提供されているのでそれに従い処理を実行、アップデート作業自体は出来ました。
$ gcloud components update ERROR: (gcloud.components.update) You cannot perform this action because the Cloud SDK component manager is disabled for this installation. You can run the following command to achieve the same result for this installation: sudo yum makecache && sudo yum update kubectl google-cloud-sdk google-cloud-sdk-app-engine-grpc google-cloud-sdk-pubsub-emulator google-cloud-sdk-app-engine-go google-cloud-sdk-firestore-emulator google-cloud-sdk-cloud-build-local google-cloud-sdk-datastore-emulator google-cloud-sdk-app-engine-python google-cloud-sdk-cbt google-cloud-sdk-bigtable-emulator google-cloud-sdk-datalab google-cloud-sdk-app-engine-java $ sudo yum makecache && sudo yum update kubectl google-cloud-sdk google-cloud-sdk-app-engine-grpc google-cloud-sdk-pubsub-emulator google-cloud-sdk-app-engine-go google-cloud-sdk-firestore-emulator google-cloud-sdk-cloud-build-local google-cloud-sdk-datastore-emulator google-cloud-sdk-app-engine-python google-cloud-sdk-cbt google-cloud-sdk-bigtable-emulator google-cloud-sdk-datalab google-cloud-sdk-app-engine-java Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 2.4 kB 00:00:00 amzn2extra-docker | 1.3 kB 00:00:00 google-cloud-sdk | 1.4 kB 00:00:00 (1/6): amzn2extra-docker/2/x86_64/filelists_db | 9.3 kB 00:00:00 (2/6): amzn2-core/2/x86_64/other_db | 504 B 00:00:00 (3/6): amzn2extra-docker/2/x86_64/other_db | 504 B 00:00:00 (4/6): google-cloud-sdk/other | 38 kB 00:00:00 (5/6): amzn2-core/2/x86_64/filelists_db | 29 MB 00:00:01 (6/6): google-cloud-sdk/filelists | 25 MB 00:00:01 google-cloud-sdk 878/878 google-cloud-sdk 878/878 Metadata Cache Created Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Package(s) kubectl available, but not installed. Package(s) google-cloud-sdk-app-engine-grpc available, but not installed. Package(s) google-cloud-sdk-pubsub-emulator available, but not installed. Package(s) google-cloud-sdk-app-engine-go available, but not installed. Package(s) google-cloud-sdk-firestore-emulator available, but not installed. Package(s) google-cloud-sdk-cloud-build-local available, but not installed. Package(s) google-cloud-sdk-datastore-emulator available, but not installed. Package(s) google-cloud-sdk-app-engine-python available, but not installed. Package(s) google-cloud-sdk-cbt available, but not installed. Package(s) google-cloud-sdk-bigtable-emulator available, but not installed. Package(s) google-cloud-sdk-datalab available, but not installed. Package(s) google-cloud-sdk-app-engine-java available, but not installed. No packages marked for update $ $ gcloud version Google Cloud SDK 261.0.0 alpha 2019.08.30 beta 2019.08.30 bq 2.0.47 core 2019.08.30 gsutil 4.42 kubectl 2019.08.30
まとめ
というわけでGoogle Cloud SDKのインストール手順、Amazon Linux 2&サービスアカウントキー利用の場合の手順のご紹介でした。公式の手順に則って進めた部分で一部進まない部分があったのが気になりますが、一旦はここで区切りとしてまた別の機会に確認してみたいと思います。