UiPath Studio - AmazonWebServicesパッケージを使ってS3バケットにアクセス

# はじめに
AWSの普及に伴い、システム開発・運用の様々な場面で開発や運用が発生しているかと思います。
伴いRPA化したい要望も多くあるかと思いますが、当記事ではUiPathが用意している[AmazonWebServicesパッケージ](https://docs.uipath.com/ja/activities/other/latest/it-automation/about-the-amazonwebservices-activities-pack)を使ってS3バケットにアクセスするごく簡単なサンプルワークフローをご紹介します。

# 前提事項
AWS側の設定詳細については、当記事で詳細を触れず、以下が事前に準備されていることを想定しています。
- S3バケットが[作成](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/create-bucket-overview.html)されていること。
- IAMユーザー発行およびそれに紐づいて[アクセスキー作成](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)がされており、**アクセスキーID** と **シークレットキー** を控えてあること
- 上記IAMユーザーに該当S3バケットアクセスに必要な権限ポリシーが付与されていること


# AmazonWebServicesパッケージの利用
:::note
当記事で利用しているパッケージバージョン：UiPath.AmazonWebServices.Activities 2.5.0
:::

今回実装する流れ：S3バケットに保存されているファイルを端末ローカルにダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/5196ea7b-e694-2190-a9af-f32d0d700e5b.png)
↓　↓　↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/d9135057-e0c1-52d2-f42f-a85f994fc829.png)


### 0. ワークフロー全体像
AmazonWebServicesパッケージは、既定ではStudioに入っていないため、Studioの「パッケージを管理」メニューより予めインストールしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/a6432f89-fd6b-9adc-7ee1-ec6c32efdd73.png)


ワークフロー全体像は以下のようになっており、「1. 各設定の準備」と「2. S3バケットにアクセス」部分に分けて紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/5ed74d35-109b-d749-37b1-ffd597354067.png)



### 1. 各設定の準備
複数代入 アクティビティを用いて必要な情報を変数に設定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/49eb6b63-5400-267b-ca77-0625271cc0aa.png)


| 変数 | 説明 | 備考 |
|:---|:---|:---|
|アクセスキーID|IAMユーザーのアクセスキーに紐づいたアクセスキーID||
|シークレットキー|IAMユーザーのアクセスキーに紐づいたシークレットキー||
|シークレットキー_SecureStr|シークレットキー変数を用いたSecureString型オブジェクト|(※)型変換の記述は表の下に記載|
|AWSリージョン|該当のリージョンを設定|[AWSリージョン一覧](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)|
|バケット名|アクセスしたいS3バケット名|||
|ダウンロードフォルダー|ダウンロード先フォルダー|||

:::note
(※) サンプル：String型のSecretKey変数を元に、SecureString型に変換
```vb
(New System.Net.NetworkCredential("", シークレットキー)).SecurePassword
```
:::


### 2. S3バケットにアクセス
#### アマゾンウェブサービススコープ
「アマゾンウェブサービススコープ」アクティビティで認証情報を設定し、スコープ内で各アクティビティを実装していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/31149865-949e-1be6-cf3e-2741f331f72c.png)

#### バケットを取得
S3バケットにアクセスするため、バケット名を元にAWSS3Bucketオブジェクトを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/e0c777dd-9af5-f05c-036f-3aec07211d5c.png)


#### 繰り返し（バケットの各オブジェクト）
S3バケット内の複数ファイルをアクセスするため、「繰り返し（バケットの各オブジェクト）」アクティビティを利用します。
対象のS3オブジェクト１つずつを s3Objectインスタンスとして処理をします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/74aa11fb-90bd-c9fa-8067-a95d85e02242.png)

#### 繰り返し内：オブジェクトを取得
「オブジェクトを取得」アクティビティで、各s3ObjectのKeyName（名前）を元にAWSS3Bucketオブジェクトを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/f9b3387d-24ab-6513-4e17-0d8811157821.png)

#### 繰り返し内：オブジェクトファイルにダウンロード
「オブジェクトファイルにダウンロード」アクティビティで、s3Objectとして保存されている対象オブジェクトをダウンロードし、端末ローカルにファイルとして保存します
なお、ファイル名はS3に保存されたファイル名（s3ObjectのKeyname）とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/6f6aae10-502d-62a8-1fde-a7bfb2761fcc.png)

### 参考
:::note info
各アクティビティに必要なパーミッションは以下のリンクで参照できます
https://docs.uipath.com/ja/activities/other/latest/it-automation/aws-permissions-list

当記事ではS3バケットにフルアクセスのある [FullS3Access](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-amazons3fullaccess) ポリシーを該当IAMユーザーに付与していますが、実運用では必要に応じて権限を適宜制限ください。
:::



# おまけ：Orchestratorのアセット機能でよりスマートに
上述では、個人が簡単に始められるようシンプルなワークフローをご紹介してきました。
ただし、複数人でのRPA利用や企業内の展開などにおいては、**認証情報をより安全に共有しやすくしたい**ニーズがあるかと思います。Orchestrator環境があれば、その一ソリューションとして**Orchestratorのアセット機能を利用**して実現することができます。

### Orchestratorアセットの設定
当記事では、Cloud版Orchestratorのアセット機能を使っていきます。また、Studioが対象Orchestratorに接続されていることを前提としています。

Orchestratorの対象フォルダーから、[アセット]メニューを選択して、[アセットを追加] します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/843cda38-3a72-c8ee-c2da-5a1e2388015b.png)

**種類=Credential**を選択することで、認証情報「パスワード」の値が安全にSecureStringとして保存されます。**ユーザー名＝アクセスキーID**、そして**パスワード=シークレットキー**を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/fe2a9bcb-0594-ee2a-3a4e-8da32fb33889.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/726ee9b5-7762-0347-ea28-1c598f8af83f.png)

### ワークフローから認証情報を取得
上述でご紹介したワークフローに「認証情報を取得」アクティビティを加えて、準備されたアセットを取得し、S3にアクセスします。
「アクセスキーID」と「シークレットキー_SecureStr」変数を代入で設定するのではなく、**「認証情報を取得」アクティビティの出力として設定**します。なお、アセットが用意されている**Orchestratorの対象フォルダーにStudioが接続されている**必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/5492a057-07b6-19cb-df71-7dc38b81ed64.png)


ワークフローの最終形
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3302318/13459024-1883-6c04-48ef-01fe23791d3d.png)


:::note info
この実装によって認証情報そのものを各ワークフローで扱う必要がなくなり、より安全に複数人での開発でも展開しやすなります。
:::



# おわりに
いかがでしたでしょうか？
今回は簡単なアクセス方法をご紹介しましたが、AmazonWebServicesパッケージでは、以下のように豊富なアクティビティが用意されているので、必要であれば確認してみてください。
https://docs.uipath.com/ja/activities/other/latest/it-automation/aws-activities

UiPathのSaaSクラウドを利用されている方は、当記事で紹介した方法に加え [Integration Service](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/introduction) の [Amazon Web Services コネクタ](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/amazon-web-services-authentication) で管理されるコネクションも使用できるようになりました。
Integration Serviceを利用すれば、認証されたコネクタを複数ロボット・ユーザーに共有するなどより楽にRPA実装をすることができます。

RPAを上手に活用してより生産的な生活をしていきましょう！