📨

Former2をローカルで実行する(dockerで起動する)

2024/07/27に公開

Former2について

AWSリソースをIaCに落とし込めるサービスです。WebサイトでAWSのキーを入力することに抵抗があったので、ローカルで実行してみたいと思います。(本記事はその備忘録です。)
Former2についての詳細な説明は下記参考サイトを参照してください。

手順

Former2の起動

# 任意の場所で実行してください
git clone https://github.com/iann0036/former2.git
cd former2
docker compose up

※ 以下のようなエラーが出る場合は、dockerを起動する前にportを変更してください。

# docker compose up の実行エラー
Error response from daemon: Ports are not available: exposing port TCP 127.0.0.1:80 -> 0.0.0.0:0: failed to connect to /var/run/com.docker.vmnetd.sock: is vmnetd running?: dial unix /var/run/com.docker.vmnetd.sock: connect: no such file or directory
docker-compose.yml
# git clone直後
ports:
  - '127.0.0.1:80:80'

# 変更後
ports:
  - '127.0.0.1:8089:80'

起動できたら、127.0.0.1:8089にアクセスしてください。画像のような表示になると思います。

IAMユーザーとIAMロールの作成

  1. ReadOnlyAccessのみでどちらも作成します。
  2. IAMロールでは信頼されたエンティティに作成したユーザーが含まれていることを確認してください。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{ACCOUNT_ID}:root",
                    "arn:aws:iam::{ACCOUNT_ID}:user/{作成したIAMユーザー名}"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}
  1. IAMユーザーではアクセスキーを作成してください。
    • ローカルでcat ~/.aws/credentialsした際、必要なアクセスキー等が設定済みの場合は不要です。
    • ローカルにアクセスキーがない場合は、aws configure --profile {作成したIAMユーザー名}で設定してください。

Credentials設定

各種キーの取得を行います。

# ローカルで実行
aws sts assume-role --role-arn arn:aws:iam::{ACCOUNT_ID}:role/role-name --role-session-name "RoleSession1" --profile {IAM-user-name} > assume-role-output.txt

# ファイルの確認
cat assume-role-output.txt
{
    "Credentials": {
        "AccessKeyId": "hogehoge",  # ← これを使う
        "SecretAccessKey": "fugafuga",  # ← これを使う
        "SessionToken": "piypiyo",  # ← これを使う
        "Expiration": "2024-07-27T02:41:40+00:00"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "moge:RoleSession1",
        "Arn": "arn:aws:sts::{ACCOUNT_ID}:assumed-role/{IAM_USER_NAME}/RoleSession1" # ← これを使う
    }
}

画像で赤く塗りつぶしている箇所に設定してください。

AWSリソースの選択

画面右上でリージョン設定を行い、出力したいAWSリソースを選択します。

必要なインスタンス等を選択し、Add SelectedGenerateの順にボタンを押下してください。

以下のように出力されます。必ずしも確実なものが出力されるとは限らないみたいなので、実行時には十分に注意してください。

参考

https://dev.classmethod.jp/articles/former2-locally-and-cloudformation-existing-resources/
https://dev.classmethod.jp/articles/former2/
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli
https://zenn.dev/link/comments/7630b1f2f54557

Discussion