Terraform では、モジュールを使用してコードを再利用できます。モジュールの詳細については、「基本構文」トピックをご参照ください。このトピックでは、Terraform モジュールを使用して Container Registry の名前空間とイメージリポジトリを作成する方法について説明します。また、イメージリポジトリにアクセスするために RAM ユーザーを作成し、承認する方法についても説明します。
背景
Alibaba Cloud Container Registry は、コンテナイメージや Helm チャートなど、Open Container Initiative (OCI) 標準に準拠したクラウドネイティブアーティファクトのための、安全なホスティングと効率的な配信プラットフォームです。Container Registry は、イメージのライフサイクル管理を容易にします。Container Registry の詳細については、「Container Registry とは」をご参照ください。DevOps ツールを使用して Alibaba Cloud のイメージリポジトリにアクセスする場合、承認された Alibaba Cloud アカウントを使用する必要があります。
前提条件
Container Registry が有効化されていること。詳細については、「課金」をご参照ください。
このチュートリアルで説明する操作を実行するには、RAM ユーザーを使用し、その RAM ユーザーに AliyunRAMFullAccess および AliyunContainerRegistryFullAccess 権限を付与することをお勧めします。詳細については、「RAM ユーザーの作成」および「RAM ユーザーへの権限付与」をご参照ください。
Terraform のランタイム環境は、次のいずれかの方法で準備します。
Explorer: Alibaba Cloud は Terraform のオンラインランタイム環境を提供します。この環境にログインすれば、Terraform をインストールすることなく使用できます。低コストで効率的かつ便利に Terraform を使用およびデバッグする必要があるシナリオに適しています。
Cloud Shell: Cloud Shell には Terraform がプリインストールされており、認証情報も設定済みです。Cloud Shell で Terraform コマンドを実行できます。低コストで効率的かつ便利に Terraform を使用およびアクセスする必要があるシナリオに適しています。
オンプレミスマシンに Terraform をインストールして設定する: ネットワーク接続が不安定な場合や、カスタム開発環境が必要なシナリオに適しています。
特定のリソースには料金が発生します。リソースが不要になった場合は、できるだけ早くリソースをリリースまたはサブスクリプションを解除する必要があります。
使用されるリソース
alicloud_cr_namespace: Container Registry の名前空間。
alicloud_cr_repo: イメージリポジトリ。
alicloud_ram_access_key: RAM ユーザーの AccessKey ペア。
alicloud_ram_login_profile: RAM ユーザーのコンソールログイン設定。
alicloud_ram_policy: ポリシー。
alicloud_ram_user: RAM ユーザー。
alicloud_ram_user_policy_attachment: RAM ユーザーに権限を付与します。
手順
作業ディレクトリを作成します。次に、そのディレクトリに main.tf という名前の設定ファイルを作成します。次のコードを main.tf 設定ファイルにコピーします。
provider "alicloud" {} resource "random_integer" "default" { min = 10000 max = 99999 } module "cr" { source = "roura356a/cr/alicloud" version = "1.3.1" # 名前空間の名前。 namespace = "cr_repo_namespace_auto-${random_integer.default.result}" # 作成および承認されるリポジトリ。 repositories = ["one", "two", "three"] # RAM ユーザーのログインパスワード。このテンプレートを使用する場合は、強力なパスワードを使用してください。 password = "YourPassword@123" }次のコマンドを実行して、Terraform ランタイム環境を初期化します。
terraform init次の情報が返された場合、Terraform は初期化されています。
Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.次のコマンドを実行して、コードを実行します。
terraform applyコードの実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドの実行が完了するまで待ちます。次の情報が返された場合、コードは実行されています。重要コードの実行後、AccessKey ペアを保存するファイルが現在のディレクトリに生成されます。AccessKey ペアは機密情報として扱ってください。
module.cr.data.alicloud_account.current: Reading... module.cr.data.alicloud_regions.current: Reading... module.cr.data.alicloud_account.current: Read complete after 0s [id=*******] module.cr.data.alicloud_regions.current: Read complete after 0s [id=******] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create ... Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 4 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成されたリソースの詳細をクエリします。
terraform show
コンソールへのログイン
Container Registry コンソールにログインし、 ページに移動し、[個人版インスタンス] をクリックし、 を選択して、作成されたリポジトリを表示します。

RAM コンソールにログインし、 を選択し、作成された RAM ユーザーの [ユーザーログイン名/表示名] をクリックします。

[権限] タブで、RAM ユーザーの権限を表示します。

リソースのリリース
Terraform を使用して作成または管理された上記のリソースが不要になった場合は、次のコマンドを実行してリソースをリリースします。terraform destroy コマンドの詳細については、「一般的なコマンド」をご参照ください。
terraform destroyリファレンス
Terraform の詳細については、「Terraform とは」をご参照ください。
ネットワーク遅延などの理由による
terraform initコマンドのタイムアウトは、プロバイダーをダウンロードできないなどの問題につながる可能性があります。この問題を解決する方法の詳細については、「Terraform Init の高速化設定」トピックをご参照ください。