databricks on AWS deploy手順~その2~

# はじめに
databricks on AWSをdeployするまでの手順をご紹介したいと思います。
databricks on AWSのdeploy完了までには
databricks側とAWS側でいくつかの登録&設定作業が必要となっているため以下3章に分けてご説明いたします。

- その1 databricksアカウントの作成 
- その2 AWSアカウントとの連携　← 今回はここ
- その3 databricks用S3バケットとの連携



#本題
AWSアカウントとの連携方法は

- クロスアカウントロールを使用する方法
- アクセスキーを使用する方法

の2種類がありますが、databricks公式サイトではクロスアカウントロールを使用する方法を強く推奨しているので、今回はそちらの方法で進めて行こうと思います。
ここからはAWSアカウントとdatabricksアカウントを使用するので、
両方ログインした状態のページのご用意をお願いいたします。


###➀databricksアカウント設定
databricksコンソール画面から、サイドバー内「AWS Account」を選択
「Deploy to AWS using Cross Account Role」にチェック
AWS Regionは「ap-northeast-1:Asia Pacific(Tokyo) Region」を選択
External IDはIAMロール作成時に使用するので、コピーしておいてください
ここまで終えたら一旦AWS側の設定に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/39f1378b-9cdb-8eed-893b-5328b72883ae.png)


###➁クロスアカウントロールとアクセスポリシーの作成
AWSコンソール画面からIAMサービスのページへ移動します。
(検索欄でIAMと入れれば移動できます。)

画面左部のサイドバーから「ロール」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/5ad6aa3b-fb9e-e238-a76c-062ded3146a1.png)

「ロールの作成」をクリック。
「別のAWSアカウント」を選択。
「このロールを使用できるアカウントを指定する」の必要事項欄を埋めていきます。
アカウントID : 414351767826
オプション : 外部IDが必要にチェック
外部ID : 本題➀でコピーしたExternal IDをペースト
3つの記入が済んだら「次のステップ:アクセス権限」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/4456a233-70bd-1b74-b0a8-771e3e3b08bc.png)

何もせず「次のステップ:タグ」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/28e4de94-7634-7a76-27a3-ffb0596ea4fa.png)

何もせず「次のステップ:確認」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/b29846de-bae9-f339-d7d1-8e9935215451.png)

ロール名を記入して「ロールの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/d9148096-c2e0-8cbf-cd2c-6609eb1d849d.png)

IAMの画面に戻り、サイドバーから「ロール」を選択。
ロール一覧内から作成したロールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/434c4196-f9e3-981e-b182-f57124b5b2bd.png)

画面右にある「インラインポリシーの追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/384d2ab3-c3dd-0279-792d-060b7dd14067.png)

JSONのタブを選択し、以下コードをコピペ
「ポリシーの確認」をクリック

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1403287045000",
      "Effect": "Allow",
      "Action": [
          "ec2:AssociateDhcpOptions",
          "ec2:AssociateIamInstanceProfile",
          "ec2:AssociateRouteTable",
          "ec2:AttachInternetGateway",
          "ec2:AttachVolume",
          "ec2:AuthorizeSecurityGroupEgress",
          "ec2:AuthorizeSecurityGroupIngress",
          "ec2:CancelSpotInstanceRequests",
          "ec2:CreateDhcpOptions",
          "ec2:CreateInternetGateway",
          "ec2:CreateKeyPair",
          "ec2:CreatePlacementGroup",
          "ec2:CreateRoute",
          "ec2:CreateSecurityGroup",
          "ec2:CreateSubnet",
          "ec2:CreateTags",
          "ec2:CreateVolume",
          "ec2:CreateVpc",
          "ec2:CreateVpcPeeringConnection",
          "ec2:DeleteInternetGateway",
          "ec2:DeleteKeyPair",
          "ec2:DeletePlacementGroup",
          "ec2:DeleteRoute",
          "ec2:DeleteRouteTable",
          "ec2:DeleteSecurityGroup",
          "ec2:DeleteSubnet",
          "ec2:DeleteTags",
          "ec2:DeleteVolume",
          "ec2:DeleteVpc",
          "ec2:DescribeAvailabilityZones",
          "ec2:DescribeIamInstanceProfileAssociations",
          "ec2:DescribeInstanceStatus",
          "ec2:DescribeInstances",
          "ec2:DescribePlacementGroups",
          "ec2:DescribePrefixLists",
          "ec2:DescribeReservedInstancesOfferings",
          "ec2:DescribeRouteTables",
          "ec2:DescribeSecurityGroups",
          "ec2:DescribeSpotInstanceRequests",
          "ec2:DescribeSpotPriceHistory",
          "ec2:DescribeSubnets",
          "ec2:DescribeVolumes",
          "ec2:DescribeVpcs",
          "ec2:DetachInternetGateway",
          "ec2:DisassociateIamInstanceProfile",
          "ec2:ModifyVpcAttribute",
          "ec2:ReplaceIamInstanceProfileAssociation",
          "ec2:RequestSpotInstances",
          "ec2:RevokeSecurityGroupEgress",
          "ec2:RevokeSecurityGroupIngress",
          "ec2:RunInstances",
          "ec2:TerminateInstances"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:CreateServiceLinkedRole",
        "iam:PutRolePolicy"
      ],
      "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot",
      "Condition": {
        "StringLike": {
          "iam:AWSServiceName": "spot.amazonaws.com"
        }
      }
    }
  ]
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/61e95e7e-57f5-1596-597c-5948a878c531.png)

ポリシー名を記入して、「ポリシーの作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/d1c7a758-ce94-a28a-89d5-b2ed2192636c.png)

再度ロールのページに戻って、「ロールARN」をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/8ff17c3f-3b7d-ad1a-c092-ca8c2dbd83b2.png)

###➂databricksアカウント設定残り
本題➀で使用していたdatabricksの画面に戻ります。
本題➁でコピーしておいたロールARNをペーストして「Next Step」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/4ad1664b-ce3d-345c-cf50-5d0a308aeaed.png)

自動的にS3設定画面に移動したら、その2の作業は無事完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/471f8005-5114-cda6-88f6-cbd387262f2e.png)

#おわりに
今回その2ではAWSアカウントとの連携作業を行いました。
次回その3ではいよいよ最後のS3との連携作業を行います。
引き続き頑張りましょう！
お疲れ様でした。