--- title: VMware Tanzu Application Service for VMs 6.0 (Small Footprint版) をAWSにインストールするメモ tags: ["AWS", "Cloud Foundry", "Pivotal Cloud Foundry", "Ops Manager", "TAS"] categories: ["Dev", "PaaS", "CloudFoundry", "PCF"] date: 2024-06-25T16:47:02Z updated: 2024-06-26T07:45:07Z --- [前の記事](/entries/801)で、VMware Tanzu Operations Manager (Ops Manager) をAWSにインストールをしました。 この記事では、構築した環境上にTanzu Application Service 6.0 (TAS) をインストールします。 **目次** ### Tanzu Application Serviceのインストール 構築する環境は次の図のようになります。Small Footprint版を使用するので、作成されるVMは * Compute (アプリが動作する場所、コンテナのビルドもここで行われる) * Control (APIサーバーや認証・認可サーバーなど) * Database (TASの情報を保存するMySQL) * Router (アプリやAPIサーバーへのアクセスの入り口) の4つです。これらが`tas`ネットワーク上に作成されます。 image TAS本体は"Tile"という形式でパッケージングされており、拡張子は`.pivotal`です。TASのTileを[Broadcom Support Portal](https://support.broadcom.com) (BSP) からダウンロードします。 BSPにログインして、次の図のように"Tanzu"を選択してください。 image "My downloads"から"VMware Tanzu Application Service for VMs"を選択してください。 image "VMware Tanzu Application Service for VMs"をクリックしてください。 image 6.0系の最新バージョン、下の図では`6.0.4+LTS-T`をクリックしてください。 image **"I agree to the Terms and Conditions"にチェックを入れて**、"Small Footprint TAS"をダウンロードしてください。 image `srt-6.0.4-build.3.pivotal`がダウンロードされます。ファイルサイズが18GB以上あるので、ディスク容量に気をつけてください。 Ops Managerのダッシュボードの左の"IMPORT A PRODUCT"ボタンをクリックして、ダウンロードしたファイルをアップロードしてください。ファイルサイズが大きいので時間がかかります。 image Tileのアップロードが完了すると、ダッシュボード左にアップロードしたプロダクト名とバージョンが表示されます。バージョン横の"+"ボタンをクリックしてください。 image "Small Footprint VMware Tanzu Application Service"のTileをクリックしてください。 image TASの設定を行います。 #### Assign AZs and Networks TASをデプロイする先のAZとNetworkを設定します。 image 1. `Place singleton jobs in AZ` に任意のAZを選択 (スケールアウトできないVMはこのAZにインストールされます。Compute, Control, Database, Routerは全てスケールアウトできます。) 2. `Balance other jobs in AZs` で全てのAZをチェック 3. `Network`で`tas`を選択 "Save"ボタンをクリックして設定を保存。 #### Domains TASで使用するドメイン名を設定します。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-domains.html image 1. `System domain`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .sys_dns_domain`の結果を設定 1. `Apps domain`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .apps_dns_domain`の結果を設定 "Save"ボタンをクリックして設定を保存。 #### Networking TASのNetwork関連の設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-networking.html 1. `Certificates and private keys for the Gorouter`で"Add"ボタンをクリック 1. Let's Encryptの場合、 1. `Name`に`lets-encrypt`を設定 1. `Certificate and private key `の`Certificate PEM`に`cat .lego/certificates/_.${SUBDOMAIN}.crt`の結果を設定。 1. `Certificate and private key `の`Private Key PEM`に`cat .lego/certificates/_.${SUBDOMAIN}.key`の結果を設定。 1. Self-Signed Certificatesの場合 1. `Name`に`self-signed`を設定 1. `Certificate and private key`で`Generate RSA Certificate`をクリックし、`Domain names (comma separated)`に`echo "*.$(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .sys_dns_domain),*.$(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .apps_dns_domain)"`の結果を設定し、"Generate"ボタンをクリック 1. `TLS termination point`で`Gorouter`を選択 1. `Add Zipkin tracing headers`のチェックを外す (W3Cのtracing headersがあれば十分) 1. `Add W3C tracing headers`をチェック "Save"ボタンをクリックして設定を保存。 #### App Developer Controls TASの開発者対する機能制限に関連する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-app-dev-controls.html image 1. `Allow space developers to manage network policies`をチェック #### App Security Groups TASのApp Security Groupに関する設定を行います。 image 1. `You are responsible for setting the appropriate ASGs after TAS for VMs finishes deploying.`に`X`を入力。 #### UAA UAA(認証・認可サーバー)対する機能制限に関連する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-uaa.html image 1. `SAML service provider certificate and private key`で 1. `Name`に`self-signed`を設定 1. `Certificate and private key`で`Generate RSA Certificate`をクリックし、`Domain names (comma separated)`に`echo "*.login.$(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .sys_dns_domain)"`の結果を設定し、"Generate"ボタンをクリック > [!NOTE] SAML service provideの機能は使用しません "Save"ボタンをクリックして設定を保存。 #### CredHub CredHub(機密情報管理サーバー)対する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-credhub.html image 1. `Internal encryption provider keys`で 1. "Add"ボタンをクリック 1. `Name`に`key1`を設定 1. `Key`に`echo ${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}`の結果を設定 1. `Primary`をチェック 1. `Secure service instance credentials`をチェック "Save"ボタンをクリックして設定を保存。 #### Internal MySQL 内部のMySQL対する設定を行います。 image 1. `Email address`にアラート通知先メールアドレスを設定 "Save"ボタンをクリックして設定を保存。 #### File Storage ファイルストレージに対する設定を行います。今回はTerraformで作成したS3バケットを使用します。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-file-storage.html image 1. `Cloud Controller filesystem` 1. `External S3-compatible filestore`を選択 1. `URL endpoint`に対象のリージョンの[S3 Endpoint URL](https://docs.aws.amazon.com/general/latest/gr/s3.html)を設定。通常は`echo https://s3.${AWS_REGION}.amazonaws.com`の値 1. `S3 AWS with instance profile`をチェック 1. `Region`に`echo $AWS_REGION`の結果を設定 1. `Use path-style S3 URLs (deprecated)`のチェックを外す 1. `Buildpacks bucket name`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .buildpacks_bucket_name`の結果を設定 1. `Droplets bucket name`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .droplets_bucket_name`の結果を設定 1. `Packages bucket name`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .packages_bucket_name`の結果を設定 1. `Resources bucket name`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .resources_bucket_name`の結果を設定 1. `Use versioning for backup and restore`をチェック #### Cloud Controller Cloud Controller(APIサーバー)対する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-cloud-controller.html image 1. `Available Stacks`で`cflinuxfs4 and tanzu-jammy`を選択 1. `Enable legacy MD5 buildpack paths. If disabled, xxhash64 is used for calculating paths in buildpack image layers.`のチェックを外す #### Errands Errands(インストールの後タスク)対する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-errands.html image * `App Autoscaler Errand`で`OFF`を選択 * `App Autoscaler Smoke Test Errand`で`OFF`を選択 * `NFS Broker Errand`で`OFF`を選択 * `SMB Broker Errand`で`OFF`を選択 #### Resource Config 作成するVMのリソースに対する設定を行います。 https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-resources.html image * `Database`の`VM TYPE`で`t3a.medium`を選択 * `Database`の`PERSISTENT DISK TYPE`で`10GB`を選択 * `Control`の`LOAD BALANCERS`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r '.ssh_target_group_name | "alb:" + .'`の結果を設定 * `Router`の`VM TYPE`で`t3a.micro`を選択 * `Router`の`LOAD BALANCERS`に`cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r '.web_target_group_names|map("alb:" + .)|join(",")'`の結果を設定 * `Backup Restore Node`の`INSTANCES`を`0`に設定 * `MySQL Monitor`の`INSTANCES`を`0`に設定 右上の"Save"ボタンをクリックして設定を保存。 #### VM Extensionの作成 今回Terraformで作成したAWSリソースをTASで使用する場合、次の項目がGUIからは設定できません 1. NLBからのHTTP(S)リクエストを許可するSecurity GroupをRouter VMに設定 1. NLBからのSSHリクエストを許可するSecurity GroupをControl VMに設定 1. S3に対するアクセスを許可するInstance ProfileをControl VMに設定 これらはGUIで設定する代わりに`om` CLIでVM Extensionを作成・設定することで利用可能になります。 次のドキュメントが参考になります。 * https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/configure-lb.html * https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/pas-file-storage.html#fog-with-aws-iam-instance-profiles-3 > [!TIP] > [VM Extension](https://bosh.io/docs/aws-cpi/#resource-pools)はVMに対して様々な機能を適用することのできる拡張ポイントです。VM Extensionを利用することで、TASでは公式に提供されていない機能を使用することができる可能性があります。 次のように3つのVM Extensionを定義するファイルを作成します。 ```yaml cat < vm-extension-web-lb-security-groups.yml --- vm-extension-config: name: web-lb-security-groups cloud_properties: security_groups: - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .web_lb_security_group_id) - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .platform_vms_security_group_id) --- EOF cat < vm-extension-ssh-lb-security-groups.yml --- vm-extension-config: name: ssh-lb-security-groups cloud_properties: security_groups: - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .ssh_lb_security_group_id) - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .platform_vms_security_group_id) --- EOF cat < vm-extension-cloud-controller-iam.yml --- vm-extension-config: name: cloud-controller-iam cloud_properties: iam_instance_profile: $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .tas_blobstore_iam_instance_profile_name) --- EOF ``` 次のコマンドでVM Extensionを作成します。 ``` om --env env.yml create-vm-extension -c vm-extension-web-lb-security-groups.yml om --env env.yml create-vm-extension -c vm-extension-ssh-lb-security-groups.yml om --env env.yml create-vm-extension -c vm-extension-cloud-controller-iam.yml ``` 次のように、Control及び、Router VMに適用したいVM Extensionを定義します。 ```yaml cat < additional-vm-extensions-cf.yml --- product-name: cf resource-config: control: additional_vm_extensions: - ssh-lb-security-groups - cloud-controller-iam router: additional_vm_extensions: - web-lb-security-groups --- EOF ``` 次のコマンドでVM ExtensionをVMに設定します。 ``` om --env env.yml configure-product -c additional-vm-extensions-cf.yml ``` ダッシュボードに戻り、"REVIEW CHANGES"ボタンをクリックします。 image BOSH Directorの"SEE CHANGES"をクリックしてください。 image `Cloud Config`の項目で、設定したVM Extensionが表示されるでしょう。(下の図では`cloud-controller-iam`が抜けていますが、上記の説明の通り設定すれば、それも表示されるはずです。) image 前の画面に戻って"APPLY CHANGES"ボタンをクリックしてください。 image インストールが進みます。環境に依ますが、30分から1時間くらいかかるかもしれません。 image "Changes Applied"と表示されれば、インストールは成功です。 image ### サンプルアプリのデプロイ インストールしたTASにアプリにデプロイしてみましょう。 TASの`admin`ユーザーのパスワードを取得します。TASのTileの"Credentials"タブをクリックしてください。 image "UAA"の項目までスクロールし、"Admin Credentials"の"Link to Credential"をクリックします。`admin`ユーザーのpasswordが表示されます。 image なお、`om` CLIを使用して、admin passwordを次のように取得することもできます。 ``` ADMIN_PASSWORD=$(om --env env.yml credentials -p cf -c .uaa.admin_credentials -f password) ``` 次のドキュメントを参考に`cf` CLIをインストールします。 * https://docs.cloudfoundry.org/cf-cli/install-go-cli.html ``` wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list sudo apt-get update sudo apt-get install cf8-cli -y ``` 次のバージョンで動作確認しました。 ``` $ cf --version cf version 8.7.10+5b7ce3c.2024-04-04 ``` 次のコマンドでログインします。 ``` SYSTEM_DOMAIN=$(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .sys_dns_domain) cf login -a api.${SYSTEM_DOMAIN} -u admin -p ${ADMIN_PASSWORD} -o system -s system ``` 次のような出力が表示されます。 ``` API endpoint: api.sys.sandbox.aws.maki.lol Authenticating... OK Targeted org system. Targeted space system. API endpoint: https://api.sys.sandbox.aws.maki.lol API version: 3.166.0 user: admin org: system space: system ``` `demo` orgと`demo` spaceを次のコマンドで作成します。 ``` cf create-org demo cf create-space demo -o demo cf target -o demo -s demo ``` サンプルJavaアプリのビルド済みJarファイルをダウンロードします。 ``` wget https://gist.github.com/making/fca49149aea3a7307b293685ba20c7b7/raw/6daab9a0a88fe0f36072ca4d1ee622d2354f3505/pcf-ers-demo1-0.0.1-SNAPSHOT.jar ``` `cf push`コマンドでアプリをデプロイします。 ``` cf push attendees -p pcf-ers-demo1-0.0.1-SNAPSHOT.jar -m 768m -b java_buildpack_offline ``` デプロイが完了すると`cf apps`コマンドで次のように状態を確認できます。 ``` $ cf apps Getting apps in org demo / space demo as admin... name requested state processes routes attendees started web:1/1, task:0/0 attendees.apps.sandbox.aws.maki.lol ``` 表示されたURLにアクセスしてください。次のような画面が表示されるでしょう。 image ### Apps Managerへのアクセス Apps ManagerはTASの開発者向け管理コンソールです。 URLは`https://apps.${SYSTEM_DOMAIN}`です。このURLのアクセスすると、ログイン画面にリダイレクトされます。 image `cf login`で使用したユーザー名とパスワードを入力して、"SIGN IN"ボタンをクリックしてください。(Ops Managerのアカウトと別です) 次のような画面にリダイレクトされます。 `demo` orgをクリックしてください。 image `demo` spaceをクリックしてください。 image `attendees` をクリックしてください。 image デプロイした`attendees`アプリに関する管理画面が表示されます。 image ### アンインストール Ops Managerのダッシュボードの右上のユーザー名をクリックし、"Advanced Options"をクリックしてください。 "DELETE THIS INSTALLATION"ボタンをクリックし、"Confirm"ボタンをクリックしてください。 image この状態で"Apply Changes"を実行すると、TASとBOSH Directorがアンインストールされます。 image > [!TIP] AWSのリソースは残しておく場合は、アンインストール前に、次のコマンドでTileの設定をExportしておくと良いです。 > > ``` > om --env env.yml staged-director-config --no-redact | grep -v guid: > director.yml > om --env env.yml staged-config -p cf > cf.yml > ``` > > 次回、同じAWSリソース上にインストールする場合は、 > > ``` > om --env env.yml configure-director -c director.yml > om --env env.yml configure-product -c cf.yml > ``` > でTileの設定ができます。 Ops Managerの削除は次のコマンドで行います。 ``` om vm-lifecycle delete-vm --config=opsman.yml -state-file=state.yml ``` > [!TIP] > > `AWS_ACCESS_KEY_ID`と`AWS_SECRET_ACCESS_KEY`が更新されている場合は、再度次のコマンドで`opsman.yml`を生成してください。 > > ```yaml > cat < opsman.yml > --- > opsman-configuration: > aws: > region: ${AWS_REGION} > vpc_subnet_id: $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .ops_manager_subnet_id) > security_group_ids: > - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .ops_manager_security_group_id) > - $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .platform_vms_security_group_id) > key_pair_name: $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .ops_manager_key_pair_name) > iam_instance_profile_name: $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .ops_manager_iam_instance_profile_name) > access_key_id: ${AWS_ACCESS_KEY_ID} > secret_access_key: ${AWS_SECRET_ACCESS_KEY} > public_ip: $(cat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_opsmanager.value -r | jq -r .ops_manager_public_ip) > private_ip: 10.0.0.10 > --- > EOF > ``` AWSリソースの削除は次のコマンドで行います。 ``` terraform destroy ```