Glueの使い方的な㉞(環境変数を使う)

# Glueジョブで環境変数を使う

STAGE = prd を環境変数として、この環境変数を表示するだけのジョブを実行する

## ジョブの中で環境変数を定義してジョブ実行する

### ジョブの追加

Glueの画面から、左側メニューの"ジョブ"をクリックし、[ジョブの追加]をクリックし、以下の値を入力する

名前：se2_job18
ユーザーが作成する新しいスクリプト：チェック


<img width="584" alt="スクリーンショット 0031-01-27 18.44.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/561d8335-f61f-a1c8-6afd-0a26012b8fe6.png">

下の方に行き、以下の箇所をクリック

<img width="585" alt="スクリーンショット 0031-01-27 18.44.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/5e01115b-77e3-3a3f-6c7b-a23846e950ab.png">

キー:--STAGE
値:prd

<img width="580" alt="スクリーンショット 0031-01-27 18.44.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/22412c26-294c-b95b-c446-5293a6758775.png">

入力したら[次へ]をクリックし、次の画面で[ジョブを保存してスクリプトを編集する]をクリックし、以下のスクリプトを貼り付け、[ジョブの実行]をクリックする
getResolvedOptions(args, options) ユーティリティ関数を使用すると、ジョブの実行時にスクリプトに渡される引数にアクセスできます。この関数を使用するには、まず AWS Glue utils モジュールと sys モジュールからインポートします。

```python:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME','STAGE'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

print(args['STAGE'])

job.commit()
```

![スクリーンショット 0031-01-27 18.49.33.png](https://qiita-image-store.s3.amazonaws.com/0/27932/64714043-4346-6fd6-efcd-be1540df5dd1.png)

成功したら画面の"ログ"と書かれた箇所をクリックし、CW Logsでprdが表示されたか確認する

![スクリーンショット 0031-01-27 18.52.12.png](https://qiita-image-store.s3.amazonaws.com/0/27932/9e36fff1-be2c-7829-0271-6538e03529e0.png)

表示された

![スクリーンショット 0031-01-27 18.54.24.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e5db0f8f-fa5f-f009-1cdd-1f0039758bc8.png)

## 環境変数をファイルに書き、S3に配置したものを使う

### S3に環境変数ファイルをアップロード

s3://test-glue00/se2/env.conf

```
[Environment]
STAGE: prd
```

### ジョブの追加

Glueの画面から、左側メニューの"ジョブ"をクリックし、[ジョブの追加]をクリックし、以下の値を入力する

名前：se2_job19
ユーザーが作成する新しいスクリプト：チェック
キー:--env
値:s3://test-glue00/se2/env.conf

入力したら[次へ]をクリックし、次の画面で[ジョブを保存してスクリプトを編集する]をクリックし、以下のスクリプトを貼り付け、[ジョブの実行]をクリックする

```python:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import ConfigParser
import StringIO
import boto3

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME','env'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

str = args['env']
list = str.split('/')
key = str.split("/")[3] + "/" + str.split("/")[4] + "/" + str.split("/")[5]

s3 = boto3.resource('s3')
obj = s3.Object(list[2], key)
buf = StringIO.StringIO(obj.get()['Body'].read().decode('utf-8'))

config = ConfigParser.ConfigParser()
config.readfp(buf)
print config.get('Environment', 'STAGE')

job.commit()
```

成功したら画面の"ログ"と書かれた箇所をクリックし、CW Logsでprdが表示されたか確認する

![スクリーンショット 0031-01-27 22.19.21.png](https://qiita-image-store.s3.amazonaws.com/0/27932/0bfbf00d-e46e-7a72-cc20-d94985a6a3cc.png)

表示された

![スクリーンショット 0031-01-27 22.19.52.png](https://qiita-image-store.s3.amazonaws.com/0/27932/6c5986e9-f59d-42b5-8515-0d65a16de607.png)

## ジョブ実行時に環境変数変えたい時

以下のように[ジョブ実行]をクリックする

<img width="455" alt="スクリーンショット 0002-05-15 14.36.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/49a39838-958f-2ebc-1d64-ced788f579ec.png">

以下のポップアップが表示され、実行するジョブの今回のみのパラメータを設定できます(永続的なジョブ設定とは別です)。ここで環境変数を変更することで、今回実行するジョブにだけ適用する環境変数を設定できます。

<img width="601" alt="スクリーンショット 0002-05-15 14.36.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/56d99b2b-cd2e-a45a-e20a-475ee40acdd2.png">

ueharaという文字列が見えます。ジョブが重複して実行していたとしても実行時に指定した環境変数があればその値が適用され、実行時に指定した環境変数がなければジョブ設定の環境変数が適用されます。

<img width="1073" alt="スクリーンショット 0002-05-15 14.41.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/be1324f8-236b-8f99-0d57-596e7235baf8.png">

## こちらも是非

Glueの使い方まとめ
https://qiita.com/pioho07/items/32f76a16cbf49f9f712f