Skip to main content

AWSでのApp Builder

このガイドでは、AWSでApp Builderを設定し、データ分析とインサイトを自動化する方法について説明します。以下の手順に従うことで、セットアップを効率的に設定および最適化できます。

必要条件

アカウントのセットアップ

ステップ1: IAMの設定

ステップ1a: App BuilderのIAMポリシーを作成

注記

AAC_AppBuilder_SA_Policyは、ポリシー名の例です。ポリシーには任意の名前を指定できますが、その名前は「AAC_AppBuilder」で始まる必要があります

カスタムIAMポリシーを作成する必要があります。名前を「AAC_AppBuilder_SA_Policy」とし、以下のポリシードキュメントを添付します。ビジュアルエディターではなくJSONタブを使用することをお勧めします。実行するには、Alteryx Oneに一部*権限が必要です。ポリシーの作成時に、セキュリティ警告が何件か発生する場合があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEqualsIfExists": {
                    "iam:PassedToService": [
                        "ec2.amazonaws.com",
                        "ec2.amazonaws.com.cn"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:CreateServiceLinkedRole",
                "kms:CreateGrant",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:Encrypt",
                "kms:GetKeyPolicy",
                "kms:GetKeyRotationStatus",
                "kms:ListGrants",
                "kms:ListResourceTags",
                "kms:ListRetirableGrants",
                "kms:PutKeyPolicy",
                "kms:RetireGrant",
                "kms:RevokeGrant",
                "kms:ScheduleKeyDeletion",
                "kms:TagResource",
                "kms:UntagResource"
            ],
            "Resource": [
                "arn:aws:eks:*:*:addon/*/*/*",
                "arn:aws:eks:*:*:cluster/*",
                "arn:aws:eks:*:*:nodegroup/*/*/*",
                "arn:aws:eks:*:*:identityproviderconfig/*/*/*/*",
                "arn:aws:eks:*:*:access-entry/*/*/*",
                "arn:aws:kms:*:*:key/*",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateOpenIDConnectProvider",
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:CreateRole",
                "iam:DeleteOpenIDConnectProvider",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DetachRolePolicy",
                "iam:GetOpenIDConnectProvider",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:GetUser",
                "iam:GetUserPolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListAttachedUserPolicies",
                "iam:ListGroupsForUser",
                "iam:ListInstanceProfilesForRole",
                "iam:ListPolicyTags",
                "iam:ListPolicyVersions",
                "iam:ListRolePolicies",
                "iam:PassRole",
                "iam:PutRolePolicy",
                "iam:TagOpenIDConnectProvider",
                "iam:TagPolicy",
                "iam:TagRole",
                "iam:UntagOpenIDConnectProvider",
                "iam:UntagPolicy",
                "iam:UntagRole",
                "iam:UpdateOpenIDConnectProviderThumbprint",
                "iam:UpdateRole",
                "iam:UpdateAssumeRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:policy/*",
                "arn:aws:iam::*:oidc-provider/*",
                "arn:aws:iam::*:user/*",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "ec2:*",
                "eks:CreateCluster",
                "eks:ListClusters",
                "eks:DescribeAddonVersions",
                "elasticloadbalancing:*",
                "iam:GetAccountName",
                "iam:ListAccountAliases",
                "iam:ListRoles",
                "iam:CreateInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:GetInstanceProfile",
                "iam:TagInstanceProfile",
                "iam:UntagInstanceProfile", 
                "iam:RemoveRoleFromInstanceProfile", 
                "iam:AddRoleToInstanceProfile", 
                "kms:CreateKey",
                "logs:CreateLogGroup",
                "logs:DeleteLogGroup",
                "logs:DescribeLogGroups",
                "logs:ListTagsLogGroup",
                "logs:PutRetentionPolicy",
                "logs:TagResource",
                "logs:UntagResource",
                "logs:TagLogGroup",
                "logs:UntagLogGroup",
                "logs:ListTagsForResource",
                "networkmanager:Describe*",
                "networkmanager:Get*",
                "networkmanager:List*",
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:DeleteBucketPolicy",
                "s3:DeleteBucketWebsite",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectVersionTagging",
                "s3:GetAccelerateConfiguration",
                "s3:GetBucketAcl",
                "s3:GetBucketCORS",
                "s3:GetBucketLocation",
                "s3:GetBucketLogging",
                "s3:GetBucketObjectLockConfiguration",
                "s3:GetBucketOwnershipControls",
                "s3:GetBucketPolicy",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketRequestPayment",
                "s3:GetBucketTagging",
                "s3:GetBucketVersioning",
                "s3:GetBucketWebsite",
                "s3:GetEncryptionConfiguration",
                "s3:GetLifecycleConfiguration",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionAttributes",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionTagging",
                "s3:GetObjectVersionTorrent",
                "s3:GetReplicationConfiguration",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:PutAccelerateConfiguration",
                "s3:PutBucketAcl",
                "s3:PutBucketCORS",
                "s3:PutBucketLogging",
                "s3:PutBucketObjectLockConfiguration",
                "s3:PutBucketOwnershipControls",
                "s3:PutBucketPolicy",
                "s3:PutBucketPublicAccessBlock",
                "s3:PutBucketRequestPayment",
                "s3:PutBucketTagging",
                "s3:PutBucketVersioning",
                "s3:PutBucketWebsite",
                "s3:PutEncryptionConfiguration",
                "s3:PutLifecycleConfiguration",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl",
                "s3:PutObjectVersionTagging",
                "sts:GetCallerIdentity",
                "memorydb:CreateSubnetGroup",
                "memorydb:CreateUser",
                "memorydb:CreateAcl",
                "memorydb:CreateCluster",
                "memorydb:TagResource",
                "memorydb:DescribeSubnetGroups",
                "memorydb:DescribeUsers",
                "memorydb:DescribeACLs",
                "memorydb:DescribeClusters",
                "memorydb:ListTags",
                "memorydb:DeleteUser",
                "memorydb:DeleteSubnetGroup",
                "memorydb:DeleteAcl",
                "memorydb:DeleteCluster",
                "memorydb:UpdateAcl",
                "memorydb:UpdateCluster",
                "memorydb:UpdateSubnetGroup",
                "memorydb:UpdateUser"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor4",
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "arn:aws:secretsmanager:*:*:secret:*"
        }
    ]
}

ステップ1b: IAMポリシーのタグ付け

ステップ1aで作成したカスタムIAMポリシーにタグを付けます。

タグ名

AACResource

aac_sa_custom_policy

ステップ1c: IAMポリシーの付与

プライベートデータ用のAWSアカウントとVPCのセットアップページで作成したaac_automation_saサービスアカウントに、AAC_AppBuilder_SA_Policy IAMポリシーを添付します。

ステップ2: サブネットの設定

注記

Designer Cloud は、Machine LearningAuto Insights、およびApp Builderとサブネットの設定を共有します。これらのアプリケーションを複数展開している場合、サブネットの設定は一度のみ必要になります。

プライベートデータ処理環境のDesigner Cloudには、最大3つのサブネットグループが必要です。各グループには3つのサブネットが含まれており、それぞれが別のアベイラビリティゾーンにあります。

  • eks_controlグループ(必須): EKSコントロールプレーンは、このサブネットを使用して入力されたジョブ実行要求を受け入れます。

  • eks_nodeグループ(必須): EKSクラスターは、このサブネットを使用してAlteryxソフトウェアのジョブ(接続、変換、処理、公開など)を実行します。

  • publicグループ(必須): このグループでサービスは実行されませんが、eks_nodeグループがクラスター外への通信にこのサブネットを使用します。

  • privateグループ(必須): このグループは、プライベートデータ処理専用にサービスを実行します。

ステップ2a: VPCでサブネットを作成する

aac-vpc VPCでサブネットを設定します。

サブネットを作成し、以下の例に示すようにタグ付けします。CIDRとサブネットの値は、ネットワークアーキテクチャに合わせて調整できます。

大規模なアドレス空間は、完全にスケールアウトされたクラスターに対応するように設計されています。必要に応じてアドレス空間を小さくすることもできますが、処理負荷が高くなったときにスケーリングに問題が発生する可能性があります。

重要

表に記載されているように、タグ名タグ値を使用してサブネットにタグを付ける必要があります。

CIDR

サブネット名

サブネット

AZ

タグ名

タグ値

注記

10.64.0.0/18

eks_node

10.64.0.0/21

AZa

AACSubnet

eks_node

eks_node

10.64.8.0/21

AZb

AACSubnet

eks_node

eks_node

10.64.16.0/21

AZc

AACSubnet

eks_node

10.64.24.0/21

予備

10.64.32.0/19

予備(後でブルー/グリーンのアップグレード用に設定可能)

10.10.0.0/21

eks_control

10.10.0.0/27

AZa

AACSubnet

eks_control

eks_control

10.10.0.32/27

AZb

AACSubnet

eks_control

eks_control

10.10.0.64/27

AZc

AACSubnet

eks_control

10.10.0.96/27

予備

パブリック

10.10.0.128/27

AZa

AACSubnet

パブリック

パブリック

10.10.0.160/27

AZb

AACSubnet

パブリック

パブリック

10.10.0.192/27

AZc

AACSubnet

パブリック

10.10.0.224/27

予備

プライベート

10.10.1.0/25

AZa

AACSubnet

プライベート

プライベート

10.10.1.128/25

AZb

AACSubnet

プライベート

プライベート

10.10.2.0/25

AZc

AACSubnet

プライベート

10.10.1.128/25

予備

ステップ2b: サブネットのルートテーブル

サブネット用のルートテーブルを作成します。サブネットのルートテーブルエントリは以下のとおりです。

注記

<gateway id>は、お使いのネットワークアーキテクチャに応じて、各AZに作成されるゾーナルNATゲートウェイまたはトランジットゲートウェイのいずれかになります。NATゲートウェイの場合は、パブリックサブネットのAZごとにNATゲートウェイを作成します。

サブネット名

ルートの宛先

ターゲット

コメント

eks_node

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

eks_control

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

パブリック

/18 CIDRブロック

/21 CIDRブロック

0.0.0.0/0

ローカル

ローカル

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

プライベート

/18 CIDRブロック

/21 CIDRブロック

<s3 prefix id>

0.0.0.0/0

ローカル

ローカル

<vpce endpoint id>

<gateway id>

3つのAZサブネットルーティングテーブルすべてに同じルートを設定します。

0.0.0.0/0はパブリックネットワークに送信される必要があります。

ステップ3: KMSキーポリシーを更新する

プライベートデータ処理が正常に作成されると、credential-service-roleという名前のカスタムロールがアカウントに確立され、Kubernetes資格情報サービスアカウントが、キー保管庫のプライベートデータ資格情報にアクセスできるようになります。さらに、プライベートデータ用のAWSアカウントとVPCのセットアップ(ステップ5: 安全に保管するための対称キーを作成する)で作成したKMSキーのポリシーを更新して、必要な権限を付けてカスタムロールcredential-service-roleを付与します。

  1. [キー管理サービス]に移動し、プライベートデータ用のAWSアカウントとVPCのセットアップ(ステップ5: 安全に保管するための対称キーを作成する)で作成したキーを選択します。

  2. [キーポリシー]を選択し、[編集]を選択します。

  3. 既定の権限を削除し、以下に示す権限で更新します。

    {
      "Version": "2012-10-17",
      "Id": "key-consolepolicy-3",
      "Statement": [
        {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<account id>:root"
          },
          "Action": "kms:*",
          "Resource": "*"
        },
        {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<account id>:role/credential-service-role"
          },
          "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
          ],
          "Resource": "*"
        }
      ]
    }   

    注記

    <accountId > - プライベートデータ処理環境の処理がプロビジョニングされているAWSアカウント番号。

  4. [変更を保存] を選択します。

プライベートデータ処理

注意

プライベートデータ処理を設定した後に、Alteryx Oneをプロビジョニングされたパブリッククラウドリソースを変更または削除すると、不整合が生じる可能性があります。これらの不整合により、ジョブの実行中またはプライベートデータ処理設定のプロビジョニング解除時にエラーが発生する可能性があります。

ステップ1: App Builderのデプロイをトリガーする

App Builderのプロビジョニングは、Alteryx Oneの管理者コンソールからトリガーできます。このページを表示するには、ワークスペース内のワークスペース管理者権限が必要です。

  1. Alteryx Oneのランディングページで、ユーザーのイニシャルが入った右上の丸いアイコンを選択します。メニューから[管理者コンソール]を選択します。

  2. 左側のナビゲーションメニューから[プライベートデータ処理]を選択します。

  3. Auto Insightsチェックボックスを選択した後、[保存]を選択します。

[更新]を選択すると、AWSアカウント内のクラスターとリソースのデプロイがトリガーされます。これにより、一連の検証チェックが実行され、AWSアカウントの設定が正しいことが確認されます。

最初の検証チェックが完了すると、プロビジョニングが開始されます。画面上のメッセージボックスは、ステータスの変更に合わせて定期的に更新されます。

注記

プロビジョニングプロセスの完了には、約35-40分かかります。

プロビジョニングが完了すると、作成したリソース(EC2インスタンスやノードグループなど)をAWSコンソールから表示できます。これらは絶対に自分で変更しないでください。手動で変更すると、プライベートデータ処理の機能に問題が発生する可能性があります。