前の記事で、VMware Tanzu Operations Manager (Ops Manager) をAWSにインストールをしました。
この記事では、構築した環境上にTanzu Application Service 6.0 (TAS) をインストールします。
目次
- Tanzu Application Serviceのインストール
- Assign AZs and Networks
- Domains
- Networking
- App Developer Controls
- App Security Groups
- UAA
- CredHub
- Internal MySQL
- File Storage
- Cloud Controller
- Errands
- Resource Config
- VM Extensionの作成
- サンプルアプリのデプロイ
- Apps Managerへのアクセス
- アンインストール
Tanzu Application Serviceのインストール
構築する環境は次の図のようになります。Small Footprint版を使用するので、作成されるVMは
- Compute (アプリが動作する場所、コンテナのビルドもここで行われる)
- Control (APIサーバーや認証・認可サーバーなど)
- Database (TASの情報を保存するMySQL)
- Router (アプリやAPIサーバーへのアクセスの入り口)
の4つです。これらがtasネットワーク上に作成されます。
TAS本体は"Tile"という形式でパッケージングされており、拡張子は.pivotalです。TASのTileをBroadcom Support Portal (BSP) からダウンロードします。
BSPにログインして、次の図のように"Tanzu"を選択してください。
"My downloads"から"VMware Tanzu Application Service for VMs"を選択してください。
"VMware Tanzu Application Service for VMs"をクリックしてください。
6.0系の最新バージョン、下の図では6.0.4+LTS-Tをクリックしてください。
"I agree to the Terms and Conditions"にチェックを入れて、"Small Footprint TAS"をダウンロードしてください。
srt-6.0.4-build.3.pivotalがダウンロードされます。ファイルサイズが18GB以上あるので、ディスク容量に気をつけてください。
Ops Managerのダッシュボードの左の"IMPORT A PRODUCT"ボタンをクリックして、ダウンロードしたファイルをアップロードしてください。ファイルサイズが大きいので時間がかかります。
Tileのアップロードが完了すると、ダッシュボード左にアップロードしたプロダクト名とバージョンが表示されます。バージョン横の"+"ボタンをクリックしてください。
"Small Footprint VMware Tanzu Application Service"のTileをクリックしてください。
TASの設定を行います。
Assign AZs and Networks
TASをデプロイする先のAZとNetworkを設定します。
Place singleton jobs in AZに任意のAZを選択 (スケールアウトできないVMはこのAZにインストールされます。Compute, Control, Database, Routerは全てスケールアウトできます。)Balance other jobs in AZsで全てのAZをチェックNetworkでtasを選択
"Save"ボタンをクリックして設定を保存。
Domains
TASで使用するドメイン名を設定します。
https://docs.vmware.com/en/VMware-Tanzu-Application-Service/6.0/tas-for-vms/config-domains.html
System domainにcat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .sys_dns_domainの結果を設定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
Certificates and private keys for the Gorouterで"Add"ボタンをクリック- Let's Encryptの場合、
Nameにlets-encryptを設定Certificate and private keyのCertificate PEMにcat .lego/certificates/_.${SUBDOMAIN}.crtの結果を設定。Certificate and private keyのPrivate Key PEMにcat .lego/certificates/_.${SUBDOMAIN}.keyの結果を設定。
- Self-Signed Certificatesの場合
Nameにself-signedを設定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"ボタンをクリック
- Let's Encryptの場合、
TLS termination pointでGorouterを選択Add Zipkin tracing headersのチェックを外す (W3Cのtracing headersがあれば十分)Add W3C tracing headersをチェック
"Save"ボタンをクリックして設定を保存。
App Developer Controls
TASの開発者対する機能制限に関連する設定を行います。
Allow space developers to manage network policiesをチェック
App Security Groups
TASのApp Security Groupに関する設定を行います。
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
SAML service provider certificate and private keyでNameにself-signedを設定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
Internal encryption provider keysで- "Add"ボタンをクリック
Nameにkey1を設定Keyにecho ${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM}の結果を設定Primaryをチェック
- "Add"ボタンをクリック
Secure service instance credentialsをチェック
"Save"ボタンをクリックして設定を保存。
Internal MySQL
内部のMySQL対する設定を行います。
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
Cloud Controller filesystemExternal S3-compatible filestoreを選択URL endpointに対象のリージョンのS3 Endpoint URLを設定。通常はecho https://s3.${AWS_REGION}.amazonaws.comの値S3 AWS with instance profileをチェックRegionにecho $AWS_REGIONの結果を設定Use path-style S3 URLs (deprecated)のチェックを外すBuildpacks bucket nameにcat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .buildpacks_bucket_nameの結果を設定Droplets bucket nameにcat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .droplets_bucket_nameの結果を設定Packages bucket nameにcat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .packages_bucket_nameの結果を設定Resources bucket nameにcat tas-paving-aws/terraform.tfstate | jq .outputs.stable_config_tas.value -r | jq -r .resources_bucket_nameの結果を設定Use versioning for backup and restoreをチェック
Cloud Controller
Cloud Controller(APIサーバー)対する設定を行います。
Available Stacksでcflinuxfs4 and tanzu-jammyを選択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
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
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からは設定できません
- NLBからのHTTP(S)リクエストを許可するSecurity GroupをRouter VMに設定
- NLBからのSSHリクエストを許可するSecurity GroupをControl VMに設定
- 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はVMに対して様々な機能を適用することのできる拡張ポイントです。VM Extensionを利用することで、TASでは公式に提供されていない機能を使用することができる可能性があります。
次のように3つのVM Extensionを定義するファイルを作成します。
cat <<EOF > 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 <<EOF > 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 <<EOF > 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を定義します。
cat <<EOF > 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"ボタンをクリックします。
BOSH Directorの"SEE CHANGES"をクリックしてください。
Cloud Configの項目で、設定したVM Extensionが表示されるでしょう。(下の図ではcloud-controller-iamが抜けていますが、上記の説明の通り設定すれば、それも表示されるはずです。)
前の画面に戻って"APPLY CHANGES"ボタンをクリックしてください。
インストールが進みます。環境に依ますが、30分から1時間くらいかかるかもしれません。
"Changes Applied"と表示されれば、インストールは成功です。
サンプルアプリのデプロイ
インストールしたTASにアプリにデプロイしてみましょう。
TASのadminユーザーのパスワードを取得します。TASのTileの"Credentials"タブをクリックしてください。
"UAA"の項目までスクロールし、"Admin Credentials"の"Link to Credential"をクリックします。adminユーザーのpasswordが表示されます。
なお、om CLIを使用して、admin passwordを次のように取得することもできます。
ADMIN_PASSWORD=$(om --env env.yml credentials -p cf -c .uaa.admin_credentials -f password)
次のドキュメントを参考にcf CLIをインストールします。
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にアクセスしてください。次のような画面が表示されるでしょう。
Apps Managerへのアクセス
Apps ManagerはTASの開発者向け管理コンソールです。
URLはhttps://apps.${SYSTEM_DOMAIN}です。このURLのアクセスすると、ログイン画面にリダイレクトされます。
cf loginで使用したユーザー名とパスワードを入力して、"SIGN IN"ボタンをクリックしてください。(Ops Managerのアカウトと別です)
次のような画面にリダイレクトされます。
demo orgをクリックしてください。
demo spaceをクリックしてください。
attendees をクリックしてください。
デプロイしたattendeesアプリに関する管理画面が表示されます。
アンインストール
Ops Managerのダッシュボードの右上のユーザー名をクリックし、"Advanced Options"をクリックしてください。
"DELETE THIS INSTALLATION"ボタンをクリックし、"Confirm"ボタンをクリックしてください。
この状態で"Apply Changes"を実行すると、TASとBOSH Directorがアンインストールされます。
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を生成してください。
cat <<EOF > 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