Cloud Automatorハンズオンセミナーの環境準備を自動化した話

記事タイトルとURLをコピーする

はじめに

当社で提供しておりますAWS運用自動化ツールのCloud Automatorはハンズオンセミナーを定期的に開催をしており、おかげさまで毎回好評を頂いております。このハンズオンにおいては、

  • AWSアカウント
    • VPC
    • EC2インスタンス
    • IAM
  • Cloud Automatorアカウント

を参加者にご利用頂きますため、事前に参加者数分の環境を準備する必要があります。 AWSアカウント内のリソースの構築については、CloudFormationのスタックセットを自動化しており、以下の記事でその取り組みを紹介しました。 CloudFormation スタックセットで複数のAWS環境構築を一気に行う

構築した環境を当日参加者に利用頂くため、その環境を操作するIAMのクレデンシャル情報等を取得頂く必要があります。これらを当日スムーズに取得頂くため、当日参加者にダウンロード頂くようにしています。 ダウンロード頂く資材をBoxに期限付きパスワードでアップロードし、そのURLをBitlyで短縮し、参加者にそのURLを配布しています。環境準備作業全体の流れのイメージを以下図に示します。

今回、以下図の赤枠部分の自動化を試みましたので、その取り組みを簡単に紹介します。 ※本自動化の取り組みは当社インターンシップの活動の成果の一部をまとめたものになります。

自動化の試み

クレデンシャル情報の取得

複数のAWSアカウントのIAMユーザーのクレデンシャル情報を取得する必要があります。クレデンシャル情報を取得するための認証情報をAWSアカウント数分、手元に保存しておくのはセキュリティ上の懸念があるため、STSのAssumeRoleを用いて各AWSアカウントのIAMユーザーの認証情報を生成/取得します。

Python(Boto 3)では以下のように書けます。

response = sts_client.assume_role(
            RoleArn=[role_arn],
            RoleSessionName='role_session'
        )

session = Session(
            aws_access_key_id=response['Credentials']['AccessKeyId'],
            aws_secret_access_key=response['Credentials']['SecretAccessKey'],
            aws_session_token=response['Credentials']['SessionToken']
        )

iam = session.resource('iam')
user = iam.User('HandsOnUser')

# キーペアの作成と取得
access_key_pair = user.create_access_key_pair()
access_key_id = access_key_pair.access_key_id
secret_access_key = access_key_pair.secret

※先日、認証情報のIAMロール対応をリリース致しましたため、本工程は今後修正予定です

Boxへのアップロード

取得したクレデンシャル情報を含む資材のファイルをBoxにアップロードし、期限付きパスワードを設定します。 こちらもプログラム(Python)で自動化します。BoxのPython SDKを用いると以下のように書けます。

created_folder = box_client.folder([対象フォルダID]).create_subfolder([作成するフォルダ名])
uploaded_file = client.folder(created_folder ['id']).upload([アップロードするファイル名])
shared_link_url = uploaded_file.get_shared_link(access="open", password=[パスワード], unshared_at=[期限日付]])

BitlyでURL短縮

最後にBitlyでBoxにアップロードしたファイルの公開URLを短縮化します。 BoxにもカスタムURLの機能が提供されているのですが、API経由での実行はサポートされていなかったため、Bitlyを用います。

こちらは以下のように書けます。

bitly_url = 'https://api-ssl.bitly.com/v3/shorten'
query = {
          'access_token': [Bitlyのトークン],
          'longurl': [短縮するURL]
          }
short_url = requests.get(bitly_url, params=query).json()['data']['url']

おわりに

今回、Cloud Automatorハンズオンセミナーの環境準備の自動化の取り組みをご紹介しました。 今後もハンズオンセミナーの開催を予定しておりますので、是非チェックしてみてください!