API Gateway と Cognito の設定が終わって、きちんと REST API を叩けるか確認するのを自動化したいなと思って、いろいろ調べた結果をまとめます。
基本的に公式に書いてある内容に従えば良いのですが、サインインが UI 前提になってるため、自動化するのがそのままだとめんどいです。
そのため、トークンを取得するための API を使うと良さそうです。
というわけで書いてみました。
def token cip = Aws::CognitoIdentityProvider::Client.new(region: REGION) secret_hash = Base64.encode64(OpenSSL::HMAC.digest('sha256', CLIENT_SECRET, TEST_USERNAME + CLIENT_ID)) response = cip.admin_initiate_auth({ user_pool_id: USER_POOL_ID, client_id: CLIENT_ID, auth_flow: :ADMIN_NO_SRP_AUTH, auth_parameters: { USERNAME: TEST_USERNAME, PASSWORD: TEST_PASSWORD, SECRET_HASH: secret_hash.strip # 行末の改行があるとエラーになったため } }) response.authentication_result.id_token end def test connection = Faraday.new(API_HOST) do |conn| conn.headers['Authorization'] = token end response = connection.get(API_STAGE + '/users') # ここは自分で用意したエンドポイントを適当に # pp response expect(response.status).to eq(200) # rspec で確認する場合はこんな感じで end
SecretHash の計算方法も公式にあります。(どうせなら SDK に実装を入れておいてほしい。)
これを cron とかでぶん回しておけば、設定を変更した時にミスってないかの確認が容易になるんじゃないかと思います。