【AWS】QuickSightの分析を別アカウントへ移行する

# はじめに
QuickSightの分析を別アカウントへ移行することがあったのですが、今後また使う機会がありそうだなと思うので備忘録として書いておきます！

**Enterprise Editionでないと実行できない呼び出しも含みます。**

基本的にCLIでの作業となります。
以下が必要となりますので、ご準備ください。

1.  AWS CLIバージョン2
2.  移行先・移行元のQuickSightへのアクセス権限があるIAMユーザの「アクセスキーID」、「シークレットアクセスキー」
3.  移行先に移行元と同じデータセットの元データを配置(QuickSightのデータセットからみられるとok。)

## やりたいこと
AWSアカウント「**AccountA**」に立ち上げているQuickSight「**QuicksightA**」

**↓   分析の移行**

AWSアカウント「**AccountB**」に立ち上げているQuickSight「**QuicksightB**」

![QuickSight移行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675893/b0afeb8c-18af-6302-bea2-fa5c0aa5bac1.png)



## 手順

### AccountAで作業
１. データセットを作成する(移行元なので作成してあると思うので省略)

２. コンソールなどでCLIにログイン

 ```
 $ aws configure
 ```
３. QuicksightAのデータセットARNを取得

```
$ aws quicksight list-data-sets --aws-account-id [AccountID(Account A)]
> arn:aws:quicksight:[Region]:[AccountID]:dataset/XXXXXXXXX
```

４. データセットから分析を作成(こちらも移行元で作成してあるため省略)

５. QuicksightAの分析ARNを取得

```
$  aws quicksight list-analyses --aws-account-id [AccountID(Account A)]
> ... [arn:aws:quicksight:[Region]:[AccountID]:analysis/XXXXXXXX] ...
```

６. QuicksightAの分析アクセス権限があるユーザのARNを取得

分析への閲覧権限「READER」だとテンプレートが作成できないかもしれません。試していませんが...

```
$ aws quicksight list-users --aws-account-id [AccountID(Account A)] --namespace default
> ... [arn:aws:quicksight:[Region]:[AccountID]:user/default/[ユーザ名]] ...

```

７．テンプレートファイルを作成(quicksight-template.json)

```
{
   "AwsAccountId": "<AccountId(Account A)>",
   "TemplateId": "<任意>",
   "Name": "<任意>",
   "Permissions": [ {
   "Principal": "<(6) で取得した Arn>",
   "Actions": [
   "quicksight:UpdateTemplatePermissions",
   "quicksight:DescribeTemplate"
   ]
   }, {
   "Principal": "arn:aws:iam::<AccountID(Account B　※注意)>:root",
   "Actions": [
   "quicksight:DescribeTemplate"
   ]
   }
   ],
   "SourceEntity": {
   "SourceAnalysis": {
   "Arn": "<(5) で取得した Arn>",
   "DataSetReferences": [ {
   "DataSetPlaceholder": "<任意(DS1など)>",
   "DataSetArn": "<(3) で取得した Arn>"
   }
   ]
   }
   }
}
```  

８. aws quicksight create-template コマンドでテンプレートを作成。

```
$ aws quicksight create-template --cli-input-json file://quicksight-template.json
>[ここで出力されるARNは後程必要となるため控えておきます。]
```

### AccountBで作業
９．データセットを作成

AccountBでAWS マネージドコンソールにログインしQuickSightを立ち上げます。

立ち上げたら、先に準備していた元データからQuicksightAにあるものと同じ、移行したい分析の元データセットを作成します。

参考:https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/example-prepared-data-set.html

作成したらCLIに戻ります。

１０. AccountBのCLIにログイン

```
$ aws configure
```
QuickSightにアクセス権限があるIAMユーザのアクセスキーIDとシークレットアクセスキーでログイン

１１. (9)で作成したデータセットのARNを取得

```
$ aws quicksight list-data-sets --aws-account-id [AccountID]
> ... arn:aws:quicksight:[Region]:[AccountID]:dataset/XXXXXXXXX ...
```

１２．QuicksightBの(分析を保持する)ユーザARNを取得

おそらく「ADMIN」権限を持っている人がいいと思います

```
$ aws quicksight list-users --aws-account-id [AccountID(AccountB)] --namespace default
> ... [arn:aws:quicksight:[Region]:[AccountID]:user/default/[ユーザ名]] ...
```

１３. 分析テンプレートファイルを作成(quicksight-analysis.json)

```
{
   "AwsAccountId": "<Account Id(AccountB)>",
   "AnalysisId": "<任意>",
   "Name": "<任意(分析の名前になります)>",
   "Permissions": [ {
   "Principal": "<(12) で取得した Arn>",
   "Actions": [
   "quicksight:QueryAnalysis",
   "quicksight:DescribeAnalysis",
   "quicksight:UpdateAnalysis",
   "quicksight:DeleteAnalysis",
   "quicksight:RestoreAnalysis",
   "quicksight:DescribeAnalysisPermissions",
   "quicksight:UpdateAnalysisPermissions"
   ]
   }
   ],
   "SourceEntity": {
   "SourceTemplate": {
   "DataSetReferences": [ {
   "DataSetPlaceholder": "<quicksight-template.jsonのものと同じもの>",
   "DataSetArn": "<(9) で取得した Arn>"
   }
   ],
   "Arn": "<(8) で取得した Arn>"
   }
   }
}
```

１４. 分析を作成

```
$    aws quicksight create-analysis --cli-input-json file://quicksight-analysis.json
```

マネジメントコンソールでQuickSightをみて分析が作成されていたら**成功**です。
作成されていない場合、以下の手順を行ってください。

１５. 分析のPermissionを変更するファイルを作成(quicksight-analysis-permissions.json)

```
{
   "AwsAccountId": "<Account Id(AccountB)>",
   "AnalysisId": "<(13) で指定した AnalysisId>",
   "GrantPermissions": [ {
   "Principal": "<(12) で取得した Arn>",
   "Actions": [
   "quicksight:QueryAnalysis",
   "quicksight:DescribeAnalysis",
   "quicksight:UpdateAnalysis",
   "quicksight:DeleteAnalysis",
   "quicksight:RestoreAnalysis",
   "quicksight:DescribeAnalysisPermissions",
   "quicksight:UpdateAnalysisPermissions"
   ]
   }
   ]
   }
```

１６. 分析のPermissionを変更

```
$ aws quicksight update-analysis-permissions --cli-input-json file://quicksight-analysis-permissions.json
```


これでもう一度マネジメントコンソールからQuickSightをみて作成できていれば**成功**です。