STS認証を利用してS3のファイルを取得する
やりたいこと
アカウントAのS3にアカウントBがSTSを利用してファイルを取得したい
流れ
アカウントAがポリシーとロール作成
アカウントA(11111111111)、アカウントB(222222222222)とする
ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::mybucket/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::mybucket" } ] }
ロール
222222222222
の部分に事前にアカウントBに聞いたAWSアカウント番号を設定
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "sts:AssumeRole" } ] }
ここまで作業したらアカウントBへロール名を伝える
ARNと表示されているものをそのまま伝えればよい
アカウントAのAWS番号が11111111111
で、作成したロール名がaccountarole
の場合は以下になる
arn:aws:iam::11111111111:role/accountarole
アカウントBでユーザー作成、疎通確認
ユーザーにアタッチするポリシーを作成する
ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::11111111111:role/accountarole" } ] }
作成したポリシーをつけるユーザーを作成する
作成後、アクセスキーを発行する
疎通確認
ここまできたらS3へアクセスできるので確認する
まずはC:\Users\xxxxx\.aws
にあるconfig、credentialsを編集する
- credentials
[hogehoge] aws_access_key_id = 作成したユーザーのアクセスキー aws_secret_access_key = 作成したユーザーのシークレットアクセスキー
- config
[profile fugafuga] role_arn = arn:aws:iam::11111111111:role/accountarole source_profile = hogehoge
設定後、以下でアクセスできる
aws s3 ls s3://mybucket/ --profile fugafuga
補足
[profile fugafuga]
を設定せず、tokenを取得するケースも多いと思われる
その場合、まずは以下を実行する
aws sts assume-role --role-arn "arn:aws:iam::11111111111:role/accountarole" --role-session-name sts --profile hogehoge
レスポンスとして、AccessKeyId、SecretAccessKey、SessionTokenが取得できるので、それをcredentialsに設定する
[hoge-tmp] aws_access_key_id = 取得したAccessKeyId aws_secret_access_key = 取得したSecretAccessKey aws_session_token = 取得したSessionToken
設定後は同様に取得可能
aws s3 ls s3://mybucket/ --profile hoge-tmp
有効期限があるため、この手順では毎回credentialsを更新するのが手間になる
AmazonConnectで日本の電話番号取得
AmazonConnectで日本の電話番号を取得した際のメモ
最初は問い合わせ時に添付で必要書類を送るだけだったのだが、手順が変わった(2021/10/18時点)
- AWSのサポートへ日本の電話番号がほしい旨連絡
- メール記載の手順に従い書類をアップする
- 指定のS3にある申請書をダウンロードして記入
- 指定のS3に申請書と必要書類をアップロード
- メール記載のアクセス権を付与
- サポートへ返信
サポート連絡後、1日程度で電話番号の連絡がきました。参考まで。
【Jenkins】Pipelineでxmlをパース
pom.xmlで管理している特定のモジュールに対して、SNAPSHOTを付けて回りたかったときのメモ
極力jenkinsのプラグインは使わない
できたもの
import groovy.xml.StreamingMarkupBuilder import groovy.xml.XmlUtil pipeline { agent any stages { stage('clean') { steps{ cleanWs() } } stage('Git checkout') { steps { git credentialsId: 'xxxxxx', url: 'https://github.com/xxxxxxx.git', branch: "develop" } } stage('xmledit') { steps { script { def xmlFile = readFile(file: 'pom.xml') def project = xmlRead(xmlFile) for (dep in project.dependencyManagement.dependencies.dependency) { def idtext = dep.artifactId.text() if ("〇〇" == idtext){ def ver = dep.version.text() dep.version = ver + "-SNAPSHOT" } } project = new XmlSlurper(false,false).parseText(XmlUtil.serialize(project)) EDIT_XMLFILE = XmlUtil.serialize(project) } } } stage('xmlwtire') { steps { script { xmlWtire(EDIT_XMLFILE) } } } } post { failure { echo "========A execution failed========" } } } @NonCPS def xmlWtire(String xmltext) { writeFile(file: 'pom.xml', text: xmltext) } @NonCPS def xmlRead(String xmlFile) { def project = new XmlSlurper(false,false).parseText(xmlFile) return project }
CVSで管理していたソースをGitへ移行する
作業環境
CVSのみ入ってなかったので、brew install cvs
でインストール
cvs2gitインストール
移行方法はいくつかありましたが、情報が多かったcvs2gitを使うことにしました
ただし公式サイトがリンク切れになっているので、こちらからダウンロードしたcvs2gitを使いました
https://github.com/mhagger/cvs2svn
移行手順
管理ファイル取得
移行に必要なのはCVSの管理ファイル(xxx,vファイル)です
まずはこれを取得します
scp -r username@URL:/リポジトリパス ./cvsdump
日本語が含まれている場合は取得できないかもしれません
その場合はサーバーにログインして取得してください
変換
Gitへ移行する際に、ユーザーの紐付けが不要であれば以下でOKです
CVSのコメントが文字化けしたのでencodingはsjisをつけています、環境に合わせてください
cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --encoding=sjis --fallback-encoding=sjis import/
CVSとGitユーザーを紐付ける場合はoptionファイルを利用します
cvs2git --options=cvs2git.options --encoding=sjis --fallback-encoding=sjis
- cvs2gitと同じ場所にcvs2git-example.optionsがあるので、cvs2git.optionsにリネームします
- author_transformsに
CVSユーザー名:Gitユーザー名 <メールアドレス>
を記載します - 正常終了すると、cvs2git-tmpフォルダにblob.dat、git-dump.datができます
インポート
事前に移行先のGitリポジトリを作成しておいてください
作業場所にcloneします
git clone URL
cloneしたディレクトリに移動したあと、blob.dat、git-dump.datをインポートします
cat cvs2git-tmp/git-blob.dat cvs2git-tmp/git-dump.dat | git fast-import
インポートが終わったらプッシュして完了です
git push origin master
ERROR: A CVS repository cannot contain both
こちらを参考に対処します
cvs2svn FAQ
optionファイルを使ってretain-conflicting-attic-files optionを有効にする場合は、
ctx.retain_conflicting_attic_files = False
を
ctx.retain_conflicting_attic_files = True
に変えます
参考
ログを日付でgrepして失敗した話
例えば12時~13時の間のログファイルを確認したかったが失敗した話
考慮不足だった手順
grep "2020/12/1 1[2-3]" hoge.log
これで12~13時のログは出力できますが、
該当プロジェクトはjavaプロジェクトで、StackTraceは日付がない行で表示される。
肝心のエラーが拾えない。。。
対策
最初の行
grep -n -m 1 "2020/12/1 1[2-3]" hoge.log
最後の行
grep -n -m 1 "2020/12/1 1[2-3]" hoge.log | tail -n 1
取得した行番号でsed
sed -n '開始行,終了行p' ファイル名
sed -n '100,200p' hoge.log
tailよりtacのほうがよいらしいが、行番が逆なので工夫が必要、未確認。
もっと良いやり方があれば知りたい。
【Git】git filter-repoで特定ファイルの履歴だけ切り出す
既にGitで管理しているプロジェクトについて、
ある特定のディレクトリだけを切り出して、別プロジェクトで管理することになった。
最近はgit filter-branch
ではなく、git filter-repo
を使うらしい。
使い方
例 /hogehoge/commonsの履歴だけにする場合
git filter-repo --force --path hogehoge/commons/
tarコマンドで圧縮・解凍
自分用メモ
圧縮
tar zcf ./hoge.tgz -C /usr/local hoge
解凍
解凍したい場所で実行するか、Cオプションで解凍先を指定する
tar zxvf /usr/local/test/hoge.tgz -C /usr/local/test/