Awesome
Technologies
世界の最新技術を、仲間と楽しむ。
エンジニアの新しいソーシャルメディア。
8文字以上、英・数・記号が使えます
登録には 利用規約 に同意する必要があります。
SERVICE

世界の最新技術コミュニティ、
SHIMBAへようこそ!

最新技術が好きなエンジニアの、
ソーシャルメディアプラットフォームです。
ハイレベルなエンジニアが
あなたに注目
あなたの書いた記事は、SHIMBAの最新技術コミュニティによって評価されます。記事が注目を得ることで、あなたの技術・開発中のプロダクトに注目が集まります。
あなたの記事を世界に発信
SHIMBAコミュニティであなたの書いた・評価した記事は世界中へ公開され、企業や個人に注目されます。トレンドな情報を誰よりも早く、世界へ届けましょう。
あなたの活躍を独自の
アルゴリズムで評価
SHIMBAでは、独自のアルゴリズムであなたの技術コミュニティへの貢献度を評価します。 SHIMBAにしか存在しない、最新技術コミュニティで活躍しましょう。
RELATED ARTICLES

おすすめ記事一覧

GIthub、電話番号変更によるMFA制限ログインできなくなった時の対応方法
# 概要 MFA制限している電話番号を変更してしまい、ログインできなくなったので、サポートへ問い合わせをしました。 # 問い合わせ内容 Hi, There. I was to became can not login to below my account, bacause I change phone number a few days ago. https://github.com/{username} I tried recovery the account, but I couldn't receive recovery email. And I looked for email from github, I couldn't find about recovery methods. So, Please deactivate multi auth factor for The account. Best regards. ※なぜか登録Emailにリカバリーメール届かないので管理者の方で強制MFA解除を依頼 # Githubユーザートークン出力方法 ``` # キャッシュクリアー ssh-add -l ssh-add -D ssh-add -l # edit permission chmod 600 ~/.ssh/config # トークン出力 ssh -T git@github.com verify Please provide the following verification token to GitHub Support. {token} ``` 上記のトークンを送ったらMFA解除してもらえました。 SSHの鍵情報がローカルになかったら、詰んでました👍
2021.03.11
ServerlessでLambdaパーミッションを設定する方法
# 概要 LambdaをEventBridgeから呼び出したくなったので、LambdaはServerlessで作成した関数を対象にLambdaPermissionを設定することにした。 ```yaml functions: Foo: handler: src/functions/Foo.handler name: '${self:provider.stage}-Foo' Resources: FooLambdaPermissionEventBridge: Type: AWS::Lambda::Permission Properties: Action: 'lambda:InvokeFunction' FunctionName: !GetAtt FooLambdaFunction.Arn Principal: 'events.amazonaws.com' SourceArn: !Sub 'arn:aws:events:${opt:region, self:provider.region}:${AWS::AccountId}:rule/*' ``` サーバーレスのデフォルト対応できそうになかったので、LambdaPermissionを自前で実装して対応した。
2021.02.16
Cognitoの既存ユーザーの電話番号を削除する方法
# 概要 CognitoUserPoolの指定の既存ユーザーの電話番号を削除し、加えてphone_number_verifiedもfalseにするユースケースの紹介。 # ソースコード `deleteUserPoolPhoneNumber` を実行すると、指定のusernameユーザーの電話番号属性が削除されます。 ```js const setUserMFAPreference = async ( username, twoStepAuthentication, userPoolId ) => new Promise((resolve) => { const params = { Username: username, UserPoolId: userPoolId, MFAOptions: [] }; if (twoStepAuthentication) { params.MFAOptions.push({ AttributeName: 'phone_number', DeliveryMedium: 'SMS' }); } cognitoIdentityServiceProvider.adminSetUserSettings(params, (err, data) => { if (err) { throw err; } else { console.log( 'Set CognitoUserPool Multi-factor authentication :', username ); resolve(data); } }); }); const deleteUserPoolPhoneNumber = async (username, userPoolId) => new Promise((resolve) => { setUserMFAPreference(username, false, userPoolId) .then(() => { const params = { UserAttributeNames: ['phone_number'], // phone_number_verifiedは自動的にfalseに変更されるので指定しない UserPoolId: userPoolId, Username: username }; cognitoIdentityServiceProvider.adminDeleteUserAttributes( params, (err, data) => { if (err) { throw err; } else { resolve(data); } } ); }) .catch((e) => { throw e; }); }); ``` # まとめ Cognitoの認証実装方法を覚えるといろんなプラットフォームでも応用効くので、初学者はCognitoのSDK仕様を一度調べてみると良いだろうと思う。
2021.01.13
CognitoのテストをMock化してみた
# 概要 テスト実行時のCognitoへリクエストを連打するのはあまりよろしくないので、ローカルでの単体テスト時はMock化しました。 # ソースコード aws-sdk-mockなるライブラリあったけど、動作が不安定だったので結局JestでMock化。 promise()関数で戻り値を取得するタイプと、callback関数で戻り値を取得するタイプと2つあるので注意が必要。 ```js import * as AWS from 'aws-sdk'; beforeAll(async () => { jest .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminCreateUser') .mockImplementation((request) => { return {promise: () => 'ok'} }) jest .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminAddUserToGroup') .mockImplementation((request) => { return {promise: () => 'ok'} }) jest .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminSetUserPassword') .mockImplementation((request, callback) => { callback(null, 'ok'); }) jest .spyOn(AWS.CognitoIdentityServiceProvider.services['2016-04-18'].prototype, 'adminSetUserSettings') .mockImplementation((request, callback) => { callback(null, 'ok'); }) }) ``` callbackの場合のMockの作り方に悩んだ・・。 Amplifyの裏側のソースコードを読んだら答えがあったので、これもシェアしておきます。 https://github.com/aws-amplify/amplify-js/pull/398/files/f0136c16fb10e58d5a779b96bd50397257340592 AWSSDKの仕様で詰まったら、GithubでSDKのソースコードと見ると答えがあるので参考に。
2021.01.07
DynamoDBの指定テーブルを物理削除するBatch処理を作成してみた
# 概要 開発中にDynamoDBを物理削除したい時がしばしば。例えば、CloudFormationを使用したデプロイを行っている際に、DynamoDBのデプロイは疎通したけど他のデプロイタスクで転けた場合に、次回のデプロイでDynamoDBのテーブルが既に存在するというエラーの時には物理削除をする必要があるだろうと思う。 # ソースコード ```js // batch/deleteDynamoDBAllTable.js const prefix = process.argv[2]; // ここに任意のテーブル名を追加 const tables = [ `${prefix}-User`, `${prefix}-Article`, `${prefix}-ArticleCategory` ]; Promise.all( tables.map(async (tableName) => { console.log({ TableName: tableName }); return ddb.deleteTable({ TableName: tableName }, function (err, data) { if (err) { return ( 'Unable to delete table. Error JSON:', JSON.stringify(err, null, 2) ); } return ( 'Deleted table. Table description JSON:', JSON.stringify(data, null, 2) ); }); }) ) .then(console.log) .catch(console.error); ``` ```shell $ node batch/deleteDynamoDBAllTable.js dev ``` 既存でデータが存在していてそれを残したい場合は、かならずバックアップの上実行することを推奨します。
2021.01.07
記事一覧へ
Let's Challenge together !!
世界の最新技術コミュニティに参加しませんか?
SIGN UP