SourceTreeで「remote branch is invalid refnames must follow git ref-format rules」エラー

概要

SourceTreeでプッシュしようとしたら「remote branch is invalid refnames must follow git ref-format rules」エラーが表示された時の対応メモ
※プッシュ先のリポジトリが空状態のケースで発生

対応

ターミナルから「git push プッシュ先リモート master」でうまくプッシュできた

CodePipelineのDeploy行程で「PermissionError The provided role does not have sufficient permissions to access ECS」エラーが出る時の対応メモ

概要

CodePipelineのDeployでデプロイメントプロバイダにAmazon ECSを選択して実施し、失敗した時に「PermissionError The provided role does not have sufficient permissions to access ECS」エラーとなった

原因

CodePipelineに設定していたサービスロールに権限が足りていなかった

対応

CodePipeline用のサービスロールにiam:PassRoleを付けていたがConditionによってサービスを制限しており、その中に「ecs-tasks.amazonaws.com」を含める必要があった
具体的は下記の「ecs-tasks.amazonaws.com」が無かったので追加した

  CodePipelineServiceRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: mytestServiceRole
      Policies:
        - PolicyName: mytestServiceRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - iam:PassRole
                Resource: "*"
                Effect: Allow
                Condition:
                  StringEqualsIfExists:
                    iam:PassedToService:
                      - cloudformation.amazonaws.com
                      - elasticbeanstalk.amazonaws.com
                      - ec2.amazonaws.com
                      - ecs-tasks.amazonaws.com

※上記はCloudFormationの記述で、一部抜粋である点に注意

公式ページに書いてある内容がより詳細なのでメモ
docs.aws.amazon.com

メモ

どこに何をしたら良いか分からなくなった時、CloudTrailを使って背後で動いている処理を確認できる

  • CloudTrailを設定しておく(特に制限せずに全体をウォッチしておく)
  • エラーが起きる処理(今回であればCodePipelineでのリリース動作)を実施してエラーさせる
    • この時、だいたいの日時をメモしておく
  • CloudTrailの出力がS3に入るので最終更新日時から大体の予測を付けて中を確認する
    • S3への反映には数分かかる、最終更新日時が前述でメモした日時を含むファイルの1個後のファイルで出ている事が多い
  • jsonの「eventTime」から前述でメモした日時に近いものを探す
    • 「errorMessage」と合わせて探すと効率が良い
  • 該当の処理を見つけたら「userIdentity」が実際に処理を行った主体と思われるので、このロールなどを判断材料に使う
    • 今回のケースでは「errorMessage」に「User: arn:aws:sts::xxx:assumed-role/xxxRole/xxx is not authorized to perform: iam:PassRole on resource: arn:aws:iam::xxx:role/xxxPolicy」が出ていた

windows環境でaws cliの実行時に「拡張子 .py のファイルの関連付けが見つかりません」が出る場合

概要

windows環境にscoopでaws cliを入れて実行した時に「拡張子 .py のファイルの関連付けが見つかりません」が出る場合の対応メモ
※この警告が出るけど実行は正常に行われている

対応

こちらの記事を参考にバッチを書き換えたら出なくなった。
github.com

aws.cmdの12行目を下記の通りに

- for /f "tokens=2 delims==" %%i in ('assoc .py') do (
+ for /f "tokens=2 delims==" %%i in ('assoc .py 2^> nul') do (

scoopで入れた場合は「C:\Users\username\scoop\apps\python36\current\Scripts\aws.cmd」が該当する

SourceTreeで「Couldn't agree a key exchange algorithm」エラー

概要

SourceTreeでプッシュしようとしたらブランチが表示されず、ターミナルから「git push」してみると「Couldn't agree a key exchange algorithm」エラーがダイアログ表示された時の対応メモ
※内臓Gitを利用している場合

対応

  • SourceTreeの「ツール」→「オプション」を順に選択する
  • 「オプション」ダイアログが表示されるので「Git」タブを選択し「Gitバージョン」グループの「Update Embedded」をクリックする

CloudFormationにおけるエラー対応メモ

概要

AWSのCloudFormationで出力されるエラーメッセージとその対応についての備忘録
都度追記していく

Update the IAM policy to add permission

エラーメッセージ

Lambda@Edge cannot retrieve the specified Lambda function. Update the IAM policy to add permission: lambda:GetFunction for resource: arn:aws:lambda:us-east-1:xxxx:function:yyyy:1 and try again. (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidLambdaFunctionAssociation; Request ID: zzzz)

対応

単純にlambdaのGetFunctionの権限が無いというもの。対象のlambdaを参照する側のリソースを特定して権限を与えればOK。
例外的なケースとして、このlambdaのバージョンは別のIAMポリシーで作られており、そのポリシーが設定されていないという場合もあった。
例えばCloudFormationのstack-Aとしてlambdaバージョン1と2を作っていたが、stack-Aは削除しており、stack-Bを新たに作成した際にlambdaバージョン1を参照しているケースである。尚、stack-Aとstack-Bでそれぞれ参照用のポリシーを作成して適用している場合に古いバージョンが参照できなくなる。

puttyのセッションをバッチ実行する際の便利な記述

概要

puttyのセッションが増えてくると実行する際に手間取るのでバッチ実行するやり方

前提

環境変数かSETを使って「PATH_PUTTY」にputty.exeのパスが入っているものとする

やり方

単純な実行方法

下記の文字列をテキストファイルに書き込み、拡張子を .bat にすればOK
ex) mytest.bat

start "" %PATH_PUTTY% -load "セッション名"

ファイル名に連動させる方法

下記の場合はファイル名をセッション名として実行する
例えばファイル名が mytest.bat であればセッション名が mytest のものが実行される
こうしておけば中身の文字列は変更せずにファイル名だけセッション名に合わせてコピーすればすぐ使えるようになる

start "" %PATH_PUTTY% -load "%~n0"

環境変数を使いたくない場合で、フォルダで管理する場合のtips

下記のような構成にしておけばinit.batが親に存在する場合は再帰で呼び出してくれるので、先頭の一か所にパスを書けば良くなる

/top/init.bat

SET PATH_PUTTY="C:\Program Files\putty\puttyjp.exe"

/top/sub/init.bat

IF EXIST %~dp0"..\init.bat" (call %~dp0"..\init.bat")

/top/sub/mytest.bat

IF EXIST %~dp0"init.bat" (call %~dp0"init.bat")
start "" %PATH_PUTTY% -load "%~n0"

新規ページを閲覧する際に10秒程度待たされるようになった

概要

windows10環境において、突然インターネットでページを閲覧する度に10秒程度待たされるようになった
その現象の解決方法について

現象

  • ページ閲覧する度に10秒程度待たされる
  • 一度閲覧すると2回目以降は速い(初回アクセスのページだけ遅い )

原因

早い話がIPv6DNSでIP解決しようとして、失敗している場合にこの現象が発生する
(※IPv6DNSを用意してあり、正しく設定している場合はこのケースでは無い)
10秒程度待てばIPv4DNSでIP解決出来ているようで、時間はかかるがアクセス出来てしまうのが厄介

解決方法

IPv6を使わないのであればネットワークアダプタの設定でIPv6を外してしまうのが手っ取り早い
使うのであればDNS設定を正しくする

トリガー

そもそも突然こうなった訳では無い、理由がある
著者のケースではvirtualboxをインストールした事がきっかけになったと思われる
想像になるが、今まではIPv4側が優先的に使われていたが、virtualboxインストール時にIPv6側が優先されたのではないか

類似問題かどうかの確認方法

chromeの開発者ツールを使ってネットワークタブを表示した状態で現象を発生させると、タイムラインからどこに時間を要したか分かる
これがDNS Lookupであり、10秒に近い場合は類似問題の可能性が高い

参考